Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
michdenis
Bonjour Rahan,
Il y a aussi ceci de Laurent Longre.
Est-ce beaucoup plus rapide. Tu devras adapter pour obtenir les attribute de tes fichiers.
'-------------------------------- 'Attention à bien mettre un antislash à la fin du le nom du répertoire 'dans l'appel de Recurse. 'Laurent Longre, mpfe '======================================================== 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
Const Masque = "*.exe"
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 "D:" 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 hFindfile = FindFirstFileA(Chemin & "*.*", FileFindData) If Chemin <> "D:" 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 GetAttr(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 '--------------------------------
Salutations!
"Rahan" a écrit dans le message de news: bonjour a tous
j utilise le Filesystemobject pour recuper la liste des fichiers recursivement pour afficher le nom,rep,date de creation the pb est que c very lent !
y a t il un moyen plus rapide ? dir ?....
merci d vance
Bonjour Rahan,
Il y a aussi ceci de Laurent Longre.
Est-ce beaucoup plus rapide. Tu devras adapter pour obtenir les attribute de tes fichiers.
'--------------------------------
'Attention à bien mettre un antislash à la fin du le nom du répertoire
'dans l'appel de Recurse.
'Laurent Longre, mpfe
'========================================================
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
Const Masque = "*.exe"
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 "D:"
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
hFindfile = FindFirstFileA(Chemin & "*.*", FileFindData)
If Chemin <> "D:" 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 GetAttr(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
'--------------------------------
Salutations!
"Rahan" <Rahan@discussions.microsoft.com> a écrit dans le message de news: 7816AB39-C229-462B-AAB0-9C8E6006C628@microsoft.com...
bonjour a tous
j utilise le Filesystemobject pour recuper la liste des fichiers
recursivement pour afficher le nom,rep,date de creation
the pb est que c very lent !
Est-ce beaucoup plus rapide. Tu devras adapter pour obtenir les attribute de tes fichiers.
'-------------------------------- 'Attention à bien mettre un antislash à la fin du le nom du répertoire 'dans l'appel de Recurse. 'Laurent Longre, mpfe '======================================================== 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
Const Masque = "*.exe"
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 "D:" 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 hFindfile = FindFirstFileA(Chemin & "*.*", FileFindData) If Chemin <> "D:" 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 GetAttr(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 '--------------------------------
Salutations!
"Rahan" a écrit dans le message de news: bonjour a tous
j utilise le Filesystemobject pour recuper la liste des fichiers recursivement pour afficher le nom,rep,date de creation the pb est que c very lent !