1 pièce(s) jointe(s)
Besoin d'explications sur une procédure.
Bonjour,
Ce que je souhaite faire :
En supposant l'arborescence suivante (très nombreux sous-dossiers de la forme IDxxxx):
P:\TOTO\
ID1234
ID3254
ID5644
ID6756
ID....
Dans ma procédure, j'affecte le dossier "P:\TOTO" à la variable "MonRepertoire". Les dossiers IDxxxx se situent juste en dessous du dossier TOTO.
La procédure scrute alors tous les sous-dossiers IDxxxx et regarde s'il n'y a pas un fichier du type *.docm. Si un fichier est trouvé, le programme affiche le résultat suivant :
En cellule A1 : IDxxxx et juste à côté (cellule B1) le nom du fichier ayant l'extension docm.
Le programme boucle sur tous les sous-dossiers et affiche quand cela est nécessaire le résultat en sautant une ligne à chaque fois.
Ce que j'ai trouvé sur le net :
J'ai trouvé sur le net une procédure qui réponds à mon besoin (j'y ai apporté quelques modifs) cependant j'aurais besoin de quelques explications car je souhaiterais y apporter quelques modifications. Ci-dessous la procédure :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| Option Explicit
Sub ListeFichiersRepert()
Dim Fso As Object
Dim MonRepertoire As String, f As Object, x As Integer
Dim f1 As Object, f2 As Object
Set Fso = CreateObject("Scripting.FileSystemObject")
MonRepertoire = InputBox("Enter the root directory", "Root directory", "P:\TOTO")
'
x = 1
For Each f In Fso.GetFolder(MonRepertoire).Files
If f.Name Like "*.docm*" Then
Cells(x, 1).Value = f.Name
x = x + 1
End If
Next f
x = 1
For Each f1 In Fso.GetFolder(MonRepertoire).SubFolders
Cells(x, 2).Value = f1.Name
x = x + 1
For Each f2 In f1.Files
If f2.Name Like "*.docm*" Then
Cells(x - 1, 3).Value = f2.Name
x = x + 1
End If
Next f2
x = x - 1
Next f1
End Sub |
Après avoir exécuté la macro voici ce que j'obtiens :
Pièce jointe 467746
Mes interrogations :
Pourquoi lorsque j'exécute la macro le premier résultat IDxxxx est-il situé en cellule B1 ? Dans la première boucle x étant égal à 1 le résultat devrait être affiché en cellule (1,1) ?
Pourquoi les ID ne sont-ils pas dans l'ordre alphabétique ? Il commence par l'ID5073, suivi de l'ID4621 puis ID4694_1 ... ?
La première boucle semble traiter des fichiers et la seconde des dossiers ?
Pourriez vous m'expliquer ce que fait la ligne de commande : For Each f In Fso.GetFolder(MonRepertoire).Files ?
De façon générale comment fonctionne cette procédure ? Boucles ?
Merci par avance.
Cdlt.
Jérôme.