Bonsoir Eole, bonsoir le forum,
Le code ci-dessous scrute un dossier et tous ses sous-dossiers (1er degré) mais ne va pas au-delà du premier degré. Il n'analyse pas le sous-dossier d'un sous-dossier. Cela conviendra-t-il ?...
Le résultat est renvoyé dans un tableau à partir de la ligne 1 dans les colonnes A (non du dossier / sous-dossier) et B (nom du fichier) :
Sub Macro1()
Dim CI As String 'définit le Chemin d'accès du dossier Initial
Dim SF As Object 'déclare la variable SF (Système de Fichiers)
Dim DI As Object 'déclare la variable DI (Dossier Initial)
Dim I As Integer 'déclare la variable I (Incrément)
Dim F As Object 'déclare la variable F (Fichier)
Dim TF() 'déclare la variable TF (Tableau des Fichiers)
Dim SD As Object 'déclare la variable SD (Sous-Dossiers)
CI = "C:\Users\eole33\Documents" 'définit le chemin du dossier initial (à adapter)
Set SF = CreateObject("Scripting.FileSystemObject") 'définit le système de fichier SF
Set DI = SF.GetFolder(CI) 'définit le dossier initial
I = 1 'initialise la variable I
For Each F In DI.Files 'boucle sur tous les fichiers F du dossier intial DI
If Right(F.Name, 3) = "txt" Then 'condition : si les 3 derniers caractères du nom du fichier F sont "txt"
ReDim Preserve TF(1 To 2, 1 To I) 'redimensionne le tableau des fichiers TF (2 lignes, I colonnes)
TF(1, I) = DI.Name 'récupère le nom du dossier dans la ligne 1
TF(2, I) = F.Name 'récupère le nom du fichier dans la ligne 2
I = I + 1 'incrémente I (ajoute une colonne au tableau de fichiers TF)
End If 'fin de la condition
Next F 'prochain fichier de la boucle
For Each SD In DI.SubFolders 'boucle 1 : sur tous les sous-dossiers du dossier initial DI
For Each F In SD.Files 'boucle 2 : sur tous les fichiers du sous-dossier
If Right(F.Name, 3) = "txt" Then 'condition : si les 3 derniers caractères du nom du fichier F sont "txt"
ReDim Preserve TF(1 To 2, 1 To I) 'redimensionne le tableau des fichiers TF (2 lignes, I colonnes)
TF(1, I) = DI.Name & "\" & SD.Name 'récupère le nom du sous-dossier dans la ligne 1
TF(2, I) = F.Name 'récupère le nom du fichier dans la ligne 2
I = I + 1 'incrémente I (ajoute une colonne au tableau de fichiers TF)
End If 'fin de la condition
Next F 'prochain fichier de la boucle 2
Next SD 'prochain sous-dossier de la boucle 1
If I > 1 Then 'condition : si au moins un fichier a été trouvé
'renvoie dans la cellule A1 redimensionnée (autant de lignes que TF as de colonne, 2 colonnes) le tableau TF transposé
Range("A1").Resize(UBound(TF, 2), UBound(TF, 1)).Value = Application.Transpose(TF)
End If 'fin de la condition
End Sub