Pour partager cette vidéo sur les réseaux sociaux ou sur un site, voici son url :
Sujets que vous pourriez aussi aimer : 
Exporter dans un tableau Word 
Au cours des précédentes astuces, nous avons découvert différentes techniques pour 
exporter les données de tables Access . Notamment, nous avons appris à exporter les informations dans une 
feuille Excel  à la suite des précédentes exportations.
Ici, nous souhaitons réaliser l'
exportation des données Access dans un tableau  d'un 
nouveau fichier Word . L'enjeu est donc le suivant : Il consiste tout d'abord à piloter une 
instance de Word  par le 
code VBA Access . Sur cette nouvelle instance, il est ensuite question de 
créer un tableau . Puis, pour 
chaque enregistrement  parcouru dans la 
table Access , les 
informations des champs  doivent être introduites dans les 
colonnes distinctes de ce tableau .
Base de données Access à télécharger 
Pour réaliser ces travaux, nous proposons de partir d'une 
base de données  hébergeant un 
formulaire  accueillant déjà un 
code VBA Access  parcourant les 
enregistrements de tables .
Comme vous le constatez, la décompression livre le 
fichier de la base de données  accompagné d'un 
sous dossier . Nous exploiterons ce dernier pour y réaliser les 
exportations Word .
Double cliquer sur le fichier de base de données  pour l'ouvrir dans Access , 
Cliquer ensuite sur le bouton Activer le contenu du bandeau de sécurité, 
Dans le volet de navigation  sur la gauche, double cliquer sur le formulaire fExport , 
Ainsi, nous l'exécutons.
Une 
liste déroulante  permet de choisir l'une des tables de la base de données. C'est un 
code VBA Access  qui se déclenche au 
chargement du formulaire  pour 
parcourir toutes les tables  et ainsi remplir cette liste de choix de leurs noms. Dès lors, un clic sur le 
bouton Exporter  doit permettre de reconstruire tous les enregistrements de la table désignée dans un 
tableau  d'un 
nouveau fichier Word . Ces tables sont les suites logiques les unes des autres. Elles sont toutes architecturées de la même façon.
Dans le volet de navigation, double cliquer sur la table societes1 , 
De cette manière, nous affichons son contenu en mode 
feuille de données .
Ces tables énumèrent des activités de sorties dans différents départements de France. Nous souhaitons extraire les informations de 
tous les enregistrements  du 
champ societes_nom  au 
champ societes_ville . Il est donc question d'exclure la clé primaire de l'exportation (societes_id) et le dernier champ (societes_cp). Nous devons donc récolter les informations du 
champ numéro 1  au 
champ numéro 4 . L'énumération débute par le champ numéro 0 comme vous le savez. C'est un 
tableau de quatre colonnes  que nous devons créer sur le 
nouveau document Word , pour accueillir ces données.
Le code VBA de lecture des données 
Nous l'avons dit, le 
code VBA de lecture des enregistrements  est déjà associé au 
bouton Exporter . Etant donné que nous l'avons développé à l'occasion de plusieurs astuces précédentes, il serait dommage de le refaire une énième fois. Ainsi, nous allons pouvoir focaliser l'étude sur la 
technique d'exportation de ces données  dans un 
tableau  d'un 
nouveau document Word . Nous proposons néanmoins de le survoler pour le commenter rapidement.
Fermer la table societes1  en cliquant sur la croix de son onglet, 
A gauche du ruban Accueil, cliquer sur la flèche du bouton Affichage , 
Dans les propositions, choisir le mode Création , 
Sur le formulaire en conception, cliquer sur le bouton Exporter  pour le sélectionner, 
Dès lors, activer l'onglet Evénement  de sa feuille de propriétés , 
Puis, cliquer sur le petit bouton associé à son événement Au clic , 
Comme un 
code VBA  lui est déjà attaché, nous basculons directement dans l'
éditeur VBA Access , entre les bornes de la 
procédure événementielle exporter_Click .
Tout d'abord, nous récupérons le 
nom de la table  choisie en 
variable  (nomTable = listeTables.Value). Nous définissons le 
chemin d'accès du fichier Word  à créer dans le 
sous dossier export  de l'
application locale  (nomF = CurrentProject.Path & "\export\donnees.docx"). Puis, nous initialisons les 
objets de base de données , pour pouvoir 
piloter les enregistrements de cette table  désignée dans la 
base de données en cours  :
Set base = CurrentDb() 
Ensuite, nous parcourons 
tous les champs de cette table  pour stocker leurs noms dans un 
tableau de variables :
For Each champ In table.Fields 
Enfin, nous procédons à la 
lecture de tous les enregistrements de la table , grâce à une 
boucle Do  :
enr.MoveFirst 
La variable de l'instance et sa référence 
Pour 
créer un nouveau document Word  et l'implémenter avec les 
données à exporter , nous avons besoin de 
déclarer un objet  représentant l'une de ses 
instances . Mais pour que cet objet hérite de toutes les 
propriétés et méthodes  utiles, nous avons besoin d'ajouter la 
librairie  faisant référence à 
Word  dans le projet.
En haut de l'éditeur VBA Access , cliquer sur le menu Outils , 
Dans les propositions, choisir l'option Références , 
Dans la boîte de dialogue, cocher la case Microsoft Word 16.0 Object Library , 
Le numéro (16.0) dépend de votre version d'Office. 
Cliquer alors sur le bouton Ok pour revenir sur la feuille de code, 
Dans la partie déclarative de la procédure, créer l'objet suivant : Private Sub exporter_Click(): Dim instanceW As Object  
C'est lui qui doit représenter l'instance de Word. Nous le déclarons comme un objet au sens large (Object). Il prendra son type au moment de l'affectation.
Créer l'instance de Word et son tableau 
Et précisément, c'est maintenant que nous devons 
instancier la classe de Word  pour que cet objet hérite des propriétés et méthodes lui permettant de manipuler un 
nouveau document . Pour cela et comme nous en avons l'habitude, nous allons exploiter la 
fonction VBA CreateObject .
Sous les objets de base de données , ajouter les initialisations  suivantes : ...Set instanceW = CreateObject("Word.Application")  
Grâce au 
paramètre Word.Application  passé à la 
fonction CreateObject , nous 
instancions la classe de Word . De fait, l'
objet instanceW  ainsi initialisé (Set), hérite de ses propriétés et méthodes. Et pour preuve, dans l'enchaînement, nous exploitons sa 
propriété Visible  que nous réglons à 
False . Nous ne souhaitons pas voir apparaître de 
fenêtre de Word . Nous voulons que ce 
processus d'exportation  se réalise en 
tâche de fond . Dès lors, nous exploitons la 
propriété Add  de sa 
collection Documents  pour 
créer un nouveau document Word , grâce à la 
valeur wdNewBlankDocument  passée en paramètre. Ensuite, nous faisons un 
réglage de mise en page  pour une 
orientation paysage  (wdOrientLandscape) afin de pouvoir disposer confortablement toutes les informations de champs les unes à côté des autres. C'est alors que nous exploitons la 
méthode Add  de la 
collection Tables  de l'
objet Selection  pour 
créer un nouveau tableau . L'
objet Selection  désigne la 
sélection active . Dans un 
nouveau document , il pointe tout en haut de la page puisque rien n'a encore été créé. Nous fabriquons un 
tableau d'une ligne et de quatre colonnes  (1,4) avec des 
bordures  (wdWord9TableBehavior). Les lignes manquantes, nous les ajouterons au coup par coup comme nous avons appris à le faire au travers de la 
formation pour remplir la facture en VBA Word .
Inscrire la ligne d'entêtes 
Maintenant que le 
document Word  et son 
tableau  sont créés, nous devons les enrichir. Et pour cela, nous devons commencer par inscrire les 
noms de champs  en 
première ligne du tableau  pour reconstituer les 
entêtes des enregistrements . Nous devons intervenir au niveau de la 
boucle For Each  qui suit dans ce 
code VBA . Elle récolte précisément les 
noms de ces champs  dans un 
tableau de variables .
Adapter la boucle For Each  existante comme suit : ...If (compteur > 0 And compteur < 5) Then instanceW.Selection.Tables(1).Cell(1, compteur).Range.Text = champ.Name  
Le double critère de l'
instruction conditionnelle  consiste à ignorer le premier et le dernier champ, comme nous l'avons annoncé. Ensuite, grâce à l'
objet Selection  de l'
instance Word , nous exploitons sa 
collection Tables  pour désigner le premier tableau (1) dans ce document. En effet, nous n'avons créé qu'un seul tableau. Puis, nous pointons sur les cellules respectives de la première ligne (1), grâce à l'
objet Cell . C'est la 
variable compteur  qui permet de décaler l'inscription des 
noms de champs  (champ.Name) dans les colonnes voisines, en partant de la première.
Exporter les données de chaque enregistrement 
Désormais, c'est la 
boucle Do  qui suit que nous devons enrichir. Elle parcourt déjà toutes les données de chaque enregistrement de la table désignée par l'utilisateur. Ces informations, nous devons les ajouter à la suite dans le tableau pour lequel nous avons pour l'instant seulementre constitué la ligne d'entête. A chaque 
nouvel enregistrement Access , nous devons commencer par 
créer une nouvelle ligne  dans le 
tableau Word  pour accueillir ses informations.
Adapter le code VBA  de la boucle Do  comme suit : ...instanceW.Selection.Tables(1).Cell(compteL, 4).Select  
A chaque passage, en commençant par le premier, nous nous plaçons sur la 
dernière colonne  de la 
ligne en cours  dans le 
tableau  (Cell(compteL, 4)). C'est ainsi dans l'enchaînement que nous pouvons 
insérer une nouvelle ligne  (instanceW.Selection.InsertRowsBelow 1), comme nous le ferions avec la souris. Dès lors, nous parcourons les 
quatre champs  de l'
enregistrement en cours  (For compteur = 1 To 4). Et nous les inscrivons tour à tour dans leurs colonnes respectives (Cell(compteL + 1, compteur)), grâce à la 
variable compteL  qui pointe sur la 
nouvelle ligne  et grâce à la 
variable compteur  qui s'incrémente automatiquement dans cette boucle, pour désigner tour à tour les 
colonnes correspondantes .
Enregistrer les exportations au format Word 
Une fois ce traitement opéré, donc une fois que tous les enregistrements ont été passés en revue, nous devons 
enregistrer le document Word  pour 
sauvegarder ce tableau des exportations . Ce sont des techniques que nous avons écumées depuis que nous avons appris ensemble à 
programmer en VBA Word .
Après la boucle Do, ajouter les trois instructions VBA suivantes : ...instanceW.ActiveDocument.SaveAs2 nomF, wdFormatDocumentDefault  
Grâce à la 
méthode SaveAs  de l'
objet ActiveDocument  qui désigne le 
document Word en cours , nous enregistrons le travail sous le nom (nomF) que nous avions reconstruit en début de code. Et cette sauvegarde, nous la faisons au format Word classique (wdFormatDocumentDefault). Puis, nous fermons (Quit) et détruisons (Set Nothing) la 
variable de l'instance Word  pour libérer la mémoire de l'ordinateur.
Exportation dans le tableau Word 
Il ne nous reste plus qu'à tester le 
code VBA Access  et à être quelque peu patient pendant le déroulement du processus car les enregistrements sont nombreux. Donc, les lignes à construire sur le 
document Word  le sont tout autant. Pour agrémenter l'attente, nous aurions d'ailleurs pu ajouter une 
barre de progression  sur le 
formulaire Access . Mais ça, nous avons également déjà appris à le faire.
Enregistrer les modifications (CTRL + S) et basculer sur le formulaire (ALT + Tab), 
L'exécuter en enfonçant par exemple la touche F5 du clavier , 
Avec la liste déroulante, choisir la table societes1 , 
Puis, cliquer sur le bouton Exporter , 
Le 
processus d'extraction et d'exportation  prend quelques secondes. Mais à l'issue, le message de confirmation commandité par la 
fonction VBA MsgBox  apparaît. Tout semble s'être parfaitement déroulé.
Cliquer sur le bouton Ok de la boîte de dialogue pour la fermer, 
Dans l'explorateur Windows, ouvrir le sous dossier export  du dossier de décompression, 
Vous notez la présence d'un 
fichier Word  nommé donnees.docx et relativement volumineux.
Double cliquer sur ce fichier pour l'ouvrir dans Word , 
Comme vous pouvez le constater avec satisfaction, toutes les données de 
chaque enregistrement  de la 
table Access  ont été parfaitement exportées et scrupuleusement rangées dans les 
bonnes colonnes  du 
tableau Word .