Sub ListeFichiers()
Dim nDirs&, nFiles&, lSize@
Dim Dossier$, Extension$
Dossier = "Z:\protocole\" & Sheets("Sommaire").Cells(28, 2).Value & "\Docs techniques\ENR"
Extension = "*.*" 'à adapter ou utiliser une boite de saisie
lSize = FindFile(Dossier, Extension, nDirs, nFiles)
MsgBox Str(nFiles) & " fichiers trouvés dans " & Str(nDirs) & _
" répertoires pour un total de " & lSize & " bytes"
End Sub
Function FindFile(ByVal sDir$, sExt$, nDirs&, nFiles&) As Currency
Dim fso As Object, fld As Object, FileName$, sfld As Object
Set fso = CreateObject("Scripting.FileSystemObject")
On Error GoTo Suite
Set fld = fso.GetFolder(sDir)
FileName = Dir(fso.BuildPath(fld.Path, sExt), vbNormal Or vbHidden Or vbSystem Or vbReadOnly)
While Len(FileName) <> 0
FindFile = FindFile + FileLen(fso.BuildPath(fld.Path, FileName))
nFiles = nFiles + 1
FileName = Dir()
DoEvents
Wend
nDirs = nDirs + 1
If fld.SubFolders.Count > 0 Then
For Each sfld In fld.SubFolders
DoEvents
FindFile = FindFile + FindFile(sfld.Path, sExt, nDirs, nFiles)
Next
End If
Set fso = Nothing
Set fld = Nothing
Exit Function
Suite:
FileName = ""
Resume Next
End Function