Lister les fichiers d’un dossier et de ses sous-dossiers

Dans un article précédent intitulé Stocker tous les fichiers d’un répertoire dans une table Access, on a pu voir comment parcourir tous les fichiers d’un dossier, et stocker leur nom ou leur chemin complet dans une table de votre base de données.

Il était bien précisé dans l’article que l’exploration du dossier ne tenait pas compte de ses sous-dossiers. Dans ce nouvel article, on va lister les fichiers d’un dossier et de ses sous-dossiers, sur autant de niveaux de profondeur que nécessaire.

Mise en place

Le principe consiste donc à parcourir une arborescence inconnue de dossiers : on sait de quel dossier on part, mais pas du tout quels sont les sous-dossiers imbriqués. Il va donc falloir utiliser une fonction récursive. Là-dessus se greffe une limitation de VBA 🙁 : les appels de la fonction Dir ne peuvent pas être imbriqués. Avant de commencer, vous devez donc recopier les fonctions suivantes (traitées dans d’autres articles), dans un module standard de votre base…

  1. La fonction AddBackslash()
  2. La fonction CompterSousDossiers()
  3. La fonction ListerSousDossiers()

Lisez aussi l’article Stocker tous les fichiers d’un répertoire dans une table Access pour reprendre la structure de la table où les noms de fichiers seront stockés.

Le code

Le code nécessaire ici est réparti dans 2 procédures : la première est plus globale, et initialise le Recordset qui représentera la table (ceci évite d’ouvrir un nouveau Recordset à chaque dossier parcouru), la seconde s’occupe du parcours récursif. Deux constantes sont également nécessaires, en début de code.

Tester le code

La première procédure ci-dessus, est celle qui déclenche la lecture des dossiers. Elle prend les mêmes 4 paramètres que sa variante non récursive :

  1. Il faut d’abord fournir le chemin du dossier à inspecter. Ce chemin peut se terminer ou non par un anti-slash (ce dernier est de toute façon ajouté automatiquement).
  2. Donnez ensuite l’extension des fichiers à lister. Par défaut, tous les fichiers sont listés (*.*), mais vous pouvez ne lister que les images JPEG (*.jpg).
  3. Le troisième paramètre vaut True si la table cible doit être vidée avant de lister les fichiers, et False sinon. Tout dépend de votre application : est-ce qu’il faut repartir à vide, ou est-ce que vous souhaiter cumuler le résultat de plusieurs listes.
  4. Enfin, le dernier paramètre vaut True s’il faut stocker le chemin complet du fichier (dossier + chemin), ou False s’il faut stocker uniquement le nom du fichier.

Par exemple, pour stocker les noms de toutes les images JPG de votre dossier Images :

Et pour stocker les noms de tous les fichiers de votre dossier Documents (attention : ça peut faire beaucoup !) :

Vous aimerez aussi...

5 réponses

  1. dje dit :

    Bonjour,

    où est la fonction ListerSousDossiers(strDossier) ?

  2. Baptiste dit :

    [EDIT commentaire du 10/07 à 14h43]
    J’ai oublié de préciser que mon principal problème réside visiblement dans les boucles pour parcourir plusieurs dossiers successivement, et aussi dans la fourniture des paramètres (noms des répertoires comme cité précédemment, extensions voulues pour le filtrage) à un invite qui remplace la fourniture en dur des infos ci-dessus dans les 2 procédures de tests ci-dessus.

  3. Baptiste dit :

    Bonjour,

    Comment faire pour lister les fichiers de plusieurs répertoires à la fois et de leurs sous-répertoires, ces fichiers devant être d’un type bien précis (qui doit pouvoir être personnalisable, et faire l’objet d’une boucle lui aussi) ?
    Exemple : j’aimerais parcourir plusieurs répertoires disséminés sur mon disque dur, qui contiennent des sous-répertoires.
    Le tout, en ne remontant (et en n’inscrivant dans ma table Access) que les noms complets (chemin complet + nom fichier complet) de fichiers d’extensions vidéos (MP4, FLV, MKV, etc.), donc en filtrant lesdites extensions.

    Merci par avance

    • Hervé Inisan dit :

      Si les répertoires ne sont pas tous « enfants » d’un même répertoire de départ, il n’y a pas d’autres moyen que d’appeler plusieurs fois la procédure ListerFichiersRec. Par exemple :

      Le False à partir de la 2ème commande fait que la table des fichiers n’est plus vidée (sinon, on perd la liste de fichiers précédente à chaque fois).

Laisser un commentaire

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