OVH Cloud OVH Cloud

Vba: Application.FileSearch.FoundFiles.Count

17 réponses
Avatar
Jac
Bonjour à tous,

je suis très étonné des résultats obtenus par
Application.FileSearch.FoundFiles.Count
car quand je l'applique à un volume, je n'obtiens pas autant de
fichiers que Windows m'annonce dans les propriétés de la cible.
Aucun fichier n'est caché.

Sur différents volumes j'obtiens par Vba et par Windows
15.958 et 22.839
13.830 et 16.779
63.910 et 78.508

Le vba a-t-il une profondeur maxi pour ses investigations dans les
répertoires ?
Une longueur maxi pour le chemin complet ?
Des noms qu'il refuse de traiter ?
Une limite pour le nombre de fichiers (ex: 65536) sauf que ça le
fait déjà avant cette valeur?

Merci d'avance à ceux qui auraient quelques idées à ce propos.

Jac

7 réponses

1 2
Avatar
MichDenis
Essaie ceci : Cela devrait te donner le nombre d'octets dans
un répertoire et sous répertoires selon que tu auras indiqué
à la procédure le paramètre True or False

'----------------------------------
Sub test()
Dim Nb&, Taille As Long
'nombre de fichiers dans le répertoire spécifié
NbDeFichiers "c:Atravail", Nb&, Taille, True
MsgBox "Nombre de fichiers : " & Nb & " " & vbCrLf & _
"taille du répertoire : " & Taille & " octets."
End Sub
'----------------------------------
Sub NbDeFichiers(LeDossier$, Cpte&, Taille As Long, _
Optional SousDossiers As Boolean = True)

Set fso = CreateObject("Scripting.FileSystemObject")
Set Dossier = fso.GetFolder(LeDossier)
Cpte = Cpte + Dossier.Files.Count
Taille = Taille + Dossier.Size
If SousDossiers Then
For Each sousRep In Dossier.SubFolders
Taille = Taille + sousRep.Size
Next
End If
End Sub
'----------------------------------





"Jac" a écrit dans le message de news: uTd%
Merci Mich,

mais quand j'attaque "c:" la macro arrive sur
Taille = taille + Dossier.Size
et j'obtiens une erreur 70 : "Permission refusée".


"MichDenis" a écrit dans le message de news:

J'oubliais, si tu veux aussi obtenir la taille et le nombre de fichiers
des sous-répertoires aussi, dans la procédure test, tu utilises cette
ligne de commandes :

NbDeFichiers "c:Atravail", Nb&, taille, True

En fait, il y a seulement le dernier paramètre qui change et qui indique
que tu veux tenir compte des sous-répertoires.



"MichDenis" a écrit dans le message de news:
%
Ceci te donne le nombre de fichiers du répertoire que
tu as retenu et le nombre d'octets de ce répertoire :

'----------------------------------
Sub test()
Dim Nb&, taille As Double
'nombre de fichiers dans le répertoire spécifié
NbDeFichiers "c:Atravail", Nb&, taille, False
MsgBox "Nombre de fichiers : " & Nb & " " & vbCrLf & _
"taille du répertoire : " & taille & " octets."
End Sub
'----------------------------------
Sub NbDeFichiers(LeDossier$, Cpte&, taille As Double, _
Optional SousDossiers As Boolean = True)
Dim fso As Object, Dossier As Object
Dim sousRep As Object

Set fso = CreateObject("Scripting.FileSystemObject")
Set Dossier = fso.GetFolder(LeDossier)
Cpte = Cpte + Dossier.Files.Count
taille = taille + Dossier.Size
'traitement récursif des sous dossiers
If SousDossiers Then
For Each sousRep In Dossier.SubFolders
NbDeFichiers sousRep.Path, Cpte, taille
Next sousRep
End If
Set fso = Nothing
End Sub
'----------------------------------




"Jac" a écrit dans le message de news:

Mea culpa... Je n'ai regardé nulle part car je suis parti sur une macro
que
j'avais déjà mis au point pour cataloguer les fichiers et j'ai eu la
mauvaise idée de vouloir comparer les résultats obtenus et ce que dit
windows. Je n'ai pas l'habitude de croire tout ce qu'on me dit.
J'aime consulter une autre source pour valider...

Donc j'ai testé la macro qui est à l'origine de quelques échanges de mail.
C'est parfait, sauf pour le "C:" car windows voit 23.528 fichiers et la
macro en compte 23.544. La corbeille est vide donc sans doute des
fichiers système. Mais Excel serait-il plus perspicace que Windows XP ?

Sans vouloir abuser, que faudrait-il ajouter à la macro pour calculer
la taille des fichiers qui ont été comptés ?


"MichDenis" a écrit dans le message de news:

http://www.excelabo.net/excel/repertoiresarborescence.php#dossiersfichiers

Me semblait aussi ... Jac a du mal regarder !








Avatar
Jac
Désolé, mais les tailles en octets ne correspondent pas à ce qu'annonce
Windows.

"MichDenis" a écrit dans le message de news:
%
Essaie ceci : Cela devrait te donner le nombre d'octets dans
un répertoire et sous répertoires selon que tu auras indiqué
à la procédure le paramètre True or False

'----------------------------------
Sub test()
Dim Nb&, Taille As Long
'nombre de fichiers dans le répertoire spécifié
NbDeFichiers "c:Atravail", Nb&, Taille, True
MsgBox "Nombre de fichiers : " & Nb & " " & vbCrLf & _
"taille du répertoire : " & Taille & " octets."
End Sub
'----------------------------------
Sub NbDeFichiers(LeDossier$, Cpte&, Taille As Long, _
Optional SousDossiers As Boolean = True)

Set fso = CreateObject("Scripting.FileSystemObject")
Set Dossier = fso.GetFolder(LeDossier)
Cpte = Cpte + Dossier.Files.Count
Taille = Taille + Dossier.Size
If SousDossiers Then
For Each sousRep In Dossier.SubFolders
Taille = Taille + sousRep.Size
Next
End If
End Sub
'----------------------------------

"Jac" a écrit dans le message de news:
uTd%
Merci Mich,

mais quand j'attaque "c:" la macro arrive sur
Taille = taille + Dossier.Size
et j'obtiens une erreur 70 : "Permission refusée".


"MichDenis" a écrit dans le message de news:

J'oubliais, si tu veux aussi obtenir la taille et le nombre de fichiers
des sous-répertoires aussi, dans la procédure test, tu utilises cette
ligne de commandes :

NbDeFichiers "c:Atravail", Nb&, taille, True

En fait, il y a seulement le dernier paramètre qui change et qui indique
que tu veux tenir compte des sous-répertoires.



"MichDenis" a écrit dans le message de news:
%
Ceci te donne le nombre de fichiers du répertoire que
tu as retenu et le nombre d'octets de ce répertoire :

'----------------------------------
Sub test()
Dim Nb&, taille As Double
'nombre de fichiers dans le répertoire spécifié
NbDeFichiers "c:Atravail", Nb&, taille, False
MsgBox "Nombre de fichiers : " & Nb & " " & vbCrLf & _
"taille du répertoire : " & taille & " octets."
End Sub
'----------------------------------
Sub NbDeFichiers(LeDossier$, Cpte&, taille As Double, _
Optional SousDossiers As Boolean = True)
Dim fso As Object, Dossier As Object
Dim sousRep As Object

Set fso = CreateObject("Scripting.FileSystemObject")
Set Dossier = fso.GetFolder(LeDossier)
Cpte = Cpte + Dossier.Files.Count
taille = taille + Dossier.Size
'traitement récursif des sous dossiers
If SousDossiers Then
For Each sousRep In Dossier.SubFolders
NbDeFichiers sousRep.Path, Cpte, taille
Next sousRep
End If
Set fso = Nothing
End Sub
'----------------------------------




"Jac" a écrit dans le message de news:

Mea culpa... Je n'ai regardé nulle part car je suis parti sur une macro
que
j'avais déjà mis au point pour cataloguer les fichiers et j'ai eu la
mauvaise idée de vouloir comparer les résultats obtenus et ce que dit
windows. Je n'ai pas l'habitude de croire tout ce qu'on me dit.
J'aime consulter une autre source pour valider...

Donc j'ai testé la macro qui est à l'origine de quelques échanges de
mail.
C'est parfait, sauf pour le "C:" car windows voit 23.528 fichiers et la
macro en compte 23.544. La corbeille est vide donc sans doute des
fichiers système. Mais Excel serait-il plus perspicace que Windows XP ?

Sans vouloir abuser, que faudrait-il ajouter à la macro pour calculer
la taille des fichiers qui ont été comptés ?


"MichDenis" a écrit dans le message de news:

http://www.excelabo.net/excel/repertoiresarborescence.php#dossiersfichiers

Me semblait aussi ... Jac a du mal regarder !













Avatar
MichDenis
| Désolé, mais les tailles en octets ne correspondent pas à ce qu'annonce

Désolé, je ne suis pas devin ! Comme tu expliques éloquemment les
difficultés que tu éprouves...Tu devras mettre à main à la pâte ...
moi, je n'ai plus d'intérêt de continuer ......
Avatar
MichDenis
Copie ce qui suit dans un module standard d'un fichier vierge

A ) Dans le haut du module, tu dois déclarer la variable A
B ) Dans la procédure "Test" indique le répertoire à tester
C ) En feuil1, tu auras le "listing" de tous les fichiers,
leur taille, et le répertoire où ils sont situés

Dim A As Long
'----------------------------------
Sub test()
Dim Nb&, taille As Double

'nombre de fichiers et la taille de chacun d'eux
'dans le répertoire spécifié et ses
'sous-répertoires

Application.ScreenUpdating = False
A = 1

'Répertoire à adapter
NbDeFichiers "c:Atravail", Nb&, taille, True

With Worksheets("Feuil1")
.Range("A1") = "Nom du répertoire"
.Range("B1") = "Nom du fichier"
.Range("C1") = "Taille du fichier"
.Range("C" & A + 1) = taille
.Range("B" & A + 1) = "Total (en octets)"
.Range("B" & A + 1).Font.Bold = True
.Range("C" & A + 1).Font.Bold = True
.Range("A1:C1").Font.Bold = True
.Range("A:C").EntireColumn.AutoFit
End With

Application.ScreenUpdating = True
MsgBox "Nombre de fichiers : " & Nb & " " & vbCrLf & _
"taille du répertoire : " & taille & " octets."

End Sub
'----------------------------------
Sub NbDeFichiers(LeDossier$, Cpte&, taille As Double, _
Optional SousDossiers As Boolean = True)
Dim fso As Object, Dossier As Object
Dim sousRep As Object

Set fso = CreateObject("Scripting.FileSystemObject")
Set Dossier = fso.GetFolder(LeDossier)

For Each file In Dossier.Files
Cpte = Cpte + 1
taille = taille + file.Size
A = A + 1
With Worksheets("Feuil1")
.Cells(A, "A") = Dossier.Name
.Cells(A, "B") = file.Name
.Cells(A, "C") = file.Size
End With
Next
'traitement récursif des sous dossiers
If SousDossiers Then
For Each sousRep In Dossier.SubFolders
NbDeFichiers sousRep.Path, Cpte, taille
Next sousRep
End If
Set fso = Nothing
End Sub
'----------------------------------

Maintenant, si tu regardes de près, la liste des fichiers, il se peut
que tu y trouves plusieurs fichiers ayant ce nom : Thumbs.db

Tu trouveras l'explication à cette adresse :
http://www.siteduzero.com/tuto-3-17335-1-supprimer-les-thumbs-db.html

P.S- LORSQU'UNE PROCÉDURE NE TE DONNE PAS LE RÉSULTAT
ANTICIPÉ... LE MOINDRE QUE TU POURRAIS FAIRE, C'EST DE
COMMENTÉ LE OU LES TESTS QUE TU AS FAIT.

LES RÉPONDEURS NE SONT PAS DES DIVINS !
Avatar
Mgr Banni
des devins, denis, des devins....
au fait, tu n'es plus accessible par email? hotmailboomerang me renvoie mon
message en me disant je ne sais plus trop quoi au sujet de son impossibilité
de te le délivrer....
est-ce à dire que tes voies (bien divines, cette fois) sont comme celles du
Seigneur : impénétrables?
tu me dis à l'occase...
Mgr T. Banni

"MichDenis" a écrit dans le message de news:


LES RÉPONDEURS NE SONT PAS DES DIVINS !









Avatar
MichDenis
Si ce qui t'intéresse est d'avoir la taille de tout le répertoire
(tous les fichiers... et de ses sous-répertoires moins les fichiers Thumbs.db)
il y a ceci :

'------------------------------
Sub test()

Dim fso As Object, Rep As Object
Dim LeDossier As String, taille As Long

Dossier = "c:ATravail" ' à déterminer

Set fso = CreateObject("Scripting.FileSystemObject")
Set Rep = fso.GetFolder(Dossier)
taille = Rep.Size
MsgBox "taille du répertoire : " & taille & " octets."

End Sub
'------------------------------





"MichDenis" a écrit dans le message de news:

Copie ce qui suit dans un module standard d'un fichier vierge

A ) Dans le haut du module, tu dois déclarer la variable A
B ) Dans la procédure "Test" indique le répertoire à tester
C ) En feuil1, tu auras le "listing" de tous les fichiers,
leur taille, et le répertoire où ils sont situés

Dim A As Long
'----------------------------------
Sub test()
Dim Nb&, taille As Double

'nombre de fichiers et la taille de chacun d'eux
'dans le répertoire spécifié et ses
'sous-répertoires

Application.ScreenUpdating = False
A = 1

'Répertoire à adapter
NbDeFichiers "c:Atravail", Nb&, taille, True

With Worksheets("Feuil1")
.Range("A1") = "Nom du répertoire"
.Range("B1") = "Nom du fichier"
.Range("C1") = "Taille du fichier"
.Range("C" & A + 1) = taille
.Range("B" & A + 1) = "Total (en octets)"
.Range("B" & A + 1).Font.Bold = True
.Range("C" & A + 1).Font.Bold = True
.Range("A1:C1").Font.Bold = True
.Range("A:C").EntireColumn.AutoFit
End With

Application.ScreenUpdating = True
MsgBox "Nombre de fichiers : " & Nb & " " & vbCrLf & _
"taille du répertoire : " & taille & " octets."

End Sub
'----------------------------------
Sub NbDeFichiers(LeDossier$, Cpte&, taille As Double, _
Optional SousDossiers As Boolean = True)
Dim fso As Object, Dossier As Object
Dim sousRep As Object

Set fso = CreateObject("Scripting.FileSystemObject")
Set Dossier = fso.GetFolder(LeDossier)

For Each file In Dossier.Files
Cpte = Cpte + 1
taille = taille + file.Size
A = A + 1
With Worksheets("Feuil1")
.Cells(A, "A") = Dossier.Name
.Cells(A, "B") = file.Name
.Cells(A, "C") = file.Size
End With
Next
'traitement récursif des sous dossiers
If SousDossiers Then
For Each sousRep In Dossier.SubFolders
NbDeFichiers sousRep.Path, Cpte, taille
Next sousRep
End If
Set fso = Nothing
End Sub
'----------------------------------

Maintenant, si tu regardes de près, la liste des fichiers, il se peut
que tu y trouves plusieurs fichiers ayant ce nom : Thumbs.db

Tu trouveras l'explication à cette adresse :
http://www.siteduzero.com/tuto-3-17335-1-supprimer-les-thumbs-db.html

P.S- LORSQU'UNE PROCÉDURE NE TE DONNE PAS LE RÉSULTAT
ANTICIPÉ... LE MOINDRE QUE TU POURRAIS FAIRE, C'EST DE
COMMENTÉ LE OU LES TESTS QUE TU AS FAIT.

LES RÉPONDEURS NE SONT PAS DES DIVINS !
Avatar
MichDenis
| des devins, denis, des devins....
*** Les divins que tu connais ne sont pas aussi devins ???
;-)

| au fait, tu n'es plus accessible par email?
*** Surprenant ...

| est-ce à dire que tes voies (bien divines, cette fois) sont comme celles du
| Seigneur : impénétrables?
| tu me dis à l'occase...

Je n'ai rien fait de spécial qui t'empêcherait de m'envoyer un E-Mail.
D'ailleurs j'en reçois plein de personnes inconnues....!

*** Ce qu'affiche Hotmail à propos du contenu de mon adresse de courriel
Bonjour, michdenis ! dimanche 23 décembre
Espace de stockage utilisé : 1 % sur 5 Go
1 2