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 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161
| Option Explicit
' ---
' AJOUT \ EN FIN DE CHEMIN
' ---
' Entrée : strFolder <- Chemin à retraiter.
' Sortie : Chemin avec \ ajouté à la fin si nécessaire.
'
Function AddBackslash(ByVal strFolder As String) As String
strFolder = Trim(strFolder)
If Right(strFolder, 1) <> "\" Then strFolder = strFolder & "\"
AddBackslash = strFolder
End Function
' ---
' NOMBRE DE DOSSIERS DANS UN DOSSIER DE DEPART
' ---
Function CompterSousDossiers(ByVal strDossier As String) As Integer
'--- Variables
Dim strSousDossier As String
Dim intSousDossiers As Integer
strDossier = AddBackslash(strDossier)
intSousDossiers = 0
'--- Parcourir les sous-dossiers
strSousDossier = Dir(strDossier, vbDirectory)
While strSousDossier <> ""
If (strSousDossier <> ".") And (strSousDossier <> "..") Then
If (GetAttr(strDossier & strSousDossier) And vbDirectory) <> 0 Then
intSousDossiers = intSousDossiers + 1
End If
End If
strSousDossier = Dir
Wend
CompterSousDossiers = intSousDossiers
End Function
' ---
' LISTE DE SOUS-DOSSIERS D'UN DOSSIER DE DEPART
' ---
Function ListerSousDossiers(ByVal strDossier As String) As Variant
'--- Variables
Dim intSousDossiers As Integer
Dim astrSousDossiers() As String
Dim strSousDossier As String
Dim intI As Integer
'--- Compter les sous-dossiers
strDossier = AddBackslash(strDossier)
intSousDossiers = CompterSousDossiers(strDossier)
'--- Si aucun sous-dossier, on renvoie un tableau vide
If (intSousDossiers = 0) Then
ListerSousDossiers = Array()
Exit Function
End If
'--- Lire les chemins des sous-dossiers
ReDim astrSousDossiers(1 To intSousDossiers) As String
strSousDossier = Dir(strDossier, vbDirectory)
intI = 1
While strSousDossier <> ""
If (strSousDossier <> ".") And (strSousDossier <> "..") Then
If (GetAttr(strDossier & strSousDossier) And vbDirectory) <> 0 Then
astrSousDossiers(intI) = strDossier & strSousDossier
intI = intI + 1
End If
End If
strSousDossier = Dir
Wend
'--- Résultat
ListerSousDossiers = astrSousDossiers
End Function
' ---
' LISTE DU CONTENU D'UN DOSSIER VERS UNE TABLE
' ---
Sub ListerFichiersRec( _
ByVal strDossier As String, _
Optional ByVal strExtension As String = "*.*", _
Optional blnViderTable As Boolean = False, _
Optional blnCheminComplet As Boolean = True)
'--- Variables
Dim rst As DAO.Recordset
'--- Vérifier que le dossier existe bien
strDossier = AddBackslash(strDossier)
If Dir(strDossier, vbDirectory) = "" Then
MsgBox "Dossier introuvable !", vbExclamation
Exit Sub
End If
'--- Ouvrir la table
Set rst = CurrentDb.OpenRecordset("TFichiers", dbOpenDynaset)
'--- Déclencher le parcours récursif des fichiers
ListerFichiersRecDetail rst, strDossier, 1, strExtension, blnCheminComplet
'--- On libère les ressources
rst.Close
Set rst = Nothing
End Sub
' ---
' PARCOURS RECURSIF DE DOSSIERS
' ---
Sub ListerFichiersRecDetail( _
rst As DAO.Recordset, _
ByVal strDossier As String, _
n As Integer, _
Optional ByVal strExtension As String = "*.*", _
Optional blnCheminComplet As Boolean = True)
'--- Variables...
Dim strFichier As String
Dim varSousDossiers As Variant
Dim intI As Integer
Dim k1 As Long, k2 As Long, k3 As Long, k4 As Long
'--- Lister tous les fichiers du dossier
strDossier = AddBackslash(strDossier)
'strFichier = Dir(strDossier & strExtension, vbNormal)
strFichier = Dir(strDossier, vbDirectory)
While strFichier <> ""
'--- Stocker le nom du fichier dans la table
If strFichier = "." Then '--- liste uniquement les dossiers
'If strFichier <> ".." Then '--- liste dossiers et fichiers
rst.AddNew
k1 = InStr(strDossier, "\")
k2 = InStr(k1 + 1, strDossier, "\")
k3 = InStr(k2 + 1, strDossier, "\")
If k3 > 0 Then
k4 = InStr(k3 + 1, strDossier, "\")
Else
k4 = 0
End If
rst("NomDossier") = strDossier
If k4 > 0 Then
rst("Dossier3") = Mid(strDossier, k3 + 1, k4 - k3 - 1)
End If
If k3 > 0 Then
rst("Dossier2") = Mid(strDossier, k2 + 1, k3 - k2 - 1)
End If
rst("Dossier1") = Mid(strDossier, k1 + 1, k2 - k1 - 1)
rst("NomFichier") = strFichier
rst.Update
End If
'--- Lire le fichier suivant
strFichier = Dir
Wend
'--- Trouver les sous-dossiers éventuels
varSousDossiers = ListerSousDossiers(strDossier)
'--- S'il y a des sous-dossiers, les parcourir aussi récursivement
If (UBound(varSousDossiers) > 0) And n < 3 Then
'--- Traiter les sous-dossiers
For intI = 1 To UBound(varSousDossiers)
ListerFichiersRecDetail rst, varSousDossiers(intI), n + 1, strExtension, blnCheminComplet
Next
End If
End Sub
Sub TestListerFichiersRec2()
ListerFichiersRec "C:\Documents", "*.*"
MsgBox "Terminé !", vbInformation
End Sub |
Partager