Stocker tous les fichiers d’un répertoire dans une table Access

Tout est dans le titre ! La question m’a été posée plusieurs fois sur le blog, pour faire suite à l’article Lister tous les fichiers d’un répertoire. Voici donc un petit bout de code qui s’occupera de stocker tous les fichiers d’un dossier dans une table Access.

Un peu de préparation

Tout d’abord, on a besoin d’une table pour stocker les fichiers (ça va aider, pour répondre à la question ! 🙂 ). La mienne est très simple :

  • Un champ Numéro Fichier, de type NuméroAuto (donc géré automatiquement dans la suite).
  • Un champ Fichier, de type Texte / 255 caractères, pour stocker le nom des fichiers (ou leur chemin).

La table s’appelle tbl Fichiers.

Liste de fichiers dans une table Access

Le code

Recopiez ce qui suit dans un module standard de votre base de données.

Attention
Le code utilise la fonction AddBackslash(), que vous trouverez dans cet autre article, et que vous devez aussi recopier dans un module de votre base (pourquoi pas le même module).

Tester !

La procédure ListerFichiers reçoit 4 paramètres, les 3 derniers étant optionnels :

  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.

Voici par exemple comment stocker tous les fichiers (chemins complets) d’un dossier quelconque :

Et voici comment cumuler toutes les images Web (JPG, PNG et GIF) d’un dossier, en vidant la table la première fois :

Info
Cette procédure liste uniquement les fichiers du dossier donné. Elle n’explore pas les sous-dossiers. Ça pourra faire l’objet d’un prochain article… 😉
EDIT: L’exploration des sous-dossiers est disponible sur cet article.

Vous aimerez aussi...

13 réponses

  1. Maria F dit :

    Bonjour,
    Merci pour cette page qui m’a beaucoup aidée.
    Par contre, le lien vers la fonction AddBackslash() ne fonctionne pas. Certainement une conséquence du crash que vous avez subi.

  2. Maria dit :

    Bonjour,
    Je suis débutante en VBA, et après avoir recopier ce code, j’ai une erreur de type: Erreur d’exécution ‘424’: Objet requis ligne 28 c’est à dire à la ligne suivante:
    CurrentDb.Execute « DELETE FROM [ » & TABLE_FICHIERS & « ]; »

    Pouvez-vous m’aider svp ?

    Merci d’avance

  3. HenGin dit :

    Bonjour,
    Mrci de cet exemple d’un grand intéret, je souhaiterais mettre un champ textuel et ne parviens pas a faire évoluer votre code. Vous avez mentionné qu’il faudrai le changer en plusieurs endroits vous est il possible de m’aiguiller ? merci ! HenGin

  4. ça marche et les commentaires sont didactiques, comme d’habitude. Très utile pour un éternel faux-débutant en VBA. Un grand merci, Hervé !

  5. Benoit dit :

    Merci pour le code, mais je bute maintenant sur plusieurs sous répertoires. Comment le faire de façon automatique et ne pas avoir a modifier le code a chaque sous répertoire?

  6. Hervé Inisan dit :

    oneill > Les fonctions de fichiers d’Access gèrent uniquement des accès locaux (poste de travail ou réseau local). Par contre, elles n’accèdent pas à un serveur Web distant. Il faudrait donc soit connecter le serveur au réseau local, pour que l’accès soit transparent, soit passer par des bibliothèques externes permettant de lire des fichiers distants. Dans les 2 cas, ça peut être compliqué… 😉

  7. oneill dit :

    Bonjour,
    Je souhaite mettre les photos d’utilisateurs dans un formulaire et stocker les liens vers les images dans une table.
    Simplement le dossier des images se trouve sur un serveur internet et non sur un réseau interne d’entreprise.
    j’ai créé un champ text qui pointe vers le champ de la table contenant les liens vers les photos mais lorsque le formulaire s’affiche, access n’arrive pas à ouvrir le fichier pour l’afficher.
    comment puis-je faire pour que les photos présentes dans le dossier web s »affichent dynamiquement pour chaque fiche ?
    Merci
    Oneill

Laisser un commentaire

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