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
| Sub ListerFichiersDansRepertoire()
Dim FSO As Object
Dim Dossier As Object, Fichier As Object
Dim CelFind As Range
Dim CheminRep As String, Indice0 As String, Indice1 As String
Dim i As Integer
Dim DebNom As String
' Spécifiez le chemin du répertoire ici
CheminRep = ThisWorkbook.Path & "\05-Commandes" & "\"
' Effacer la liste des fichiers précédemment trouvés
With Sheets("Synthèse commandes")
.Range("A:Z").ClearContents
' Créer un objet FileSystemObject
Set FSO = CreateObject("Scripting.FileSystemObject")
' Obtenir le dossier
Set Dossier = FSO.GetFolder(CheminRep)
' Initialiser le compteur de ligne pour lister les fichiers
i = 1
' Parcourir chaque fichier dans le dossier
For Each Fichier In Dossier.Files
' On ne traite pas les PDF
If UCase(Right(Fichier.Name, 3)) = "PDF" Then GoTo SuiteFichier
' Début du nom jusqu'au tiret
DebNom = Left(Fichier.Name, InStr(1, Fichier.Name, "-") - 1)
' Indice après le tiret
Indice0 = Mid(Fichier.Name, Len(DebNom) + 2, 1)
' Vérifier si début nom fichier n'existe pas déjà
Set CelFind = .Range("A:A").Find(What:=DebNom, LookIn:=xlValues, LookAt:=xlPart, _
SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False)
' Si trouvé
If Not CelFind Is Nothing Then
' Récupérer l'indice du nom dans la cellule trouvée
Indice1 = Mid(CelFind.Value, InStr(1, CelFind, "-") + 1, 1)
' Comparer les 2 indices
If Indice0 > Indice1 Then
' Si indice supérieur, remplacer le nom du fihcier
CelFind = Fichier.Name
End If
Else
' Ecrire le nom du fichier dans la cellule de la feuille active
.Cells(i, 1).Value = Fichier.Name
i = i + 1
End If
SuiteFichier:
Next Fichier
End With
' Libérer les objets
Set Fichier = Nothing
Set Dossier = Nothing
Set FSO = Nothing
End Sub |
Partager