'*****************************************************************************************************
' ___ _ _______ __ _ ____ _ _ _______ ___ _ _ _ ___ _ _.
' // \\ /\\ // // \\ // // // // // // \\ // // // // \\ //| //
' //___// //__\ // //__// // // //__// // // // // // // // // // | //
' // // \\ // // \\ // // // \\ // // // // // // // // // | //
'// // // // // // // //___ // \\ // \\__// //__// //___ \\__// // |//
'****************************************************************************************************
'collection sub et fonction avec récursivité
'liste recursive d'un dossier avec lecture des propriétés
'date 18/08/2024
'librairie utilise shell Automation( en late binding)
'auteur :patricktoulon
'version :3
Option Explicit
Sub test()
Dim chemin, table(1 To 100000, 1 To 150)
chemin = "K:\vba excel\01 HTML XML CDO OUTLOOK requete html"
ListeProprietesFichiers_getDetailsOf chemin, table
Cells.Clear
Application.ScreenUpdating = False
With Feuil1.[a1].Resize(UBound(table), 50)
.Value = table
Columns.AutoFit
.VerticalAlignment = xlCenter
End With
End Sub
Sub ListeProprietesFichiers_getDetailsOf(folder, ByRef table, Optional a As Long = 1)
Dim strFileName As Object, objFolder As Object, i As Byte, e, ProP$
Static objShell As Object
If a = 1 Then
Set objShell = CreateObject("Shell.Application")
table(2, 1) = "DOSSIER: " & folder
a = a + 1
End If
Set objFolder = objShell.Namespace(folder) 'Répertoire à traiter
For Each strFileName In objFolder.Items 'boucle sur tous les elements du repertoire
'Pour que les dosssiers ne soient pas pris en comptes
If strFileName.IsFolder = False Then
e = 0
a = a + 1
For i = 0 To 250
' objFolder.getDetailsOf(objFolder.Items, i)'on obtient le nom de la propriété
'objFolder.getDetailsOf(strFileName, i) 'on obtient la valeur de la propriété
'If a = 2 Then Debug.Print objFolder.getDetailsOf(objFolder.Items, i)
Select Case objFolder.getDetailsOf(objFolder.Items, i)
Case "Nom": table(a, 1) = objFolder.getDetailsOf(strFileName, i): table(1, 1) = objFolder.getDetailsOf(objFolder.Items, i)
Case "Taille": table(a, 2) = objFolder.getDetailsOf(strFileName, i): table(1, 2) = objFolder.getDetailsOf(objFolder.Items, i)
Case "Extension du fichier": table(a, 3) = objFolder.getDetailsOf(strFileName, i): table(1, 3) = objFolder.getDetailsOf(objFolder.Items, i)
Case "Commentaires": table(a, 4) = objFolder.getDetailsOf(strFileName, i): table(1, 4) = objFolder.getDetailsOf(objFolder.Items, i)
Case "Modifié le": table(a, 5) = objFolder.getDetailsOf(strFileName, i): table(1, 5) = objFolder.getDetailsOf(objFolder.Items, i)
Case "Date de création": table(a, 6) = objFolder.getDetailsOf(strFileName, i): table(1, 6) = objFolder.getDetailsOf(objFolder.Items, i)
Case "Date d’accès": table(a, 7) = objFolder.getDetailsOf(strFileName, i): table(1, 7) = objFolder.getDetailsOf(objFolder.Items, i)
Case "Sorte": table(a, 8) = objFolder.getDetailsOf(strFileName, i): table(1, 8) = objFolder.getDetailsOf(objFolder.Items, i)
Case "Notation": table(a, 9) = objFolder.getDetailsOf(strFileName, i): table(1, 9) = objFolder.getDetailsOf(objFolder.Items, i)
Case "Auteurs": table(a, 10) = objFolder.getDetailsOf(strFileName, i): table(1, 10) = objFolder.getDetailsOf(objFolder.Items, i)
'Case "Chemin du dossier": table(a, 11) = objFolder.getDetailsOf(strFileName, i): table(1, 10) = objFolder.getDetailsOf(objFolder.Items, i)
End Select
Next
table(1, 11) = "path": table(a, 11) = strFileName.Path
Else
'si c 'est un dossier on relance la fonction (appel récursifs)
a = a + 1
table(a, 1) = "DOSSIER: " & strFileName.Path
ListeProprietesFichiers_getDetailsOf (strFileName.Path), table, a
End If
Next
End Sub