Liste de fichiers avec dossiers ET sous dossiers
Résolu
Porinu
-
Porinu Messages postés 44 Statut Membre -
Porinu Messages postés 44 Statut Membre -
Bonjour à tous,
Je viens vous demander de l'aide car j'essaie depuis plusieurs semaines de créer un fichier Excel qui listerait tous les dossiers, sous-dossiers et fichiers d'un répertoire sur la même feuille de calcul.
J'ai fait des recherches et constaté que les macro sont utiles dans mon cas, car il y a plus de 5 000 fichiers dans le répertoire concerné. Cependant je n'ai pas trouvé de macro qui corresponde exactement à ce que je souhaite faire.
J'ai trouvé la macro suivante, qui permet d'afficher dans la première colonne le nom des fichiers et dossiers présentes dans le répertoire choisis et dans la deuxième colonne s'affiche le lien hypertexte (sous forme du chemin correspondant au fichier) pour ouvrir le fichier :
J'aimerais si possible garder à peu près ce code, avec les modifications pour pouvoir avoir également les fichiers qui sont à l'intérieur des sous-dossiers, l'arborescence complète en fait.
Je ne sais pas si j'ai été assez claire, mais merci d'avance de votre aide, je tiens à préciser que je connais pas grand chose des macros !
Je viens vous demander de l'aide car j'essaie depuis plusieurs semaines de créer un fichier Excel qui listerait tous les dossiers, sous-dossiers et fichiers d'un répertoire sur la même feuille de calcul.
J'ai fait des recherches et constaté que les macro sont utiles dans mon cas, car il y a plus de 5 000 fichiers dans le répertoire concerné. Cependant je n'ai pas trouvé de macro qui corresponde exactement à ce que je souhaite faire.
J'ai trouvé la macro suivante, qui permet d'afficher dans la première colonne le nom des fichiers et dossiers présentes dans le répertoire choisis et dans la deuxième colonne s'affiche le lien hypertexte (sous forme du chemin correspondant au fichier) pour ouvrir le fichier :
Sub lien_hypertext_liste_fichiers()
'
' lien_hypertext_liste_fichiers Macro
' Macro enregistrée le 13/01/2007 par didus
'
Dim mess As String, mess2 As String, répertoire As String
Columns(1).Clear
Columns(2).Clear
mess = InputBox("Chemin complet du répertoire à explorer, attention, / à la fin", "Chemin du répertoire", _
"Z:\Bibliotheque_Outillages\")
mess2 = InputBox( _
"Donnez seulement le type de fichier (par exemple pdf, xls, doc, jpg ou dxf etc...)" _
, "TYPE DE FICHIER", "stl")
Application.ScreenUpdating = False
répertoire = Dir(mess & "*" & mess2, vbDirectory)
Do While répertoire <> ""
i = i + 1
Cells(i, 1) = répertoire
ActiveSheet.Hyperlinks.Add Anchor:=Cells(i, 2), Address:=mess & répertoire
Cells(i, 2) = mess & répertoire
répertoire = Dir
Loop
End Sub
J'aimerais si possible garder à peu près ce code, avec les modifications pour pouvoir avoir également les fichiers qui sont à l'intérieur des sous-dossiers, l'arborescence complète en fait.
Je ne sais pas si j'ai été assez claire, mais merci d'avance de votre aide, je tiens à préciser que je connais pas grand chose des macros !
A voir également:
- Dans le dossier musiques créer un dossier playlist pix
- Dossier appdata - Guide
- Impossible de supprimer un dossier - Guide
- Comment créer un groupe whatsapp - Guide
- Créer un compte google - Guide
- Mettre un mot de passe sur un dossier - Guide
3 réponses
Bonjour,
Pour rechercher tous les fichiers/dossiers de chaque répertoire/sous-répertoire.. il faut faire du reccursif...
Par contre, voici un code qui fonctionne très bien.. qu'il ne te reste qu'à modifier pour qu'il corresponde exactement à tes besoins:
(je t'invite à le tester avant de nous répondre ^^ )
Pour rechercher tous les fichiers/dossiers de chaque répertoire/sous-répertoire.. il faut faire du reccursif...
Par contre, voici un code qui fonctionne très bien.. qu'il ne te reste qu'à modifier pour qu'il corresponde exactement à tes besoins:
(je t'invite à le tester avant de nous répondre ^^ )
'----------------------------------------------------------------------------
' Outils / Références A COCHER Microsoft Scripting Runtime
' Microssoft Shell Controls and Automation
'----------------------------------------------------------------------------
Private Declare Function QueryPerformanceCounter Lib "Kernel32" (x As Currency) As Boolean
Private Declare Function QueryPerformanceFrequency Lib "Kernel32" (x As Currency) As Boolean
Option Explicit
Dim i As Long, k As Long
Dim oShell As Shell, oFolder As Shell32.Folder, oFolderItem As Shell32.FolderItem
Dim FSO As FileSystemObject, Dossier As Scripting.Folder, Fichier As Scripting.File
Dim Debut As Currency, Fin As Currency, Freq As Currency, NbDossiers As Long
Dim TypeFichier As String
Private Sub ExtractionDonnees(sDossier As String)
Dim LastRow As Long, j As Long
Application.ScreenUpdating = False
With Feuil1
.Cells.Clear
.Range("A1") = "Nom"
.Range("B1") = "Taille"
.Range("C1") = "Type"
.Range("D1") = "Date Modification"
.Range("E1") = "Date Création"
.Range("F1") = "Date Dernier Accès"
.Range("G1") = "Attributs"
.Range("H1") = "Etat"
.Range("I1") = "Propriétaire"
.Range("J1") = "Auteur"
.Range("K1") = "Titre"
.Range("L1") = "Sujet"
.Range("M1") = "Catégorie"
.Range("N1") = "Pages"
.Range("O1") = "Commentaires"
.Range("P1") = "Copyright"
.Range("Q1") = "Artiste"
.Range("R1") = "Titre Album"
.Range("S1") = "Année"
.Range("T1") = "N° de Piste"
.Range("U1") = "Genre"
.Range("V1") = "Durée"
.Range("W1") = "Vitesse Transmission"
.Range("X1") = "Protégé"
.Range("Y1") = "Modele Appareil Photo"
.Range("Z1") = "Date Cliché"
.Range("AA1") = "Dimension"
.Range("AB1") = "Largeur"
.Range("AC1") = "Hauteur"
.Range("AD1") = "Nom Episode"
.Range("AE1") = "Description Programme"
.Range("AF1") = "Taille Echantillon Audio"
.Range("AG1") = "Fréquence Echantillonnage"
.Range("AH1") = "Chemin"
End With
k = 2
Set oShell = New Shell
Set FSO = New Scripting.FileSystemObject
Set Dossier = FSO.GetFolder(sDossier)
NbDossiers = NbDossiers + 1
For Each Fichier In Dossier.Files
If UCase$(TypeFichier) = UCase$(FSO.GetExtensionName(Fichier)) Then
Set oFolder = oShell.Namespace(Dossier.Path)
Set oFolderItem = oFolder.ParseName(Fichier.Name)
i = 1
With Feuil1
For j = 0 To 34
If j <> 31 Then
.Range(NumCol2Lettre(i) & k) = oFolder.GetDetailsOf(oFolderItem, j)
i = i + 1
End If
Next j
.Range(NumCol2Lettre(i - 1) & k) = sDossier
Application.StatusBar = "Dossiers : " & NbDossiers & " / Fichiers : " & k - 1
k = k + 1
End With
End If
Next Fichier
RchRecursive Dossier
FormatAttributs
With Feuil1
LastRow = .Range("A" & Rows.Count).End(xlUp).Row
.Range("A1:AH" & LastRow).WrapText = False
.Range("1:1").Font.Bold = True
.Rows("2:2").Select
ActiveWindow.FreezePanes = True
.Columns("A:AH").EntireColumn.AutoFit
.Range("A1:AH1").Interior.ColorIndex = 36
.Range("D2:F" & LastRow).NumberFormat = "dd/mm/yyyy hh:mm:ss"
.Range("AF2:AF" & LastRow).NumberFormat = "dd/mm/yyyy hh:mm:ss"
End With
Tri
Feuil1.Activate
With ActiveWindow
.ScrollRow = 1
.ScrollColumn = 1
End With
Set FSO = Nothing
Set oShell = Nothing
Set Dossier = Nothing
Set oFolder = Nothing
Set oFolderItem = Nothing
Set Fichier = Nothing
Application.ScreenUpdating = True
End Sub
Private Sub FormatAttributs()
Dim LastRow As Long
LastRow = Feuil1.Range("G" & Rows.Count).End(xlUp).Row + 1
Feuil1.Range("G2:G" & LastRow).Select
With Selection
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlBottom
End With
End Sub
Private Function NumCol2Lettre(iNumCol As Long) As String
Dim i As Long, sStr As String
i = iNumCol
sStr = ""
Do While i > 0
sStr = Chr$(((i - 1) Mod 26) + 65) & sStr
i = (i - 1) \ 26
Loop
NumCol2Lettre = sStr
End Function
Private Sub RchRecursive(sFolder As Scripting.Folder)
Dim SousDossier As Scripting.Folder
Dim j As Long
For Each SousDossier In sFolder.SubFolders
Set Dossier = FSO.GetFolder(SousDossier)
NbDossiers = NbDossiers + 1
For Each Fichier In SousDossier.Files
If UCase$(TypeFichier) = UCase$(FSO.GetExtensionName(Fichier)) Then
Set oFolder = oShell.Namespace(Dossier.Path)
Set oFolderItem = oFolder.ParseName(Fichier.Name)
i = 1
With Feuil1
For j = 0 To 34
If j <> 31 Then
.Range(NumCol2Lettre(i) & k) = oFolder.GetDetailsOf(oFolderItem, j)
i = i + 1
End If
Next j
.Range(NumCol2Lettre(i - 1) & k) = sFolder
k = k + 1
End With
End If
Application.StatusBar = "Dossiers : " & NbDossiers & " / Fichiers : " & k
Next Fichier
RchRecursive SousDossier
Next SousDossier
End Sub
Sub SelDossier()
Dim sChemin As String
sChemin = ThisWorkbook.Path
With Application.FileDialog(msoFileDialogFolderPicker)
.InitialFileName = sChemin & "\"
.Title = "Sélectionner le Dossier à traiter"
.AllowMultiSelect = False
.InitialView = msoFileDialogViewDetails
.ButtonName = "Sélection Dossier"
.Show
If .SelectedItems.Count > 0 Then
DoEvents
TypeFichier = InputBox( _
"Donnez seulement le type de fichier (par exemple pdf, xls, doc, jpg ou dxf etc...)" _
, "TYPE DE FICHIER", "stl")
QueryPerformanceCounter Debut
NbDossiers = 0
ExtractionDonnees .SelectedItems(1)
QueryPerformanceCounter Fin
QueryPerformanceFrequency Freq
Application.StatusBar = "Dossiers : " & NbDossiers & " / Fichiers : " & k - 2 & " / " & Format((Fin - Debut) / Freq, "0.00 s")
End If
Feuil1.Range("C1").Select
End With
End Sub
Private Sub Tri()
Dim LastRow As Long
LastRow = Feuil1.Range("A" & Rows.Count).End(xlUp).Row
Feuil1.Range("A2:AH" & LastRow).Sort Key1:=Feuil1.Range("A2"), Order1:=xlAscending, Key2:=Feuil1.Range("B2") _
, Order2:=xlAscending, Key3:=Feuil1.Range("C2"), Order3:=xlAscending, Header:= _
xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal, DataOption2:=xlSortNormal, DataOption3:= _
xlSortNormal
End Sub
Par contre comme je le disais je n'y connais rien en macro, et ce code est une nouvelle énigme pour moi ^^ Je suis tout à fait perdue, je ne sais pas ce que je dois modifier...
Voulez-vous bien m'éclairer s'il vous plaît ?
Merci bien.