1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95
| Sub Debut()
'Dim objShell As Object, objFolder As Object, oFolderItem As Object
Dim Chemin As String
'Demande le dossier à rechercher
Set objShell = CreateObject("Shell.Application")
Set objFolder = objShell.BrowseForFolder(&H0&, "Choisir un répertoire", &H1&)
Set oFolderItem = objFolder.Items.Item
Chemin = oFolderItem.Path & "\"
' Chemin = "T:\Images" & "\"
ListerFichiers Chemin
MsgBox "Terminé"
End Sub
'Fonction récursive de recherche
Private Sub ListerFichiers(Chemin As Variant)
Dim Fichier As Variant
Dim Liste As Collection
Dim commentaire As Long
Dim DSO As DSOFile.OleDocumentProperties
Set DSO = New DSOFile.OleDocumentProperties
On Error GoTo Erreur
If GetAttr(Chemin) = vbDirectory Then
If Right(Chemin, 1) <> "\" Then
Chemin = Chemin & "\"
End If
End If
Set Liste = New Collection
Fichier = Dir(Chemin & "*.*", vbDirectory + vbHidden + vbSystem)
DSO.Open sfilename:=Fichier
commentaire = DSO.SummaryProperties.Comments
While Fichier > ""
If GetAttr(Chemin & Fichier) = vbDirectory Then
If Left(Fichier, 1) <> "." Then
Liste.Add Chemin & Fichier
End If
ElseIf GetAttr(Chemin & Fichier & commentaire) = vbArchive Then
If Not Present(Chemin, Fichier, commentaire) Then
Rows(2).Insert
Range("A2") = Fichier
Range("B2") = Chemin
Range("c2") = commentaire
Range("A2").Hyperlinks.Add _
Anchor:=Range("A2"), _
Address:=Replace(Chemin & Fichier, " ", "%20")
Range("A2:K2").Interior.Color = vbWhite
End If
End If
Fichier = Dir
DoEvents
Wend
For Each Fichier In Liste
ListerFichiers Fichier
DoEvents
Next
Set Liste = Nothing
Exit Sub
Erreur:
MsgBox Err.Number & vbCrLf & Err.Description
Stop 'Pour déboguage > F8+F8 lors de l'arrêt
Resume
End Sub
Function Present(Chemin As Variant, Fichier As Variant) As Boolean
Dim I As Long, nbLignes As Long
nbLignes = Cells(Rows.Count, "A").End(xlUp).Row
For I = 2 To nbLignes
If Range("A" & I) = Fichier And Range("B" & I) = Chemin Then
Present = True
Exit Function
End If
Next
End Function |
Partager