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 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76
| Option Explicit
Option Private Module
' Note : il faut activer les références (dans Outils > Références ...) à :
' - Microsoft Scripting Runtime
' - Microsoft Shell Controls And Automation
Public Sub Lister_Fichiers()
' Liste les fichiers d'un répertoire et ses sous-répertoires dans une feuille Excel
Dim s As Shell32.Shell 'Shell
Dim c As Shell32.Folder 'Choix de recherche dossier
Dim p As String 'Chemin (Path) du dossier
Dim m As String 'Message de la boite de dialogue
Dim f As Scripting.Dictionary 'Fichiers
Dim w As Excel.Workbook 'Classeur
Dim r As Excel.Range 'Plage
'Afficher la boite de dialogue avec l'arborescence
On Error Resume Next
m = "Choisir le répertoire à analyser :"
Set s = New Shell32.Shell
Set c = s.BrowseForFolder(0, m, 513)
p = c.Items.Item.Path
On Error GoTo 0
'Fichiers du répertoire
If p <> "" Then
Set f = New Dictionary
Call ListerDossier(f, p)
If f.Count > 0 Then
Set w = Application.Workbooks.Add(xlWBATWorksheet)
Set r = w.Worksheets(1).Range("A1:B1")
With r
'Titres
.Font.Bold = True
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
.WrapText = False
.Cells(1, 1).Formula = "Fichier concerné"
.Cells(1, 2).Formula = "Chemin complet du fichier"
'Liste fichiers
.Offset(1).Cells(1, 1).Resize(f.Count) = Application.Transpose(f.Items)
.Offset(1).Cells(1, 2).Resize(f.Count) = Application.Transpose(f.Keys)
.EntireColumn.AutoFit
End With
End If
End If
Set s = Nothing
Set c = Nothing
End Sub
Sub ListerDossier(f As Scripting.Dictionary, ByVal p As String)
Dim d As Scripting.Dictionary 'Dossiers
Dim k As Variant 'Clé
Dim n As String 'Nom
Set d = New Dictionary
p = p & "\"
n = Dir(p, vbDirectory)
' Liste des sous-répertoires
Do While n <> ""
If n <> "." And n <> ".." Then
If (GetAttr(p & n) And vbDirectory) = vbDirectory Then
d(p & n) = n
End If
End If
n = Dir
Loop
' Lister les fichiers
n = Dir(p)
Do While n <> ""
f(p & n) = n
n = Dir
Loop
' Lister chaque sous-répertoire
If d.Count > 0 Then
For Each k In d.Keys
n = k
Call ListerDossier(f, n)
Next k
End If
End Sub |
Partager