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
| Dim Fso As Object
Dim Taille As Double
Const Chemin As String = "C:\Users\...\"
Sub NBdossiersNBfichiersTaillesFichiers()
Set Fso = CreateObject("Scripting.FileSystemObject")
Dim ListeMess()
Dim ListeResult()
Dim i As Long
Dim PlanB As Boolean
ListeMess = Array("Nombre de sous-dossiers dans le dossier :", _
"Nombre de fichiers dans le dossier", _
"Taille totale des fichiers dans le dossier :")
ReDim ListeResult(UBound(ListeMess))
With Fso.getfolder(Chemin)
ListeResult(0) = .subFolders.Count
ListeResult(1) = .Files.Count
On Error Resume Next
ListeResult(2) = MEF_Octet_Short(.size)
' pour forcer l'erreur et tester manuellement le plan B
' t = 1/0
If Err.Number <> 0 Then PlanB = True
On Error GoTo 0
If PlanB Then
Call TailleParFichier(Chemin)
ListeResult(2) = MEF_Octet_Short(Taille)
End If
End With
For i = LBound(ListeMess) To UBound(ListeMess)
MsgBox ListeMess(i) & vbLf & Chemin & " = " & ListeResult(i)
Next i
End Sub
Sub TailleParFichier(Chemin As String)
'------------------------------------------------------------------------------------------
' Procédure : TailleParFichier
' Auteur : joe.levrai
' Date : 19/01/2016
' Détail : Parcours l'arborescence complète du dossier dont le Path est "Chemin"
' Additionne la taille de chaque fichier
' Contourne une erreur de lecture de la taille d'un fichier et passe au suivant
'------------------------------------------------------------------------------------------
Dim Fichier As Object
Dim SousDossier As Object
With Fso.getfolder(Chemin)
If .subFolders.Count > 0 Then
For Each SousDossier In .subFolders
Call TailleParFichier(Chemin & SousDossier.Name & "\")
Next SousDossier
End If
For Each Fichier In .Files
On Error Resume Next
Taille = Fichier.size + Taille
On Error GoTo 0
Next Fichier
End With
End Sub
Function MEF_Octet_Short(lgValeur As Double) As String
'---------------------------------------------------------------------------------------
' Procédure : MEF_Octet_Short
' Auteur : Dolphy35 - http://dolphy35.developpez.com/
' Date : 25/04/2008
' Détail : Fonction permettant un affichage en octet, kilo, mega ou giga selon valeur passée en paramètre
' Modif par : joe.levrai
' Date : 25/04/2015
' Détail : conversion des If imbriqués en une boucle While Wend avec utilisation d'un tableau d'unités
'---------------------------------------------------------------------------------------
Tableau = Array("Oct", "Ko", "Mo", "Go")
While (lgValeur / 1024 > 1) And i < UBound(Tableau)
i = i + 1
lgValeur = lgValeur / 1024
Wend
MEF_Octet_Short = CStr(Round(lgValeur, 2)) & " " & Tableau(i)
End Function |
Partager