Lister les pièces jointes Access 2007 en VBA

Dans l’article Gérer les pièces jointes avec Access 2007, vous avez vu comment stocker des pièces jointes dans un fichier Access 2007 au format ACCDB. Voici comment obtenir la liste de ces pièces jointes en VBA.

Le scénario

Je dispose d’une table tbl Clients dont voici la structure :

Quelques données dans la table :

Le client n°2 est associé à plusieurs pièces jointes, stockées dans le champ Documents (2 étant la valeur de la clef primaire [Numéro Client] qui identifie le client).

Premier test

  • D’une part, la liste des clients peut être obtenue par un Recordset.
  • D’autre part, il y a une relation de « 1 à plusieurs » entre le client et ses pièces jointes (« 1 client peut avoir plusieurs pièces jointes), Access gère donc la liste des pièces jointes comme une autre table. Concrètement, si [tbl Clients].Documents est le champ de type Pièce jointe, dans la table tbl Clients, la valeur de ce champ – [tbl Clients].Documents.Value – est un nouveau Recordset qui fournit la liste des pièces jointes.

Voici un petit test pour le vérifier :

  • rst1 est un Recordset qui nous permet de nous positionner sur le client numéro 2 (voir la chaîne SQL qui sert à ouvrir le Recordset).
  • Une fois positionné sur le bon client, on ouvre un 2ème Recordset, obtenu par la valeur (Value) du champ Documents.
  • Il ne reste plus qu’à parcourir le 2ème Recordset en boucle, pour obtenir le nom (Filename) de chaque pièce jointe.

Pour tester ce bout de code, ouvrez la fenêtre de debug (CTRL + G), et tapez-y :
TestPJ et appuyez sur la touche [Entrée].
Vous pouvez aussi placer votre curseur dans le bloc de code VBA, et cliquer sur l’icône Exécuter Sub/UserForm.

Vous obtiendrez par exemple :

Un encore meilleur code 🙂

On peut maintenant généraliser le code précédent, pour pouvoir lister les pièces jointes de n’importe quelle table et de n’importe quel champ. Ce qui donne :

Tester le code

La procédure VBA doit recevoir 3 paramètres :

  • Le nom de la table concernée.
  • le nom du champ qui contient les pièces jointes (un champ de type Pièce jointe, donc).
  • une clause SQL WHERE valide, qui va permettre d’extraire un enregistrement précis (et unique). Sans doute un filtre sur la clef primaire de la table…

Par exemple :

Vous aimerez aussi...

Laisser un commentaire

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