Listage de fichiers

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

  • Listage.xls
    19.5 KB · Affichages: 31

Dranreb

XLDnaute Barbatruc
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
 

Troudz

XLDnaute Occasionnel
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.
 

Dranreb

XLDnaute Barbatruc
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
 

Discussions similaires

Réponses
19
Affichages
2 K

Statistiques des forums

Discussions
312 248
Messages
2 086 594
Membres
103 250
dernier inscrit
keks974