Pointer avec un lien hypertexte vers les fichiers d'un répertoire
La macro Repertorier appelle la fonction Lister en lui passant en paramètres les choix de l'utilisateur sur
- le dossier à analyser
- L'inclusion ou non des sous dossiers,
- Le N° de la ligne ou commencer à incrire les données
- Le filtrage éventuel sur un type de fichier.
sub Repertorier() 'Une méthode basique sans API pour lister les répertoires et 'sous-répertoires. Michel Pierron, MPFE 2002. Adaptation Flo Cabon sur une idée de "mrik"
'* nRow = Ligne de départ
'* FolderName = Chemin du répertoire à lister
'* Suffix = Filtre optionnel des types de fichiers
'* subDir = True pour étendre la liste aux sous-répertoires
Dim LeMessage As String, LeRepertoire As String, Lextension As String
Dim Profondeur As VbMsgBoxResult
Dim nRow As Long
LeMessage = "Choisissez le dossier à analyser"
LeRepertoire = GetDirectory(LeMessage)
Lextension = InputBox("indiquez éventuellement une extension de fichier pour filtrer les fichiers", "Type de fichier", "*.*")
Profondeur = MsgBox("Voulez vous analyser aussi les sous-répertoires ?", vbYesNo, "Profondeur d'analyse")
nRow = InputBox("indiquez le N° de la première ligne pour le tableau de sortie", "Sortie des résultats", "1")
If Profondeur = vbYes Then
truc = Lister(nRow, LeRepertoire, Lextension, True)
Else
truc = Lister(nRow, LeRepertoire, Lextension, False)
End If
end subFunction Lister(nRow&, FolderName$, Optional Suffix$ = "*.*", OptionalsubDir As Boolean = True) Dim i As Long, x As Long, File As String, Folder As String, nbFolders() As String Cells(nRow, 1) = FolderName Cells(nRow, 1).Font.Bold = True If Not Right(FolderName, 1) = "" Then FolderName = FolderName & "" File = Dir(FolderName & Suffix) Do While Len(File) > 0 With ActiveSheet .Hyperlinks.Add Anchor:=.Cells(nRow, 2), _ Address:=FolderName & File, _ TextToDisplay:=File End With nRow = nRow + 1 File = Dir Loop If NotsubDir Then Exit Function x = 0 Folder = Dir(FolderName, vbDirectory) Do While Folder > "" If Folder <> "." And Folder <> ".." Then If (GetAttr(FolderName & Folder) And vbDirectory) = vbDirectory Then x = x + 1 End If Folder = Dir Loop ReDim nbFolders(x + 1) i = 1 nbFolders(i) = Dir(FolderName, vbDirectory) Do While nbFolders(i) > "" If nbFolders(i) <> "." And nbFolders(i) <> ".." Then If (GetAttr(FolderName & nbFolders(i)) And vbDirectory) = vbDirectory Then i = i + 1 End If nbFolders(i) = Dir Loop For i = 1 To UBound(nbFolders()) - 1 Call Lister(nRow, FolderName & nbFolders(i), Suffix) Next End FunctionAstuce illustrée par ce classeur
mpfc-repertoires
Auteurs : Michel Pierron, Flo Cabon
- Vous devez vous identifier ou créer un compte pour écrire des commentaires
