Re : Détecter les noms des feuilles d’un workbook
- la citation 6 "wbk2 est bien défini comme un objet de type Workbook, mais wbk1 est défini comme Variant (voir l'aide)" ?
Il vaut toujours mieux définir une variable avec le type le plus approprié, car le type par défaut (Variant) consomme beaucoup plus de mémoire, et demande aussi plus de temps à l'exécution (dans une boucle par exemple).
après chaque variable, il faut spécifier le type :
Dim wbk1, wbk2 As Workbook
==> wbk1 est un une variable de type Variant, wbk2 est une variable objet de type Workbook
Dim wbk1 As Workbook, wbk2 As Workbook
==> wbk1 et wbk2 sont des variables objet de type Workbook
Il est bon aussi de respecter quelques principes :
- utiliser des noms de variable le plus parlant possible (comme tu le fais déjà)
- préfixer la variable avec trois caractères résumant le type (strVariable pour un type String, intVariable pour Integer, lngVariable pour Long, wshVariable pour Worksheet, wbkVariable pour Workbook, etc...)
- utiliser l'indentation : mettre en retrait les lignes de codes se trouvant dans une boucle (code plus lisible)
- il y en a d'autres, mais c'est assez pour aujourd'hui
- Pour la citation 4: "FileToOpen = Application.GetOpenFilename("Fichiers texte (*.txt), *.txt") doit être placé dans le Do Loop, sinon, on charge à chaque fois le même fichier". jai essaye ca na pas marche. il me proposait en boucle d'ouvrir un fichier. jai reussi autremant avec le code de Temjeh "If FileToOpen = False Then Exit Sub
Workbooks.OpenText Filename:=FileToOpen , Origin:=xlWindows, StartRow:=1, DataType:=xlDelimited, TextQualifier _ ......."
Ca marche...
Corrigé dans la version jointe
- Pour la citation 3:"Worksheet est un mot réservé de VBA, qui ne peut pas être utilisé comme variable". je nai pas compris en tout les cas ce code fonctionne.
Autant pour moi : ça a produit une erreur chez moi, car j'utilise toujours Option Explicit en tête de module. Et c'est ce qui a provoqué l'erreur. Effectivement, avec Worksheet, le code tourne...
mais, bon, je persiste : Worksheet est bien un terme utilisé par VBA (pour être précis, c'est une classe d'objet), donc j'évite de faire des déclarations qui ressembleraient à
Dim Worksheet As Worksheet...
Voici un extrait de l'aide VBA :
Règles d'affectation de noms Visual Basic
Utilisez les règles suivantes pour nommer des
procédures, des
constantes, des
variables et des
arguments dans un
module Visual Basic :
- Utilisez une lettre comme premier caractère.
- N'utilisez pas d'espace, de point (.), de point d'exclamation (!) ou les caractères @, &, $, # dans le nom.
- Un nom ne peut compter plus de 255 caractères.
- Généralement, vous ne devriez pas utiliser des noms identiques aux noms de fonction, d'instruction et de méthode de Visual Basic. Vous feriez double emploi des mots clés du langage. Pour utiliser une fonction, une instruction ou une méthode du langage intrinsèque en conflit avec un nom attribué, vous devez l'identifier explicitement. Faites précéder la fonction, l'instruction ou la méthode intrinsèque du nom de la bibliothèque de types associée. Par exemple, si vous avez une variable nommée Left, pour invoquer la fonction Left, vous devez employer VBA.Left.
- Vous ne pouvez pas employer deux fois le même nom au même niveau de portée. Par exemple, vous ne pouvez pas déclarer deux variables nommées age dans la même procédure. Cependant, vous pouvez déclarer une variable privée nommée age et une variable de niveau procédure nommée age dans le même module. Note Visual Basic ne différencie pas les majuscules des minuscules, mais conserve la casse dans l'instruction de déclaration du nom.
- Pour la citation 2: "C'est plus "propre" que le Goto startover qui est hérité des premières génération de Basic, mais côté structuration du programme..." En quoi le goto n'est pas propre ?
Je suis peut-être un peu chatouilleux, surtout vis à vis de programmeurs non professionnels, mais si le programme prend de l'ampleur (si le nombre de lignes augmente), utiliser des Goto finit par faire ressembler le code à "un plat de nouilles" (en terme de structuration)
Merci pour ces conseils, c'est toujours interessant de savoir optimiser son code.
Le forum sert à ça
Dernière question : est-il nécessaire d'ouvrir le fichier ? Recueillir simplement le nom du fichier devrait suffire. A moins que j'ai loupé quelquechose...