Note: The other languages of the website are Google-translated. Back to English

Comment répertorier tous les fichiers du dossier et des sous-dossiers dans une feuille de calcul?

Avez-vous déjà essayé de répertorier tous les noms de fichiers d'un dossier dans une feuille de calcul, y compris les fichiers situés dans ses sous-dossiers? En fait, il n'y a aucun moyen direct pour nous de lister les noms de fichiers d'un dossier et de son sous-dossier dans Excel, cependant, aujourd'hui, je vais vous présenter quelques astuces rapides pour résoudre ce travail.

Liste tous les noms de fichiers dans le dossier et le sous-dossier avec le code VBA

Listez tous les noms de fichiers dans le dossier et le sous-dossier rapidement et facilement avec Kutools for Excel


Normalement, Excel n'a pas de fonctionnalité intégrée pour traiter cette tâche, mais vous pouvez appliquer le code VBA suivant pour résoudre ce problème.

1. Activez une nouvelle feuille de calcul qui listera les noms de fichiers.

2. Maintenez le ALT + F11 clés dans Excel, et il ouvre le Microsoft Visual Basic pour applications fenêtre.

3Cliquez sur insérer > Moduleet collez le code suivant dans le Fenêtre du module.

Code VBA: liste tous les noms de fichiers dans le dossier et le sous-dossier

Sub MainList()
'Updateby Extendoffice
Set folder = Application.FileDialog(msoFileDialogFolderPicker)
If folder.Show <> -1 Then Exit Sub
xDir = folder.SelectedItems(1)
Call ListFilesInFolder(xDir, True)
End Sub
Sub ListFilesInFolder(ByVal xFolderName As String, ByVal xIsSubfolders As Boolean)
Dim xFileSystemObject As Object
Dim xFolder As Object
Dim xSubFolder As Object
Dim xFile As Object
Dim rowIndex As Long
Set xFileSystemObject = CreateObject("Scripting.FileSystemObject")
Set xFolder = xFileSystemObject.GetFolder(xFolderName)
rowIndex = Application.ActiveSheet.Range("A65536").End(xlUp).Row + 1
For Each xFile In xFolder.Files
  Application.ActiveSheet.Cells(rowIndex, 1).Formula = xFile.Name
  rowIndex = rowIndex + 1
Next xFile
If xIsSubfolders Then
  For Each xSubFolder In xFolder.SubFolders
    ListFilesInFolder xSubFolder.Path, True
  Next xSubFolder
End If
Set xFile = Nothing
Set xFolder = Nothing
Set xFileSystemObject = Nothing
End Sub
Function GetFileOwner(ByVal xPath As String, ByVal xName As String)
Dim xFolder As Object
Dim xFolderItem As Object
Dim xShell As Object
xName = StrConv(xName, vbUnicode)
xPath = StrConv(xPath, vbUnicode)
Set xShell = CreateObject("Shell.Application")
Set xFolder = xShell.Namespace(StrConv(xPath, vbFromUnicode))
If Not xFolder Is Nothing Then
  Set xFolderItem = xFolder.ParseName(StrConv(xName, vbFromUnicode))
End If
If Not xFolderItem Is Nothing Then
  GetFileOwner = xFolder.GetDetailsOf(xFolderItem, 8)
Else
  GetFileOwner = ""
End If
Set xShell = Nothing
Set xFolder = Nothing
Set xFolderItem = Nothing
End Function

4. Après avoir collé le code dans le module, appuyez sur F5 clé pour exécuter ce code, et un Macros boîte de dialogue apparaît, sélectionnez le Liste principale nom de la macro, puis cliquez sur course bouton, voir capture d'écran:

fichiers de liste doc dans le sous-dossier du dossier 1

5. Et dans le DECOUVREZ fenêtre, veuillez sélectionner le dossier dans lequel vous souhaitez lister tous les noms de fichiers, y compris les sous-dossiers, voir capture d'écran:

fichiers de liste doc dans le sous-dossier du dossier 2

6. Après avoir spécifié le dossier, cliquez sur OK bouton, et tous les noms de fichiers dans le dossier et ses sous-dossiers ont été répertoriés dans la feuille de calcul actuelle à partir de la cellule A2, voir les captures d'écran:

fichiers de liste doc dans le sous-dossier du dossier 3
1
fichiers de liste doc dans le sous-dossier du dossier 4

Avec le code ci-dessus, vous pouvez simplement lister les noms de fichiers, parfois, vous devez répertorier d'autres attributs, tels que la taille du fichier, le type de fichier, l'heure de création, le dossier contenant, etc. Kutools pour Excel contient une fonction utile - Liste des noms de fichiers, avec cette fonction, vous pouvez rapidement lister tous ou certains types de noms de fichiers dans un dossier et ses sous-dossiers.

Kutools pour Excel : avec plus de 300 compléments Excel pratiques, essai gratuit sans limitation en 30 jours.

Après l'installation de Kutools pour Excel, veuillez suivre les étapes suivantes:

1Cliquez sur Entreprise > Import & Export > Liste des noms de fichiers, voir capture d'écran:

2. Dans le Liste des noms de fichiers boîte de dialogue, effectuez les opérations suivantes:

A: Cliquez fichiers de liste doc dans le sous-dossier du dossier 7bouton pour choisir le dossier dans lequel vous souhaitez lister les noms de fichiers;

B: Spécifiez le type de fichier que vous souhaitez répertorier dans Type de fichiers section;

C: Sélectionnez une unité de taille de fichier que vous souhaitez afficher Unité de taille de fichier .

Notes: Pour lister les noms de fichiers du sous-dossier, veuillez vérifier Inclure les fichiers dans les sous-répertoires, vous pouvez également vérifier le Inclure les fichiers et dossiers cachés Comme vous le souhaitez. Si vous cochez Créer des hyperliens option, il créera des hyperliens pour chaque nom de fichier et dossier.

Téléchargez et essayez gratuitement maintenant!

3. Puis clique OK bouton, tous les fichiers contenus dans le dossier sélectionné et ses sous-dossiers ont été affichés avec les attributs suivants dans une nouvelle feuille de calcul. Voir la capture d'écran:

fichiers de liste doc dans le sous-dossier du dossier 8

Cliquez pour en savoir plus sur cet utilitaire de liste de noms de fichiers.

Téléchargez et essayez gratuitement Kutools for Excel Now!


Kutools pour Excel: avec plus de 300 compléments Excel pratiques, essai gratuit sans limitation dans 30 jours. Téléchargez et essayez gratuitement maintenant!

Les meilleurs outils de productivité de bureau

Kutools for Excel résout la plupart de vos problèmes et augmente votre productivité de 80%

  • Réutilisation: Insérer rapidement formules complexes, graphiques et tout ce que vous avez utilisé auparavant; Crypter les cellules avec mot de passe; Créer une liste de diffusion et envoyer des e-mails ...
  • Barre Super Formula (modifiez facilement plusieurs lignes de texte et de formule); Disposition de lecture (lire et modifier facilement un grand nombre de cellules); Coller dans la plage filtréeplus
  • Fusionner les cellules / lignes / colonnes sans perdre de données; Contenu des cellules divisées; Combiner des lignes / colonnes en double... Empêcher les cellules en double; Comparer les gammesplus
  • Sélectionnez Dupliquer ou Unique Lignes; Sélectionnez les lignes vides (toutes les cellules sont vides); Super Find et Fuzzy Find dans de nombreux classeurs; Sélection aléatoire ...
  • Copie exacte Plusieurs cellules sans changer la référence de formule; Créer automatiquement des références à plusieurs feuilles; Insérer des puces, Cases à cocher et plus encore ...
  • Extrait du texte, Ajouter du texte, Supprimer par position, Supprimer l'espace; Créer et imprimer des sous-totaux de pagination; Conversion entre le contenu et les commentaires des cellulesplus
  • Super filtre (enregistrer et appliquer des schémas de filtrage à d'autres feuilles); Tri avancé par mois / semaine / jour, fréquence et plus; Filtre spécial par gras, italique ...
  • Combiner des classeurs et des feuilles de travail; Fusionner les tableaux en fonction des colonnes clés; Diviser les données en plusieurs feuilles; Conversion par lots xls, xlsx et PDFplus
  • Plus de 300 fonctionnalités puissantes. Prend en charge Office / Excel 2007-2019 et 365. Prend en charge toutes les langues. Déploiement facile dans votre entreprise ou organisation. Essai gratuit de 30 jours. Garantie de remboursement de 60 jours.
onglet kte 201905

Office Tab apporte une interface à onglets à Office et simplifie considérablement votre travail

  • Activer l'édition et la lecture par onglets dans Word, Excel, PowerPoint, Publisher, Access, Visio et Project.
  • Ouvrez et créez plusieurs documents dans de nouveaux onglets de la même fenêtre, plutôt que dans de nouvelles fenêtres.
  • Augmente votre productivité de 50% et réduit des centaines de clics de souris chaque jour!
bas de cabine
Commentaires (20)
Pas encore de notes. Soyez le premier à évaluer!
Ce commentaire a été minimisé par le modérateur sur le site
Bon article Merci :D
Ce commentaire a été minimisé par le modérateur sur le site
cher, Merci pour ce merveilleux utilitaire.....!!! Anil kumar
Ce commentaire a été minimisé par le modérateur sur le site
COMMENT FAIRE FONCTIONNER CETTE REQUÊTE POUR OBTENIR LES NOMS DE FICHIERS ÉNUMÉRÉS À PARTIR DE LA CELLULE B2 AU LIEU DE A2 ?
Ce commentaire a été minimisé par le modérateur sur le site
Salut Satish,
Le code suivant peut vous aider à mettre les noms de fichiers dans n'importe quelle cellule que vous avez sélectionnée, veuillez l'essayer :

Sous liste principale()
On Error Resume Next
Set xRg = Application.InputBox("Veuillez sélectionner une cellule pour mettre les noms de fichiers:", "KuTools For Excel", Selection.Address, , , , , 8)
Si xRg n'est rien, quittez Sub
Fixer xRg = xRg(1)
Définir le dossier = Application. FileDialog (msoFileDialogFolderPicker)
Si dossier.Afficher <> -1 alors quitter le sous-marin
xDir = Dossier.SelectedItems(1)
Appelez ListFilesInFolder(xRg, xDir, True)
End Sub
Sub ListFilesInFolder(ByVal xRg As Range, ByVal xFolderName As String, ByVal xIsSubfolders As Boolean)
Dim xFileSystemObject en tant qu'objet
Estomper xFolder en tant qu'objet
Dim xSubFolder en tant qu'objet
Dim xFile en tant qu'objet
Dim rowIndex As Long
Set xFileSystemObject = CreateObject("Scripting.FileSystemObject")
Définir xFolder = xFileSystemObject.GetFolder(xFolderName)
index_ligne = 1
Pour chaque xFile dans xFolder.Files
xRg.Formule = xFichier.Nom
Set xRg = xRg.Offset(rowIndex)
index_ligne = 1
Suivant xFile
Si xEstSousdossiers Alors
Pour chaque xSubFolder dans xFolder.SubFolders
ListFilesInFolder xRg, xSubFolder.Path, Vrai
Suivant xSubFolder
Si fin
Définir xFile = Rien
Définir xFolder = Rien
Définir xFileSystemObject = Rien
End Sub
Ce commentaire a été minimisé par le modérateur sur le site
génial!!! j'adore, merci
Ce commentaire a été minimisé par le modérateur sur le site
Pas sûr .. mais considère-t-il les longs dossiers. j'ai écrit un code similaire et il échoue lorsque le chemin du dossier/fichier dépasse 256 caractères ? Des pensées s'il vous plait ?
Ce commentaire a été minimisé par le modérateur sur le site
Merci beaucoup pour l'article utile!
Comment puis-je mettre à jour automatiquement la liste et repérer les changements ?
Ce commentaire a été minimisé par le modérateur sur le site
Cela m'a aidé à convertir mon code pour obtenir l'appel récursif, mais je m'interroge sur la façon dont vous utilisez les objets. Je préfère définir mes objets tels qu'ils sont, qu'il s'agisse de classeurs, de feuilles de calcul ou d'objets du système de fichiers. (dim wbDest as excel.workbook, dim wsDest as excel.worksheet par exemple. De cette façon, je n'ai jamais à me soucier de la feuille active.

Je me suis également interrogé sur l'utilisation de .show - if.show <>-1, et je ne peux m'empêcher de penser qu'il serait plus facile pour les gens de comprendre si vous utilisiez à la place if.show = false.

Et en termes d'écriture vers la destination, j'ai senti que l'utilisation de cellules et de formules semblait être un long chemin

Donc dans mon code j'ai, par exemple,
wsDest.Range("B" & CurRow) = fil.name
(CurRow = ligne actuelle)

Je ne critique pas, je me demande simplement si vous le faites comme ça pour une raison autre que vos préférences personnelles. - Toujours prêt à apprendre


Mais à part ça merci pour l'aide
Ce commentaire a été minimisé par le modérateur sur le site
Merci pour ce code, il m'a aidé avec une demande de travail, je suis maintenant en mesure d'importer ces résultats dans Access pour une transformation ultérieure. Appréciez-le.
Ce commentaire a été minimisé par le modérateur sur le site
Le sous-titre "GetFileOwner()" dans le code ci-dessus n'est pas utilisé.
Ce commentaire a été minimisé par le modérateur sur le site
Bonjour, jumpjack,
Le code ci-dessus fonctionne bien dans mon Excel, quelle version d'Excel utilisez-vous ?
Ce commentaire a été minimisé par le modérateur sur le site
Extrêmement élégant est ce code !
Ce commentaire a été minimisé par le modérateur sur le site
A quoi servait le paramètre ByVal xIsSubfolders As Boolean ?
Ce commentaire a été minimisé par le modérateur sur le site
Mon VBA dit que le dossier variable n'est pas défini. Quelqu'un sait pourquoi c'est?
Ce commentaire a été minimisé par le modérateur sur le site
Vraiment nouveau à VBA. comment utiliser le code ci-dessus mais avoir le chemin du fichier intégré pour ne pas avoir à le rechercher à chaque fois?
Ce commentaire a été minimisé par le modérateur sur le site
Hé, donc si je dois simplement extraire une extension de toute la liste, où dois-je apporter des modifications ?
Ce commentaire a été minimisé par le modérateur sur le site
Est-ce que ça marche aussi sur MAC ?
Ce commentaire a été minimisé par le modérateur sur le site
J'ai modifié votre code pour le recycler et réexécuter la boîte de dialogue du dossier en continu jusqu'à ce que vous appuyiez sur Annuler. Malheureusement, cela génère des erreurs.1. Si des sous-dossiers sont impliqués dans un dossier sélectionné, le prochain dossier sélectionné devient hors ordre numérique.2. Si des sous-dossiers sont impliqués dans un dossier sélectionné, le bouton Annuler doit être répété et répété en fonction du nombre de dossiers que vous avez ajoutés.
Code:
Sous liste principale()
'Mettre à jour par Extendoffice
Définir le dossier = Application.FileDialog(msoFileDialogFolderPicker)
Si dossier.Afficher <> -1 Puis quitter le sous-marin
xDir = dossier.SelectedItems(1)
Appelez ListFilesInFolder(xDir, True)
End SubSub ListFilesInFolder(ByVal xFolderName As String, ByVal xIsSubfolders As Boolean)
Dim xFileSystemObject en tant qu'objet
Estomper xFolder en tant qu'objet
Dim xSubFolder en tant qu'objet
Dim xFile en tant qu'objet
Dim rowIndex As Long
Set xFileSystemObject = CreateObject("Scripting.FileSystemObject")
Définir xFolder = xFileSystemObject.GetFolder(xFolderName)
rowIndex = Application.ActiveSheet.Range("A65536").End(xlUp).Row + 1
Pour chaque xFile dans xFolder.Files
Application.ActiveSheet.Cells(rowIndex, 1).Formula = xFile.Name
index_ligne = index_ligne + 1
Suivant xFile
Si xEstSousdossiers Alors
Pour chaque xSubFolder dans xFolder.SubFolders
ListFilesInFolder xSubFolder.Path, Vrai
Suivant xSubFolder
Si fin
Définir xFile = Rien
Définir xFolder = Rien
Définir xFileSystemObject = Rien
End Sub

des idées ?
Ce commentaire a été minimisé par le modérateur sur le site
Désolé... je vous ai donné le mauvais code (ci-dessous), voici le code que j'ai modifié..
Code:
Sous liste principale()
On Error Resume Next
Dim xFileSystemObject en tant qu'objet
Estomper xFolder en tant qu'objet
Dim xSubFolder en tant qu'objet
Dim xFile en tant qu'objet
Dim rowIndex As Long
Dim réponse comme variante
réponse = Faux
Avec Application. FileDialog (msoFileDialogFolderPicker)
.Title = "Sélectionner un dossier"
.AllowMultiSelect = Faux
Définir le dossier = Application.FileDialog(msoFileDialogFolderPicker)
Si dossier.Afficher = -1 Alors
xDir = dossier.SelectedItems(1)
autre
Exit Sub
Si fin
Terminer par

Appelez ListFilesInFolder(xDir, True)
End Sub

Sub ListFilesInFolder(ByVal xFolderName As String, ByVal xIsSubfolders As Boolean)
Set xFileSystemObject = CreateObject("Scripting.FileSystemObject")
Définir xFolder = xFileSystemObject.GetFolder(xFolderName)
rowIndex = Application.ActiveSheet.Range("A65536").End(xlUp).Row + 1

' Ajouter un espace puis le nom du dossier à la feuille de calcul
index_ligne = index_ligne + 1
Avec Application.ActiveSheet.Cells(rowIndex, 1)
.Value = xDossier.Nom
.Taille.Font = 12
.Font.FontStyle = "Gras italique"
Terminer par
index_ligne = index_ligne + 1

Pour chaque xFile dans xFolder.Files
Application.ActiveSheet.Cells(rowIndex, 1).Formula = xFile.Name
index_ligne = index_ligne + 1
Suivant xFile
Si xEstSousdossiers Alors
Pour chaque xSubFolder dans xFolder.SubFolders
ListFilesInFolder xSubFolder.Path, Vrai
Suivant xSubFolder
index_ligne = index_ligne + 1
Si fin

Définir xFile = Rien
Définir xFolder = Rien
Définir xFileSystemObject = Rien

Appeler la liste principale
End Sub


Ce commentaire a été minimisé par le modérateur sur le site
Beau travail, exactement ce que j'essayais de créer. Mais c'est 1000% mieux.
Il n'y a pas encore de commentaires postés ici
Laisser vos commentaires
Publier en tant qu'invité
×
Évaluez cet article:
0   Personnages
Emplacements suggérés