IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Contribuez Discussion :

Compter les fichiers d'un répertoire et de ses sous-répertoires


Sujet :

Contribuez

  1. #1
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut Compter les fichiers d'un répertoire et de ses sous-répertoires
    En complément de la recherche d'un fichier.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Public Function CompteLesFichiers(Chemin As String) As Long
    Dim fs, RepFich As Variant
        Set fs = CreateObject("Scripting.FileSystemObject")
        CompteLesFichiers = fs.GetFolder(Chemin).Files.Count
        For Each RepFich In fs.GetFolder(Chemin).SubFolders
            CompteLesFichiers = CompteLesFichiers + CompteLesFichiers(RepFich.path)
        Next RepFich
    End Function
    Appel de la fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Sub CompterSeulement()
    Dim chemin As String
        chemin = "D:\Doc\" 'avec ou sans sous-répertoire
        MsgBox CompteLesFichiers(chemin)
    End Sub

  2. #2
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2006
    Messages
    1 399
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 399
    Points : 2 221
    Points
    2 221
    Par défaut
    bonjour ouskel'n'or,

    Dim fs, RepFich As Variant
    Bof...

    et sans fso, ça donnerait quoi ?

    amicalement,

    Philippe

  3. #3
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Tu as raison !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim fs as variant, RepFich As Variant
    Voilà, c'est corrigé
    Teste avec object (si c'est ce qui te choquait) tu verras
    Sans fso ? Tu as une idée ? Alors c'est le moment de la mettre
    Je connaissais avec shell
    Shell("cmd /c Dir D:\ *.* /s/a/o > Liste.txt")
    qui permet de récupérer le txt contenant le nom et la taille de tous les fichiers et répertoires classés par ordre alphabétique, ainsi que le nombre de fichiers par répertoire, mais dans VBA, avec dir, je n'ai pas trouvé de correspondance. Si tu as ça, c'est intéressant, tu devrais le poser ici ou ouvrir une nouvelle discussion.
    A+

  4. #4
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2006
    Messages
    1 399
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 399
    Points : 2 221
    Points
    2 221
    Par défaut
    Re bonjour my friend,

    en vba pur c'est possible mais plus complexe...
    Il faut utiliser les fonctions Dir(), GetAttr() et une fonction récursive pour parcourir tous les sous-reps.

    Il existe sur le net des "vieilles sources" !

    Philippe

  5. #5
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Oui, à une époque j'avais fait ça mais ça moulinait longtemps, longtemps, c'est pourquoi je suis passé à fso malgré mes réticences. Je conseille toujours de passer par Dir quand il s'agit de lister un répertoire unique.

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 6
    Points : 5
    Points
    5
    Par défaut Comme li n'est pas simple de trrouver dans google
    Bonjour,

    pour ceux qui cherchent comme moi, c'est pas loin mais cette fonction ne marche pas. Et comme c'est pour demain, j'ai trouvé à 3h du mat!
    Le code qui marche :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Public Function CompteFichiers(Chemin As String) As Long
        Dim FSO As Object, folder As Object
        Set FSO = CreateObject("Scripting.FileSystemObject")
            CompteFichiers = FSO.GetFolder(Chemin).Files.Count
        For Each folder In FSO.GetFolder(Chemin).SubFolders
            CompteFichiers = CompteFichiers + FSO.GetFolder(folder.Path).Files.Count
        Next
    End Function
    Asqtuce :
    Si c'est pour compter des fichiers, pour accélérer la procédure il est judicieux de mettre le résultat dans une table (temp). Cela permet souvent une simple réactualisation par ajout.
    En effet, dans l'exemple du mode récursif, le nombre de fichiers contenus ne change pas forcement dans tous les sous-dossiers à la fois.
    Relevé seulement le nombre de ceux qui ont vu un changement et l'additionner à la temp permet d’accélérer considérablement le code.
    Cordialement.

  7. #7
    Membre éprouvé
    Homme Profil pro
    ingénieur d'étude
    Inscrit en
    Juin 2013
    Messages
    563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : ingénieur d'étude
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2013
    Messages : 563
    Points : 1 141
    Points
    1 141
    Par défaut
    Bonjour lisamano,

    Le code que tu proposes contient quelques problèmes.
    Tout d'abord, la ligne 7 devrait être:
    De plus, ton code ne compte que les fichiers inclus dans les sous-dossiers de niveau 1. Ainsi, sur la structure de fichiers suivante:
    ┌ DOSSIER
    ├┬ SOUSDOSSIER1
    │├┬ SOUSDOSSIER2
    ││└ Fichier1
    │└ Fichier2
    ├ Fichier3
    └ Fichier4
    
    il ne compte que 3 fichiers. Fichier1 est oublié car il se situe dans le sous-dossier d'un sous-dossier.

    Cdt

  8. #8
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 782
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 782
    Points : 28 649
    Points
    28 649
    Billets dans le blog
    53
    Par défaut
    Bonjour Benjamin,
    Dans une boucle For To Next, il n'est absolument pas obligatoire d'ajouter le nom de la variable au Next
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     Dim r%, c%
     For r = 1 To 10
      For c = 1 To 5
       Debug.Print r & "/" & c
      Next
     Next
    Ce code avec deux boucles fonctionne parfaitement
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  9. #9
    Membre éprouvé
    Homme Profil pro
    ingénieur d'étude
    Inscrit en
    Juin 2013
    Messages
    563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : ingénieur d'étude
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2013
    Messages : 563
    Points : 1 141
    Points
    1 141
    Par défaut
    Bonjour Philippe,

    En effet, ça fonctionne très bien !
    Je ne connaissais pas cette syntaxe
    Pardon à Lisamano pour la première partie de ma remarque qui était donc erronée.

Discussions similaires

  1. Exécution de tous les fichiers .py d'un répertoire et de ses sous-répertoires
    Par lGuillaume124 dans le forum Shell et commandes GNU
    Réponses: 3
    Dernier message: 04/04/2013, 12h35
  2. Réponses: 7
    Dernier message: 02/08/2011, 16h03
  3. Réponses: 4
    Dernier message: 31/05/2007, 15h25

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo