Probleme utilisation Type [VBS] - VB/VBA/VBS - Programmation
Marsh Posté le 15-12-2010 à 10:32:01
Citation : sa ne marche pas |
Il ne faut jamais écrire sa ! Pourriez-vous, s'il vous plait, nous donner plus d'informations sur le problème ?
Votre projet est très ambitieux, car il s'attaque à cinq sujets qui ne sont pas faciles : la programmation, les tableaux, les objets, les scopes des variables, et la récursivité.
Je crains que le problème viennent de plusieurs de ces sujets à la fois.
1. La programmation
Sa se voit que vous débuter parce que vos noms de variables sont mal choisis. Ils sont trop vagues, et trop proches de mots clés avec lesquels il pourrait y avoir une confusion. Vous cherchez une solution compliquée alors que l'on peut obtenir le résultat plus simplement. Vous faîtes un Dim i,x et vous n'utilisez ni i ni x !
2. Les tableaux
Vous faîtes un ReDim tabs(0) sans avoir fait Dim tabs() auparavant !
Vous utilisez ReDim pour avoir un tableau ayant un nombre d'éléments qui n'est pas déterminé à l'avance, mais vous pourriez utilisez simplement Dim sans donner de dimension, pour avoir le même résultat. C'était il y a 20 ans que l'on avait besoin de ReDim car à l'époque Dim demandait que l'on indique à l'avance le nombre d'élément. Maintenant, il existe les tableaux dynamiques sans avoir besoin de gérer soi même la partie dynamique. Il est dommage de ne pas utiliser les tableaux dynamiques existants, et de réinventer la roue.
Parfois, vous utiliser Dim sans préciser As ... C'est une démarche incohérente. La principale utilité de Dim est de donner un type à une variable. Si on ne le fait pas, alors votre variable est du type Variant, et c'est contradictoire avec votre volonté de cadrer les choses avec de la programmation objet.
Vous utiliser Ubounds(tabs) alors que vous connaissez déjà la taille de votre tableau. Il faut utiliser Ubounds avec parcimonie, sinon sa montre que vous ne maitrisez pas les données que vous manipulez.
3. Les scopes des variables
Vous avez des variables globales et des variables locales, mais vous ne semblez pas avoir réfléchit au pourquoi de vos choix.
4. La récursivité
Il faut utiliser la récursivité, et vous ne l'utilisez pas.
Marsh Posté le 15-12-2010 à 17:11:54
Désolé de répondre maintenant ne trouvant pas de réponse j'ai décidé de créer une matrice de 3 lignes contenant un chemin,le nom du dossier et son nom modifié (car mon programme permet de crypté,enlever les accents et décrypté une arborescence)
Au niveau de la récursivité je sais qu'il faut l'utilisé je l'utilise d'ailleur mais je ne voulais pas montrez quelque chose d'inutile car le problème était au niveau de l'utilisation des Type. Par contre pour le tableau,faire un Dim tabs() puis un ReDim tabs(2) ne marchez pas c'est donc pourquoi j'ai utiliser uniquement le ReDim tabs(2) puis des ReDim Preserve
Merci comme même et je vous poste aussi (comme même)le code
Spoiler : |
Marsh Posté le 20-12-2010 à 10:28:09
hakumen a écrit : faire un Dim tabs() puis un ReDim tabs(2) ne marchez pas |
C'est normal car il existe deux Dim différent :
- Le vieux Dim, où l'on indique la taille maximale, par exemple Dim toto(20)
Cela permet de définir un tableau de taille fixe.
Avec ce Dim, on peut faire un ReDim, si on a besoin de changer la taille.
- Le nouveau Dim, où l'on n'indique pas la taille, par exemple Dim toto()
Cela permet de définir un tableau de taille variable.
Avec ce nouveau Dim, on ne peut pas faire de ReDim, car cela n'aurait aucun sens. Notre tableau est déjà un tableau extensible. On peut enlever ou ajouter autant d'éléments que l'on veut.
Marsh Posté le 14-12-2010 à 22:02:15
Bonjour je voudrais créer en VBScript une Structure comme en VB,je crois,d'après ce que j'ai vu qu'il fallait utiliser TYPE donc c'est se que je fais mais sa ne marche pas .J'aurais donc besoin d'aide pour comprendre mes erreurs merci d'avance.
Le code
Option Explicit
Dim oFSO,objShell
Set oFSO = CreateObject("Scripting.FileSystemObject" )
Set objShell = WScript.CreateObject("WScript.Shell" )
''---Function arborescence
''-----Renvoi un tableau contenant l'arborescence du chemin 'chemin'
Private Type propriete
Dim nom As string
Dim chemin As String
End Type
Function arborescence(chemin)
Dim i,x
Dim oFl,oFld
ReDim tabs(0)
Set tabs(0) = New propriete
For each oFl in oFSO.GetFolder(chemin).Files
tabs.nom(Ubound(tabs)) = oFl.Name
tabs.chemin(ubounds(tabs)) = oFls.Path
Redim Preserve tabs(Ubound(tabs) + 1) '--Augmente la taille du tableau
Next
arborescence = tabs
End Function
Dim chemin
chemin = "D:\IUT\ASR3\Cédric"
Dim arbo
arbo = arborescence(chemin)
Dim i
For i = 0 To Ubound(arbo)
wscript.echo arbo.nom(i).nom
Next