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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 :

Nom : Capture.JPG
Affichages : 360
Taille : 38,7 Ko


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.