Lister récursivement fichiers et dossiers avec Excel VBA
Date de publication:
Mise à jour :
Articles > Lister récursivement fichiers et dossiers avec Excel VBA
Statut 2026 et utilisation sûre
Conclusion : Visitez chaque dossier de manière récursive, générez les fichiers dont vous avez besoin et remettez chaque dossier enfant dans la même procédure. Ajoutez une gestion explicite des erreurs et une stratégie pour les jonctions, les liens symboliques, les dossiers cachés et les chemins d'accès refusé.
Ce que vous apprendrez
- Comment FileSystemObject expose les dossiers, sous-dossiers, fichiers, noms et chemins.
- Comment la récursion crée un arbre complet et pourquoi les arbres profonds ou cycliques ont besoin de protections.
- Comment écrire des résultats dans une feuille de calcul sans ralentir les opérations cellule par cellule à grande échelle.
À qui s'adresse : les utilisateurs d'Excel inventoriant une arborescence de répertoires Windows contrôlée.
Note de mise à jour (2026) : l'échantillon reflète le test local original de l'auteur. Validez les autorisations et le comportement des liens sur une copie de votre structure de répertoires, et envisagez PowerShell ou un outil d'inventaire dédié pour les arborescences très volumineuses ou sensibles en matière de sécurité.
Note de sécurité : les commandes et exemples de configuration de l'article d'origine n'ont pas été rejoués dans un environnement de production actuel. Avant toute application, vérifiez les versions prises en charge, les sauvegardes, les contrôles d'accès et la procédure de retour arrière dans un environnement de test isolé.
Sources primaires officielles
Vue d’ensemble
Cette section décrit comment obtenir une liste de fichiers et une liste de dossiers, y compris les sous-dossiers, en utilisant VBA (macro Excel). Cet article est destiné aux personnes qui souhaitent programmer les tâches suivantes
- Je veux obtenir une liste de tous les fichiers ou dossiers sous un dossier avec leurs chemins complets.
- Vous voulez effectuer un traitement en boucle pour les fichiers ou les dossiers sous un dossier.
Table des matières
1. Méthode de programmation
Des exemples de référence de la programmation sont donnés ci-dessous.
Puisqu'il est créé dans Function, je voudrais qu'il soit copié tel quel et que les appels de méthode soient effectués à partir de Sub.
'Parameter Examples
'## filePath C:\Users\user\Desktop\test\
'## kind false:folder, true:file
'## list
Function getFolderOrFile(filePath As String, kind As Boolean, list As Collection) As Collection
'delete\
Dim filePathEnd As String
filePathEnd = Right(filePath, 1)
If filePathEnd = "\" Then
filePath = Left(filePath, Len(filePath) - 1)
End If
'Folder existence check
Dim result As String
result = Dir(filePath, vbDirectory)
If result = "" Then
MsgBox "File does not exist!"
Exit Function
End If
If kind Then
Dim buf As String
buf = Dir(filePath & "\*.*")
Do While buf <> ""
list.Add filePath & "\" & buf
buf = Dir()
Loop
Else
list.Add filePath
End If
Dim folder As Object
With CreateObject("Scripting.FileSystemObject")
For Each folder In .GetFolder(filePath).SubFolders
getFolderOrFile folder.Path, kind, list
Next folder
End With
End Function
Pour l'utiliser, passez les éléments suivants comme arguments.
- filePath: répertoire. Exemple.) C:\Users\user\Desktop\test
- kind: Passez vrai, faux. Si True, renvoie une liste de fichiers. Si false, renvoie une liste de dossiers.
- list: La collection est utilisée pour stocker les résultats. Un exemple de mise en œuvre est donné ci-dessous.
Un exemple de mise en œuvre d'un appel de fonction réel est présenté ci-dessous.
Sub test()
Dim list As Collection
Set list = New Collection
getFolderOrFile "C:\Users\user\Desktop\test", False, list
Dim item As Variant
For Each item In list
'------TODO------
ThisWorkbook.Worksheets(1).Cells(1, 1).Value = item
Next
End Sub
L'appel à getFolderOrFile stocke une liste de fichiers ou une liste de dossiers dans la liste. L'exemple d'implémentation est Faux, donc la liste des dossiers est stockée.
Décrivez le processus que vous souhaitez effectuer dans la section "TODO" de l'instruction "For". ITEM peut être traité comme une variable de type String.
La source de référence est le processus de mise en place de la liste acquise à A1 dans Excel. (Le processus écrase de façon répétée la même cellule.)
2. Description du code.
C'est la fin des instructions sur la façon d'utiliser le système, suivie d'une explication du code.
Les détails peuvent être vus dans le code, mais le point clé est l'appel supplémentaire à getFolderOrFile dans la méthode getFolderOrFile.
Dans le processus de recherche de dossiers, le processus est répété en appelant le processus de recherche de dossiers, qui est un mécanisme de recherche de tous les dossiers.
En appelant sa propre méthode, elle le fait de manière répétée tant que le dossier est trouvé, en cherchant dans tous les dossiers.
3. résumé
Si vous avez besoin d'aide pour savoir comment obtenir une liste de fichiers et une liste de dossiers, y compris les sous-dossiers, à l'aide de VBA (macros Excel), veuillez vous reporter à cette section.