cs_radada
Messages postés488Date d'inscriptionlundi 15 septembre 2003StatutMembreDernière intervention21 avril 20091 14 nov. 2003 à 15:30
C'est un fichier à toi ou un fichier système???? Et c'est toi qui le crée ou il existe déjà??? Et enfin est-ce qu'il existe sur tous les systèmes??? A la limite, donne nous un exemple, ce sera mieux : ))
FileSearch n'est pas parfait : pas forcément très rapide (même si
davantage que Dir$) et il comporte quelques bizarreries, je ne sais plus
lesquelles. Idem pour Dir$, en "moins pire". Je pense que le plus
efficace consiste à passer par les fonctions API FindFirstFileA & Cie,
comme dans le code suivant, qui liste dans la feuille active tous les
fichiers XLS présents sur C: *
*************************************************
Option Compare Text
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 * 260
cAlternate As String * 14
End Type
Private Declare Function
FindFirstFileA Lib "Kernel32" (ByVal lpFileName As String, lpFindFileData As WIN32_FIND_DATA) As Long
Private Declare Function
FindNextFileA Lib "Kernel32" (ByVal hFindfile As Long, lpFindFileData As WIN32_FIND_DATA) As Long
Private Declare Function
FindClose Lib "Kernel32" (ByVal hFindfile As Long) As Long
Declare Function
GetFileAttributesA Lib "Kernel32" (ByVal lpFileName As String) As Long
Const Masque = "*.xls"
Dim Arr() As String
Dim NbFichiers As Long
Dim FileFindData As WIN32_FIND_DATA
Dim Fichier As String
Sub Test() ReDim Arr(1 To 1) NbFichiers 0 Recurse "C:" Application.ScreenUpdating False
With Range("A1")
.Resize(NbFichiers) .Value = Application.Transpose(Arr) .Sort [A1]
.EntireColumn.AutoFit
End With
End Sub
Private Sub Recurse(ByVal Chemin As String)
Dim hFindfile As Long h
Findfile = FindFirstFileA(Chemin & "*.*", FileFindData)
If Chemin <> "C:" Then
FindNextFileA hFindfile, FileFindData
If FindNextFileA(hFindfile, FileFindData) = 0 Then
FindClose hFindfile
Exit Sub
End If
End If
Do Fichier = Chemin & Left$(FileFindData.cFileName, _
InStr(1, FileFindData.cFileName, vbNullChar) - 1)
If GetFileAttributesA(Fichier) And vbDirectory Then
Recurse Fichier & ""
ElseIf Fichier Like Masque Then
NbFichiers = NbFichiers + 1
ReDim Preserve Arr(1 To NbFichiers)
Arr(NbFichiers) = Fichier
End If
Loop While FindNextFileA(hFindfile, FileFindData) FindClose hFindfile
End Sub Laurent Longre