Utilise la structure TypeFichier (nom, repertoire, taille)
Stockage de cette liste dans un tableau global : ListeFichiers()
dans la sub "liste_fichiers",
modifier le nom du Dossier à lister stocké dans la variable: Dossier
Routine récursive : Dir_Fichiers
Attention : la fonction VB "Dir" n'est pas récursive, on doit donc repositionner un pointeur sur la dernière entrée lue par la fonction "Dir" avant de poursuivre la lecture des entrées.
Source / Exemple :
Option Explicit 'déclaration obligatoire des variables
Public Type TypeFichier
nom As String
repertoire As String
taille As Long
End Type
Public ListeFichiers() As TypeFichier
'
Public Sub liste_fichiers()
Dim Dossier As String
Dim NbreFicTot As Long
Debug.Print String(100, "*")
ReDim ListeFichiers(0 To 0) As TypeFichier
Dossier = "D:\transfert"
Call Dir_Fichiers(Dossier)
NbreFicTot = UBound(ListeFichiers)
MsgBox NbreFicTot & " fichiers", vbInformation, "Fin Liste Fichiers"
End Sub
Public Sub Dir_Fichiers(ByVal Dossier As String)
'utilise la Variable globale : 'ListeFichiers() as TypeFichier
Dim Chemin As String
Dim FichierLu As String
Dim NbreFichiersLus As Long, NbreFichiers As Long
Dim i As Long
NbreFichiersLus = 0
Chemin = Dossier + "\"
'liste les fichiers et les dossiers avec l'option vbDirectory
FichierLu = Dir(Chemin, vbDirectory)
Do While FichierLu <> ""
NbreFichiersLus = NbreFichiersLus + 1
If FichierLu <> "." And FichierLu <> ".." Then
If (GetAttr(Chemin & FichierLu) And vbDirectory) = vbDirectory Then
'c'est un répertoire, on l'examine de facon récursive
Debug.Print "Dossier: " & Chemin & FichierLu & " " & String(70, "-")
Call Dir_Fichiers(Chemin & FichierLu)
Debug.Print "Fin Dossier: " & Chemin & FichierLu & " " & String(70, "-")
'après avoir examiné le sous-dossier, il faut repositionner Dir sur l'entrée suivante
'car la fonction dir n'est pas récursive et a donc perdue la dernière position
'on réinitialise donc Dir et repositionne le flag à la bonne place avec NbreFichiersLus
FichierLu = Dir(Chemin, vbDirectory)
For i = 1 To NbreFichiersLus - 1
FichierLu = Dir
Next i
Else
'c'est un fichier, on le met dans la liste globale
'augmente de 1 la taille de la liste en préservant le contenu du tableau de la liste
Debug.Print FichierLu
NbreFichiers = UBound(ListeFichiers) + 1
ReDim Preserve ListeFichiers(0 To NbreFichiers) As TypeFichier
'ajoute le fichier à la liste
ListeFichiers(NbreFichiers).nom = FichierLu
ListeFichiers(NbreFichiers).repertoire = Chemin
ListeFichiers(NbreFichiers).taille = FileLen(Chemin & FichierLu)
End If
End If
'passe à l'entrée suivante de la fonction Dir
FichierLu = Dir
Loop
End Sub
Conclusion :
Toutes les étapes sont affichées en mode debug à l'exécution.
Attention les fichiers ne sont pas triés, même entre les répertoire car la fonction Dir ne trie pas les fichiers.
Utiliser ensuite le tableau pour faire vos traitement de tri par dossier etc...
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.