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

Macros et VBA Excel Discussion :

lister les fichiers contenus dans un répertoire ainsi que dans tous ses sous-répertoires


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Homme Profil pro
    Auditeur informatique
    Inscrit en
    Septembre 2017
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Lot (Midi Pyrénées)

    Informations professionnelles :
    Activité : Auditeur informatique

    Informations forums :
    Inscription : Septembre 2017
    Messages : 2
    Par défaut lister les fichiers contenus dans un répertoire ainsi que dans tous ses sous-répertoires
    Bonjour,

    le problème est classique et on a déjà présenté diverses solutions.
    mais, avec celle des FAQ "Comment lister les fichiers contenus dans un répertoire ainsi que dans tous ses sous-répertoires ?", le programme saute certains fichiers, même si je fais la recherche en ciblant uniquement le sous-répertoire concerné.
    par contre, le programme suivant, plus simple, donne la liste complète. Mais il ne gère pas l'arborescence des répertoires.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     
     
    Sub test()
    Dim Dossier As String, Fichier As String, i As Integer
     
    Dossier = "Q:\mon dossier musique\"
     
    i = 0
     
    Fichier = Dir(Dossier)
     
    Do While Fichier <> ""
     
      i = i + 1
     
      Sheets("Sheet1").Range("A" & i) = Fichier
     
      Fichier = Dir
     
    Loop
    End Sub
     
    Option Explicit
    Je ne vois pas d'explication à ce saut de certains fichiers. Voici le contenu du répertoire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    01 Responsoria et alia ad Officium Hebdomadae Sanctae spectantia- Tenebrae Responsories for Maundy Thursday - Responsory, 1st Nocturne- In monte Oliveti.flac
    02 Responsoria et alia ad Officium Hebdomadae Sanctae spectantia- Tenebrae Responsories for Maundy Thursday - Responsory, 1st Nocturne- Tristis est anima mea.flac
    03 Responsoria et alia ad Officium Hebdomadae Sanctae spectantia- Tenebrae Responsories for Maundy Thursday - Responsory, 1st Nocturne- Ecce vidimus eum.flac
    04 Responsoria et alia ad Officium Hebdomadae Sanctae spectantia- Tenebrae Responsories for Maundy Thursday - Responsory, 2nd Nocturne- Amicus meus osculi.flac
    05 Responsoria et alia ad Officium Hebdomadae Sanctae spectantia- Tenebrae Responsories for Maundy Thursday - Responsory, 2nd Nocturne- Judas mercator pessimus.flac
    06 Responsoria et alia ad Officium Hebdomadae Sanctae spectantia- Tenebrae Responsories for Maundy Thursday - Responsory, 2nd Nocturne- Unus ex discippulis meis.flac
    07 Responsoria et alia ad Officium Hebdomadae Sanctae spectantia- Tenebrae Responsories for Maundy Thursday - Responsory, 3rd Nocturne- Eram quasi agnus innocens.flac
    08 Responsoria et alia ad Officium Hebdomadae Sanctae spectantia- Tenebrae Responsories for Maundy Thursday - Responsory, 3rd Nocturne- Una hora non potuistis.flac
    09 Responsoria et alia ad Officium Hebdomadae Sanctae spectantia- Tenebrae Responsories for Maundy Thursday - Responsory, 3rd Nocturne- Seniores populi consilium.flac
    10 Responsoria et alia ad Officium Hebdomadae Sanctae spectantia- Tenebrae Responsories for Good Friday - Responsory, 1st Nocturne- Omnes amici mei.flac
    11 Responsoria et alia ad Officium Hebdomadae Sanctae spectantia- Tenebrae Responsories for Good Friday - Responsory, 1st Nocturne- Velum templi scissum est.flac
    12 Responsoria et alia ad Officium Hebdomadae Sanctae spectantia- Tenebrae Responsories for Good Friday - Responsory, 1st Nocturne- Vinea mea electa, ego te plantavi.flac
    13 Responsoria et alia ad Officium Hebdomadae Sanctae spectantia- Tenebrae Responsories for Good Friday - Responsory, 2nd Nocturne- Tanquam ad latronem.flac
    14 Responsoria et alia ad Officium Hebdomadae Sanctae spectantia- Tenebrae Responsories for Good Friday - Responsory, 2nd Nocturne- Tenebrae factae sunt.flac
    15 Responsoria et alia ad Officium Hebdomadae Sanctae spectantia- Tenebrae Responsories for Good Friday - Responsory, 2nd Nocturne- Animam meam dilectam.flac
    16 Responsoria et alia ad Officium Hebdomadae Sanctae spectantia- Tenebrae Responsories for Good Friday - Responsory, 3rd Nocturne- Tradiderunt me.flac
    17 Responsoria et alia ad Officium Hebdomadae Sanctae spectantia- Tenebrae Responsories for Good Friday - Responsory, 3rd Nocturne- Jesum tradidit impius.flac
    18 Responsoria et alia ad Officium Hebdomadae Sanctae spectantia- Tenebrae Responsories for Good Friday - Responsory, 3rd Nocturne- Caligaverunt oculi mei.flac
    le programme saute les n° 02, du n° 05 au n° 9 et le n° 12.

    La longueur des noms serait-elle en cause ?

    merci déjà pour vos idées

    Luc

  2. #2
    Expert confirmé
    Homme Profil pro
    retraité
    Inscrit en
    Juin 2012
    Messages
    3 436
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : retraité
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juin 2012
    Messages : 3 436
    Par défaut
    Bonjour,

    Oui, le fonction Dir() ne fonctionne correctement qu'avec des noms complets de maximum 260 caractères (nom complet: chemin + nom du fichier).

    Cordialement.

  3. #3
    Membre émérite
    Homme Profil pro
    Inscrit en
    Octobre 2013
    Messages
    385
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2013
    Messages : 385
    Par défaut
    Bonjour,

    J'ai déjà utilisé une macro pour lister tous les dossiers et fichiers d'un répertoire dans un fichier Excel (+ les sous-dossiers qui vont avec).

    Pour cela, j'utilise une procédure récursive, qui parcourt tous les fichiers d'un répertoire donné en paramètre, puis tous les dossiers.
    Et pour chaque dossier, la procédure s'appelle elle-même en prenant comme répertoire paramètre le répertoire détecté, et ainsi de suite...

    Voici le code que j'ai simplifié pour l'exemple, à adapter.
    Tu constateras que je récupérais uniquement le nom des fichiers/dossiers, mais tu peux récupérer le chemin entièrement.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    Dim fso As FileSystemObject, dossier As Folder, sousdossier As Folder, fichier As File
    Dim NbFichiers As Integer, NbDossiers As Integer
     
    Public Sub scan(ByVal dossier As Folder)
     
        For Each fichier In dossier.Files
            ActiveCell.Value = Right(fichier, Len(fichier) - InStrRev(fichier, "\", InStrRev(fichier, "\")))
            ActiveCell.Offset(1, 0).Select
            NbFichiers = NbFichiers + 1
        Next
     
        For Each sousdossier In dossier.SubFolders
            ActiveCell.Value = Right(sousdossier, Len(sousdossier) - InStrRev(sousdossier, "\"))
            ActiveCell.Offset(1, 0).Select
            Call scan(sousdossier)
        Next
     
    End Sub
    EDIT : Il me semble de mémoire qu'il faut ajouter la référence externe : Microsoft Scripting Runtime. A tester sans et avec pour voir.

  4. #4
    Candidat au Club
    Homme Profil pro
    Auditeur informatique
    Inscrit en
    Septembre 2017
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Lot (Midi Pyrénées)

    Informations professionnelles :
    Activité : Auditeur informatique

    Informations forums :
    Inscription : Septembre 2017
    Messages : 2
    Par défaut j'ai trouvé la solution
    Bonjour,
    merci à EricDgn et mat955.
    Cher Eric, c'est curieux, car c'est justement la macro avec DIR qui fonctionne, tandis que celle qui est récursive ne fonctionne pas.
    Cher Mat, oui, je connais ce type de macro, mais c'est justement celle qui saute certains fichiers.

    Dans mon cas, la longeur maximum était toujours inférieure à 260, mais proche: 248, 253, 248, 250, 255, 256, 257, 254, 257, 243, 252, 247, 248, 248, 242, 249, 250

    J'en ai parlé à un de mes beaux-fils qui est dans le support informatique et qui soupçonne aussi une question de longeur de "path" ou la présence d'un caractère spécial.

    Une recherche sur internet m'a donné deux informations très utiles.

    "Windows 10 : Microsoft met silencieusement fin à la limitation à 260 caractères pour les chemins d'accès"

    http://<br /> https://www.developpe...version/<br />

    ou encore ici
    http://<br /> https://knowledge.aut...ers.html<br />

    1/je cite:

    Par contre, et cela existe depuis au moins 20 ans (ça remonte à Windows NT), il est possible de dépasser cette limite en préfixant les chemins par \\?\, (par exemple \\?\C:\monfichier), et la limite est alors poussée à 32767.
    Je l'ai fait, et effectivement, je récupère bien tout. Une bonne idée donc.


    2/ On peut activer (mais il faut le faire) dans W10, la suppression de cette limite de 260.

    Je l'ai aussi testée (sans utiliser l'autre astuce). Mais j'obtiens toujours la même erreur: certains fichiers sont manquants.

    Mais, avec la première solution (rajouter \\?\ devant), c'est ok. Donc résolu

    Luc

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2007] Comment lister les fichiers contenus dans un répertoire Sharepoint
    Par Riri80 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 08/12/2020, 08h50
  2. Lister les fichiers contenus dans un répertoire.
    Par gadje dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 05/04/2017, 14h33
  3. Réponses: 6
    Dernier message: 15/11/2016, 11h37
  4. Lister les fichiers contenus dans un paquet
    Par mamelouk dans le forum Debian
    Réponses: 3
    Dernier message: 01/09/2007, 12h13
  5. [VBA] lister les fichiers contenus dans un .ZIP
    Par DJBORIE dans le forum VBA Access
    Réponses: 5
    Dernier message: 10/04/2007, 17h49

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