Lister tous les fichiers d’un répertoire

Comment obtenir la liste de tous les fichiers d’un répertoire (dossier) donné ?

Le code

Voici un bout de code qui devrait faire l’affaire (à recopier dans un module standard Access, comme d’habitude).

Tester le programme

Pour tester le bout de code ci-dessus :

  1. Faites apparaître la fenêtre Exécution (CTRL + G).
  2. Tapez dedans quelque chose comme :
    ContenuDuDossier "C:Document and Settingsvotre_nomMes documents" puis [Entrée]
    Aménagez le chemin selon votre version de Windows et selon votre nom de connexion.

Les noms des fichiers trouvés devraient s’afficher dans la fenêtre Exécution.

Remarques
  • Seuls les fichiers standard (vbNormal) s’affichent dans la liste. Vous pouvez également obtenir la liste des fichiers cachés (vbHidden) ou système (vbSystem) en aménageant le premier Dir du listing. Consultez l’aide de la commande Dir pour plus d’informations.
  • La procédure ci-dessus n’affiche pas le contenu des sous-dossiers. Ça fera l’objet d’un autre article, pour sûr :o)

EDIT : Si vous souhaitez en plus stocker les noms des fichiers dans une table Access, consultez cet article.

Vous aimerez aussi...

19 réponses

  1. Hervé Inisan dit :

    Gabrieel > Le problème vient sans doute de la phrase SQL : il faudrait un INSERT INTO [la table] ([Le champ]) VALUES (...) au lieu d’un INSERT INTO [la table] SELECT... D’autre part, la concaténation de la phrase SQL ne simplifie pas la maintenance. Je viens de poster un article qui utilise plutôt un Recordset. Voir ici.

  2. Gabrieel dit :

    Bonjour

    désolé, j’abuse certainement pouvez vous eventuellement voir ce qui ne va pas dans mon code

    Private Sub Commande108_Click()
    ‘ —
    ‘ AFFICHAGE DU CONTENU D’UN DOSSIER
    ‘ —

    Dim strFichier As String
    Dim strDossier As String
    Dim MySQL As String

    strDossier = « \Frlbmcfi01scan-avaries$Scan2AccentureBackupScan2013Scan12 »
    ‘ Vérifier que le dossier existe bien
    If Dir(strDossier, vbDirectory) = «  » Then
    MsgBox « Dossier introuvable ! », vbExclamation
    Exit Sub
    End If

    ‘ Lister tous les fichiers du dossier
    strFichier = Dir(strDossier, vbNormal)
    While strFichier <> «  »
    ‘ Afficher le nom du fichier
    Debug.Print strFichier
    MySQL = « INSERT INTO tblPvScanned(PV) SELECT «  » » & strFichier & «  » » AS Expr1; »
    ‘Debug.print mysql
    DoCmd.RunSQL MySQL

    ‘ Lire le fichier suivant
    strFichier = Dir
    Wend
    End Sub

    la table a alimenter s’appele « tblPvScanned » et le champs a alimenter est le champs « PV »

    Votre aide sera grandement apprécié

    Merci d’avance

    Bien cordialement,
    G.

  3. Gabrieel dit :

    Merci pour la réponse rapide!

    je ne l’ai pas vu, mais il va sans dire que strDossier devra être documenter par le codeur?

    exemple
    strDossier= »D:Applications »

    n’est ce pas?
    A.

  4. Hervé Inisan dit :

    christophe vdw et Gabrieel > C’est effectivement possible, il faut ouvrir un Recordset avant la boucle, et écrire le fichier dans la table à chaque à chaque tour de boucle.

    Je ne crois pas avoir d’article détaillé là-dessus, par contre celui-ci est un peu sur le même principe.

  5. Gabrieel dit :

    Bonjour,

    merci pour cet article. juste une question comment pourrais je en faire une table?

    j’aimerai que le résultat alimente une table

    encore merci
    G.

  6. christophe vdw dit :

    bonjour
    je voudrai lister en auto dans une table access le nom des
    « classeur » exel, contenu dans un dossier
    je m’explique:
    sur mon disque:(c:utilisateur/…./document/christophe/model exel/demande de prix.)
    dans le dossier « demande de prix » je stock des model »classeurs » exel(classeur utilisé dans access pour être transmis au fournisseurs)
    je veut que access me propose la liste des model DISPONIBLE pour choix

    pouvez vous me téléguider sur les articles qui traitent ce problème
    merci

  7. Hervé Inisan dit :

    Daniel10 > Il s’agit d’afficher les noms des sous-répertoires, ou leur contenu ?

  8. Daniel10 dit :

    Bonsoir votre module fonctionne parfaitement bien avec insertion des fichiers dans une liste (formulaire access) mais je n’ai pas trouvé comment lister aussi les sous-répertoires

    Pouvez vous m’aider

  9. Hervé Inisan dit :

    Mig28 > AddItem n’existe effectivement pas sous Access 97. Sous cette version, il faut donc modifier LaListe.RowSource, en fournissant une chaîne dont les éléments sont délimités par un « ; ». Plus de détails dans cet autre article. Ouala !

  10. Mig28 dit :

    Bonjour,

    je me suis remis à la tâche, et j’ai réussi à renvoyer les valeurs vers ma liste déroulante en utilisant la commande :
    Forms(« NomFormulaire »).NomDeListe.RowSource = strFichier
    en fin de code à la place de Debug.Print strFichier et de Additem qui n’existe apparement pas dans access 97.
    Par contre, je n’ai que le nom du dernier fichier de mon dossier qui apparaît dans ma liste déroulante ?
    As tu une piste ?

  11. Hervé Inisan dit :

    Mig28 > J’ai eu une question proche récemment, sur le principe d’une liste de tables. Consulte cet autre article récent, qui devrait te donner des pistes. C’est la même idée, sauf qu’on liste des tables au lieu de fichiers. Le résultat s’affiche dans une liste du formulaire.

    Vu de loin, il faut surtout remplacer le Debug.Print strFichier que tu as actuellement par un NomDeListe.AddItem strFichier. Reposte par ici si ça ne marche pas. 🙂

  12. Mig28 dit :

    Encore moi, désolé, maintenant que le code fonctionne j’essaie désespérément de l’intégrer pour qu’il alimente une liste déroulante et là mon niveau ne me permet pas de réussir, as tu une idée pour m’éclairer ?

  13. Mig28 dit :

    Merci, ça marche très bien sur access 97
    juste une petite remarque pour le test, il faut ajouté «  » à la fin du chemin du dossier (ex : ContenuDuDossier « C:Document and Settingsvotre_nomMes documents »).

    Encore merci

  14. Hervé Inisan dit :

    Mig28 > Oops. J’avais oublié de déclarer strFichier, du coup le code ne marchait que sans Option Explicit en début de module. J’ai rajouté cette déclaration en début de code :

    Dim strFichier As String

    Ça devrait mieux marcher maintenant. 🙂

  15. Mig28 dit :

    Bonjour,

    j’avais nommé le module standard du même nom que la procédure, c’est pourquoi j’avais le message précédent.
    maintenant, il y a un autre problème lors de l’exécution dans la fenêtre d’exécution (CTRL + G => comme indiqué plus haut), j’ai le message : « erreur de compilation variable non définie » à propos de la variable « strfichier »

    Est ce que tu peux encore m’aider un peu…?

  16. Hervé Inisan dit :

    Mig28 > Normalement, le code marche aussi sur Access 97.

    • Tu l’as bien recopié dans un module standard ?
    • Et exécuté comme il faut dans la fenêtre Exécution ?
    • Est-ce que le nom de ton module est bien différent du nom de la procédure VBA ?
  17. Mig28 dit :

    Bonjour,
    J’ai essayé de tester le code sous access 97.
    J’ai un message « Erreur de compilation: variable ou procedure attendue, et non un module »
    Est ce que vous pouvez m’aider ?

    merci d’avance

  18. Hervé Inisan dit :

    Vaucluse Immo > Le « rien ne fonctionne » n’est pas pratique pour diagnostiquer… 😉 Le programme n’affiche rien ? Il ne s’exécute pas ? S’il y a une erreur, quel est le message ?

    S’il s’agit d’ajouter des éléments à une liste plutôt que de les afficher dans la fenêtre Exécution, AddItem devrait faire l’affaire (version récente d’Access requise). En gros, il faudra remplacer la ligne Debug.Print du programme ci-dessus par le AddItem qui va bien.

  19. Vaucluse Immo dit :

    Bonjour, je viens d’essayer le code ci dessous sous access 2002 mais rien ne fonctionne , pouvez-vous m’indiquez plus précisément , comment faire
    J’aimerais pouvoir afficher le contenu trouvé dans une ListBox >Access sur formulaire
    Merci
    Cordialement
    Sub ContenuDuDossier(ByVal strDossier As String)
    ‘ Vérifier que le dossier existe bien
    If Dir(strDossier, vbDirectory) = «  » Then
    MsgBox « Dossier introuvable ! », vbExclamation
    Exit Sub
    End If

    ‘ Lister tous les fichiers du dossier
    strFichier = Dir(strDossier, vbNormal)
    While strFichier <> «  »
    ‘ Afficher le nom du fichier
    Debug.Print strFichier

    ‘ Lire le fichier suivant
    strFichier = Dir
    Wend
    End Sub

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *