Ce petit bout de code permet une recherche de fichier de recurcive en utilisant les API.
Vous y trouverai l'utilisation des fonctions suivantes :
- FindFirstFile
- FindNextFile
- FindClose
Source / Exemple :
Option Explicit
Private Declare Function FindFirstFile Lib "kernel32" Alias "FindFirstFileA" ( _
ByVal lpFileName As String, _
lpFindFileData As WIN32_FIND_DATA) _
As Long
Private Declare Function FindNextFile Lib "kernel32" Alias "FindNextFileA" ( _
ByVal hFindFile As Long, _
lpFindFileData As WIN32_FIND_DATA) _
As Long
Private Declare Function FindClose Lib "kernel32" ( _
ByVal hFindFile As Long) _
As Long
Private Const INVALID_HANDLE_VALUE = -1
Private Const MAX_PATH = 260
Private Type FILETIME
dwLowDateTime As Long
dwHighDateTime As Long
End Type
Private Type WIN32_FIND_DATA
dwFileAttributes As Long
ftCreationTime As FILETIME
ftLastAccessTime As FILETIME
ftLastWriteTime As FILETIME
nFileSizeHigh As Long
nFileSizeLow As Long
dwReserved0 As Long
dwReserved1 As Long
cFileName As String * MAX_PATH
cAlternate As String * 14
End Type
'---------------------------------------------------------------------------------------'
' Recherche de fichiers '
'---------------------------------------------------------------------------------------'
' '
' Path : chemin de départ de la recherche '
' fichier : nom du fichier a rechercher '
' tabfic() : tableau de retour des fichiers trouvés (avec leur chemin) '
'---------------------------------------------------------------------------------------'
Public Sub FindFile(path As String, fichier As String, tabfic() As String)
Dim chemin As String
Dim fic As String
Dim hfind As Long
Dim hfind2 As Long
Dim struct As WIN32_FIND_DATA
chemin = path
hfind = FindFirstFile(chemin & "*.*" & Chr(0), struct)
hfind2 = hfind
Do Until hfind2 = 0
If Left(struct.cFileName, 1) <> "." Then
fic = chemin & Left(struct.cFileName, InStr(struct.cFileName, Chr(0)) - 1)
Debug.Print fic
If struct.dwFileAttributes And vbDirectory Then FindFile fic & "\", fichier, tabfic
If Right(fic, Len(fichier)) = fichier Then
ReDim Preserve tabfic(UBound(tabfic) + 1)
tabfic(UBound(tabfic)) = fic
tabfic(0) = UBound(tabfic)
End If
End If
hfind2 = FindNextFile(hfind, struct)
Loop
FindClose hfind
End Sub
Conclusion :
Si vous trouvez des bugs ou des ameliorations a apporter, signalez les moi svp; ce source n'en sera que meilleur
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.