VBA Problème pour avoir le nombre de fichiers dans un répertoire

Bonjour,

Pour compter le nombre de fichiers dans un répertoire j'utilise la fonction suivante :

Function NombreFichiers(ByVal Dossier As String)

Dim FSO As Object

Set FSO = CreateObject("Scripting.FileSystemObject")

MsgBox "Nombre de fichier : " & FSO.GetFolder(Dossier).Files.Count

MsgBox "Taille du répertoire : " & FSO.GetFolder(Dossier).Size

Set FSO = Nothing

End Function

Mais cette fonction m'affiche "0" alors que j'ai bien des fichiers sur le répertoire. Par contre la taille du répertoire lui est bien affiché.

Je ne comprends pas pourquoi le nombre de fichier ne ressort pas alors que FSO fonctionne bien pour la copie de répertoire (dans mon script complet) et la taille du répertoire (ici).

Bonjour,

Sûrement pas le bon chemin du dossier recherché, montrez la macro qui appelle la fonction.

il est fort possible que la taille du répertoire ne corresponde pas vraiment à celle du dossier recherché, l'avez-vous vérifiez?

Cdlt

Bonjour et merci pour votre intervention,

Pourtant tout parait correct :

Sub Test_V1()

ret= NombreFichiers("D:\tmp\ARCHIVES")

End Sub

Function NombreFichiers(ByVal Dossier As String)

Dim FSO As Object

Set FSO = CreateObject("Scripting.FileSystemObject")

MsgBox FSO.GetFolder(Dossier).Files.Count

MsgBox FSO.GetFolder(Dossier).Size

Set FSO = Nothing

End Function

Le répertoire "D:\tmp\ARCHIVES" existe bel et bien et Size me ressort bien la taille du répertoire en question contrairement à .Files.Count

Ce qui est étonnant.

Euh!

Sub Test_V1()
   ret= NombreFichiers("D:\tmp\ARCHIVES")
End Sub

Ne serait-ce pas plutôt ceci:

Sub Test_V1()
    Dossier = NombreFichiers("D:\tmp\ARCHIVES")
    Call NombreFichiers(Dossier)
End Sub

Non cela ne fonctionne pas et m'affiche même une erreur.

La fonction est bien appelée avec << ret= NombreFichiers("D:\tmp\ARCHIVES") >>

Mais << MsgBox FSO.GetFolder(Dossier).Files.Count >> affiche toujours 0 fichier.

C'est ce que je ne m'explique pas, FSO est bien utilisé et fonctionne bien pour ressortir la taille du répertoire alors que le nombre de fichier que je devrais avoir est 20 et non 0.

Je viens de voir où se situe le problème... en fait .Files.Count ne donne que le nombre de fichier à la racine du répertoire et non le nombre de fichiers dans le répertoire ET sous-répertoire. Mes 20 fichiers sont dans des sous-répertoires. Il me faudra donc utiliser de la récursivité.

Vous connaîtriez un moyen plus rapide ?

Pardon, j'ai écrit une bêtise,

il faut 2 fonctions distinctes, car dans votre cas, la seconde efface la première:

Dim FSO As Object

Sub Test_V1()
    ret = NombreFichiers1("D:\tmp\ARCHIVES")
    ret = NombreFichiers2("D:\tmp\ARCHIVES")
End Sub

Function NombreFichiers1(ByVal Dossier As String)
    Set FSO = CreateObject("Scripting.FileSystemObject")
    MsgBox FSO.GetFolder(Dossier).Files.Count
End Function

Function NombreFichiers2(ByVal Dossier As String)
    MsgBox FSO.GetFolder(Dossier).Size
    Set FSO = Nothing
End Function

Zut, j'ai répondu avant d'avoir vu votre dernier post.

Et oui il faut inclure les sous-répertoires dans le nom des dossiers

J'utilise maintenant :

Public Function CompteLesFichiers(PathRep As String) As Long

Dim fs, RepFich As Variant

Set fs = CreateObject("Scripting.FileSystemObject")

CompteLesFichiers = fs.GetFolder(PathRep).Files.Count

For Each RepFich In fs.GetFolder(PathRep).SubFolders

CompteLesFichiers = CompteLesFichiers + CompteLesFichiers(RepFich.Path)

Next RepFich

Set fs = Nothing

End Function

Et ça fonctionne nettement mieux... C'est assez rapide. Je n'avais pas pensé que .Files.Count ne prenait que la racine du répertoire.

Rechercher des sujets similaires à "vba probleme nombre fichiers repertoire"