• Initiateur de la discussion Initiateur de la discussion Troudz
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Troudz

XLDnaute Occasionnel
Bonjour,

Je souhaiterai lister, dans un contrôle listbox, l'ensemble des fichiers .xls présents dans un répertoire et sous répertoires (l'arborescence est assez profonde) avec, dans la première colonne, le nom du fichier et la deuxième colonne le chemin complet du fichier.
J'ai donc élaboré la procédure suivante (en m'inspirant largement de ce que j'ai trouvé sur différents sites) :
Code:
Private Sub UserForm_Initialize()
    Dim Chemin As String
    Dim fso, ListR, sRep, ListF, Rep, LesReps, fich, LesFichs
    Chemin = "C:\Temp\"
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set ListR = fso.GetFolder(Chemin)
    Set sRep = ListR.SubFolders
    UserForm1.ListBox1.ColumnCount = 2
    UserForm1.ListBox1.ColumnWidths = "200;200"
    For Each Rep In sRep
        For Each fich In Rep.Files
            If fich.Name <> "" Then
                ListBox1.AddItem fich.Name
                ListBox1.List(ListBox1.ListCount - 1, 1) = Chemin & Rep.Name & "\" & fich.Name
            End If
        Next
    Next
End Sub

Ce code fonctionne très bien sauf qu'il ne liste pas les fichiers présents :
- directement à la racine
- dans les "sous - sous - répertoires" (et suivants)

Comment pourrais je l'améliorer pour obtenir le résultat escompté ?

Je vous remercie par avance,

P.S. : Je vous joints un petit fichier exemple au cas où
 

Pièces jointes

Re : Listage de fichiers

Bonjour.

Cochez "Microsoft Scripting Runtime" dans la liste Références disponible, menu Outils, Références… et essayez comme ça :
VB:
Dim T(), LMax As Long
Private Sub UserForm_Initialize()
Dim FSO As New FileSystemObject
Me.ListBox1.ColumnCount = 2
Me.ListBox1.ColumnWidths = "500;150"
AjoutLbxFicDos FSO.GetFolder("C:\Temp\")
Me.ListBox1.List = WorksheetFunction.Transpose(T)
End Sub

Sub AjoutLbxFicDos(ByVal Doss As Folder)
Dim F As File, D As Folder, Z As String
For Each D In Doss.SubFolders: AjoutLbxFicDos D: Next D
For Each F In Doss.Files
   LMax = LMax + 1: ReDim Preserve T(1 To 2, 1 To LMax)
   T(1, LMax) = F.Path: T(2, LMax) = F.Name: Next F
End Sub
 
Re : Listage de fichiers

Bonjour Bernard et merci beaucoup pour ce bout de code. Il fonctionne parfaitement.

J'ai juste une erreur de type "Permission refusée" lorsque je boucle sur le répertoire C:\Temp mais je pense que c'est plutôt une histoire de droits d'administration avec Windows 7.
 
Re : Listage de fichiers

J'ai déjà eu ce cas aussi, je vais voir comment je l'ai contourné…

Bon, c'est un peu compliqué, j'ai une gestion d'erreur. J'ai :
VB:
On Error GoTo ErrFich
For Each Fic In Dos.Files
…
FichierSuivant:
   Next Fic
Dossiers: On Error GoTo ErrDoss
For Each SDos In Dos.SubFolders
…
SDossSuivant:
   Next SDos
Fin: Exit Sub
ErrFich: If Err = 18 Then InterruptionDemandée = True: Resume
If Err = -2147220990 Then Resume FichierSuivant ' Pas d'info TypeLib
If Err = 70 Then ' Permission refusée.
   If Fic Is Nothing Then Resume Dossiers
   Resume FichierSuivant
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
3
Affichages
1 K
V
Réponses
3
Affichages
998
E
  • Question Question
Réponses
6
Affichages
1 K
ebenezerkonan
E
  • Suggestion Suggestion
Recherche & référence FS0(S)
Réponses
4
Affichages
2 K
M
Réponses
39
Affichages
4 K
S
Réponses
1
Affichages
1 K
S
Retour