Note: The other languages of the website are Google-translated. Back to English
Se connecter  \/ 
x
or
x
S'inscrire  \/ 
x

or

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.

3. Cliquez 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:

1. Cliquez 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ée...
  • 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 gammes...
  • 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 cellules...
  • 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 PDF...
  • 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
Say something here...
symbols left.
You are guest
or post as a guest, but your post won't be published automatically.
Loading comment... The comment will be refreshed after 00:00.
  • To post as a guest, your comment is unpublished.
    twmcc2 · 5 months ago
    Sorry... I gave you the wrong code (below), here is the code I modified..

    Code:

    Sub MainList()
    On Error Resume Next
    Dim xFileSystemObject As Object
    Dim xFolder As Object
    Dim xSubFolder As Object
    Dim xFile As Object
    Dim rowIndex As Long
    Dim answer As Variant
    answer = False
    With Application.FileDialog(msoFileDialogFolderPicker)
    .Title = "Select a Folder"
    .AllowMultiSelect = False
    Set folder = Application.FileDialog(msoFileDialogFolderPicker)
    If folder.Show = -1 Then
    xDir = folder.SelectedItems(1)
    Else
    Exit Sub
    End If
    End With

    Call ListFilesInFolder(xDir, True)
    End Sub

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

    ' Add a space then the Folder Name to the Worksheet
    rowIndex = rowIndex + 1
    With Application.ActiveSheet.Cells(rowIndex, 1)
    .Value = xFolder.Name
    .Font.Size = 12
    .Font.FontStyle = "Bold Italic"
    End With
    rowIndex = rowIndex + 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
    rowIndex = rowIndex + 1
    End If

    Set xFile = Nothing
    Set xFolder = Nothing
    Set xFileSystemObject = Nothing

    Call MainList
    End Sub


  • To post as a guest, your comment is unpublished.
    twmcc2 · 5 months ago
    I have modified your code to make it recycle and re-run the folder dialog continuously until you press Cancel.
    Unfornatually it generates some errors.
    1. If subfolders become involved in a folder selected then the next folder selected becomes out of numerical order.
    2. If subfolders become involved in a folder selected the Cancel button has to be repeated and repeated depending on how many folders you have added.

    Code:

    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

    any ideas ?
  • To post as a guest, your comment is unpublished.
    Peter · 8 months ago
    Does it work on MAC too?
  • To post as a guest, your comment is unpublished.
    Prasanna Venkatesh · 1 years ago
    Hey, so if I have to just extract an extension from the whole list, where should I make changes?
  • To post as a guest, your comment is unpublished.
    JDay · 2 years ago
    Really new to VBA. how do i use the above code but have the file path built into it so i don't have to search for it every time?
  • To post as a guest, your comment is unpublished.
    James · 2 years ago
    My VBA is saying that the variable folder is not defined. Anyone know why this is?
  • To post as a guest, your comment is unpublished.
    Chris K · 3 years ago
    What was the purpose of the parameter ByVal xIsSubfolders As Boolean?
  • To post as a guest, your comment is unpublished.
    Leandro Barbosa · 3 years ago
    Extremamente elegante este código!
  • To post as a guest, your comment is unpublished.
    jumpjack · 3 years ago
    Sub "GetFileOwner()" in code above is not used.
    • To post as a guest, your comment is unpublished.
      skyyang · 3 years ago
      Hello, jumpjack,
      The above code works well in my Excel, which Excel version do you use?
  • To post as a guest, your comment is unpublished.
    Brett · 4 years ago
    Thankyou for this code it has helped me with a request a work, I am now able to import these results into Access for further transformation.Appreciate it.
  • To post as a guest, your comment is unpublished.
    David · 4 years ago
    This helped me to convert my code to get the recursive call, but I wonder about the way you use objects. I prefer to define my objects as what they are, be they workbooks, worksheets or file system objects. (dim wbDest as excel.workbook, dim wsDest as excel.worksheet for example. This way I never have to worry about what the active sheet is.

    I also wondered about the use of .show - if.show <>-1, and can't help feeling that it would be easier for people to understand if instead you used if.show = false.

    And in terms of writing to the destination, I felt that using cells and formula seemed to be a long way round

    So in my code I have, for example,
    wsDest.Range("B" & CurRow) = fil.name
    (CurRow = Current Row)

    I'm not criticising, just wondering if you do it like this for any reason other than personal preference. - Always willing to learn


    But apart from that thanks for the help
  • To post as a guest, your comment is unpublished.
    Ana · 4 years ago
    Thank you so much for the useful article!
    How can I automatically update the list and spot the changes?
  • To post as a guest, your comment is unpublished.
    Ankit · 4 years ago
    Not sure.. but does it consider long folders. i wrote a similar code and it fails where the folder/file path exceeds 256 characters ? Thoughts please ?
  • To post as a guest, your comment is unpublished.
    Nir · 4 years ago
    great!!! love it, thanks
  • To post as a guest, your comment is unpublished.
    SATISH · 4 years ago
    HOWTO MAKE THIS QUERY WORK TO GET THE FILENAMES LISTED FROM B2 cell instead of A2 ?
    • To post as a guest, your comment is unpublished.
      skyyang · 4 years ago
      Hi, Satish,
      The following code can help you to put the filenames to any cell you selected, please try it:

      Sub MainList()
      On Error Resume Next
      Set xRg = Application.InputBox("Please select a cell to put the filenames:", "KuTools For Excel", Selection.Address, , , , , 8)
      If xRg Is Nothing Then Exit Sub
      Set xRg = xRg(1)
      Set Folder = Application.FileDialog(msoFileDialogFolderPicker)
      If Folder.Show <> -1 Then Exit Sub
      xDir = Folder.SelectedItems(1)
      Call ListFilesInFolder(xRg, xDir, True)
      End Sub
      Sub ListFilesInFolder(ByVal xRg As Range, 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 = 1
      For Each xFile In xFolder.Files
      xRg.Formula = xFile.Name
      Set xRg = xRg.Offset(rowIndex)
      rowIndex = 1
      Next xFile
      If xIsSubfolders Then
      For Each xSubFolder In xFolder.SubFolders
      ListFilesInFolder xRg, xSubFolder.Path, True
      Next xSubFolder
      End If
      Set xFile = Nothing
      Set xFolder = Nothing
      Set xFileSystemObject = Nothing
      End Sub
  • To post as a guest, your comment is unpublished.
    Anilkumar · 5 years ago
    dear,

    Thanks for this wonderful utility.....!!!


    anilkumar
  • To post as a guest, your comment is unpublished.
    Adrian Badea · 5 years ago
    Good article

    Thanks :D