OVH Cloud OVH Cloud

Nombre de fichiers d'un répertoire (VBA)

4 réponses
Avatar
pascalv
Quelqu'un sait-il pourquoi ces deux programmes renvoient dans certains
cas des r=E9sultats diff=E9rents pour calculer le nombre de fichiers d'un
r=E9pertoire?

Dans les 2 cas l'objectif =E9tait de compter tous les fichiers.

Merci d'avance


----- M=E9thode 1: Utilisation de Application.FileSearch

Public Sub test1()
Dim fs As Object
Set fs =3D CreateObject("Scripting.FileSystemObject")

With Application.FileSearch
.NewSearch
.RefreshScopes
.FileTypes.Add msoFileTypeAllFiles
.FileType =3D msoFileTypeAllFiles
.SearchSubFolders =3D True

.LookIn =3D "C:\users"

ActiveCell.Formula =3D .Execute(SortBy:=3DmsoSortByLastModified, _
SortOrder:=3DmsoSortOrderAscending, _
AlwaysAccurate:=3DTrue)
End With

End Sub

----- Fin de la m=E9thode 1


----- M=E9thode 2: Comptage par une fonction r=E9cursive

Public Sub test2()

Dim fs As Object
Set fs =3D CreateObject("Scripting.FileSystemObject")
ActiveCell.Formula =3D nbFichiers("C:\users", fs)

End Sub


Private Function nbFichiers(dossier As String, ByRef fs As Object)
Rem nb de fichiers dans un r=E9pertoire

Dim f As Object

nbFichiers =3D fs.GetFolder(dossier).Files.Count

If Not (fs Is Nothing) Then
If fs.GetFolder(dossier).SubFolders.Count > 0 Then
For Each f In fs.GetFolder(dossier).SubFolders
nbFichiers =3D nbFichiers _
+ nbFichiers(f.Path, fs) ' fonction r=E9cursive
Next
End If
End If
End Function


----- Fin de la m=E9thode 2

4 réponses

Avatar
michdenis
Bonjour Pascal,

et si tu utilises plutôt ceci :

'-----------------------
With Application.FileSearch
.NewSearch
.LookIn = "c:sophie" 'à déterminer
.Filename = "*.*"
.FileType = msoFileTypeAllFiles
.SearchSubFolders = True
If .Execute > 0 Then
MsgBox .FoundFiles.Count
End If
End With
'------------------------------


Salutations"


a écrit dans le message de news:

Quelqu'un sait-il pourquoi ces deux programmes renvoient dans certains
cas des résultats différents pour calculer le nombre de fichiers d'un
répertoire?

Dans les 2 cas l'objectif était de compter tous les fichiers.

Merci d'avance


----- Méthode 1: Utilisation de Application.FileSearch

Public Sub test1()
Dim fs As Object
Set fs = CreateObject("Scripting.FileSystemObject")

With Application.FileSearch
.NewSearch
.RefreshScopes
.FileTypes.Add msoFileTypeAllFiles
.FileType = msoFileTypeAllFiles
.SearchSubFolders = True

.LookIn = "C:users"

ActiveCell.Formula = .Execute(SortBy:=msoSortByLastModified, _
SortOrder:=msoSortOrderAscending, _
AlwaysAccurate:=True)
End With

End Sub

----- Fin de la méthode 1


----- Méthode 2: Comptage par une fonction récursive

Public Sub test2()

Dim fs As Object
Set fs = CreateObject("Scripting.FileSystemObject")
ActiveCell.Formula = nbFichiers("C:users", fs)

End Sub


Private Function nbFichiers(dossier As String, ByRef fs As Object)
Rem nb de fichiers dans un répertoire

Dim f As Object

nbFichiers = fs.GetFolder(dossier).Files.Count

If Not (fs Is Nothing) Then
If fs.GetFolder(dossier).SubFolders.Count > 0 Then
For Each f In fs.GetFolder(dossier).SubFolders
nbFichiers = nbFichiers _
+ nbFichiers(f.Path, fs) ' fonction récursive
Next
End If
End If
End Function


----- Fin de la méthode 2
Avatar
pascalv
et si tu utilises plutôt ceci :
With Application.FileSearch
MsgBox .FoundFiles.Count


Merci pour la réponse; mais Application.FileSearch.FoundFiles.Count
retourne le même résultat que la 1ère méthode (résultat de
.Execute), càd qu'il manque des fichiers par rapport à un balayage
systématique de tous les répertoires

Avatar
michdenis
Bonjour Pascal,

As-tu pu identifier le type de fichier dont la procédure ne tient pas compte?
Ce serait intéressant de savoir ....

À titre d'exemple sous Excel 2003 et Windows Xp Pro.
Impossible pour FileSearch de compter le nombre de fichiers .zip
ou de lui faire rechercher un fichier ayant une extension .zip
.Par contre, il identifie très bien les extensions .rar .
2 types de fichiers compressés, 2 réponses différentes.

Je n'ai aucune explication pour ceci. Est-ce que ceci est aussi
applicable à d'autres types (extensions) de fichiers ?

Avec ce type de procédure, je ne vois aucune explication justifiant
cette observation :

With Application.FileSearch
.NewSearch
.LookIn = "c:sophie" 'à déterminer
.Filename = "*.*"
.SearchSubFolders = False
If .Execute > 0 Then
MsgBox .FoundFiles.Count
End If
End With

Peut-être que d'autres auront un complément d'informations.


Salutations!



a écrit dans le message de news:
et si tu utilises plutôt ceci :
With Application.FileSearch
MsgBox .FoundFiles.Count


Merci pour la réponse; mais Application.FileSearch.FoundFiles.Count
retourne le même résultat que la 1ère méthode (résultat de
.Execute), càd qu'il manque des fichiers par rapport à un balayage
systématique de tous les répertoires

Avatar
pascalv
As-tu pu identifier le type de fichier dont la procédure ne tient pas c ompte?
Ce serait intéressant de savoir ....


J'ai aussi déjà eu le cas avec *certains* fichiers .msg (Microsoft
Outlook)