formateur informatique

Exporter les données Access dans un tableau Word

Accueil  >  Bureautique  >  Access  >  Access VBA  >  Exporter les données Access dans un tableau Word
Livres à télécharger


Pour partager cette vidéo sur les réseaux sociaux ou sur un site, voici son url :


Inscription Newsletter    Abonner à Youtube    Vidéos astuces Instagram
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.

Formulaire Access pour exporter les données dans Word

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.

Données de table Access à exporter dans Word

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()
Set enr = base.OpenRecordset(nomTable)
Set table = base.TableDefs(nomTable)


Ensuite, nous parcourons tous les champs de cette table pour stocker leurs noms dans un tableau de variables:

For Each champ In table.Fields
champs(compteur) = champ.Name
compteur = compteur + 1
Next


Enfin, nous procédons à la lecture de tous les enregistrements de la table, grâce à une boucle Do :

enr.MoveFirst
Do
compteL = compteL + 1
enr.MoveNext
Loop Until enr.EOF


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,
Référence à Microsoft Word dans le projet VBA Access

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 base As Database: Dim enr As Recordset
Dim nomTable As String: Dim compteur As Integer
Dim nomF As String: Dim champs() As String
Dim compteC As Byte: Dim table As TableDef: Dim champ As Field
Dim compteL As Integer: 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 base = CurrentDb()
Set enr = base.OpenRecordset(nomTable)
Set table = base.TableDefs(nomTable)

Set instanceW = CreateObject("Word.Application")
instanceW.Visible = False
instanceW.Documents.Add DocumentType := wdNewBlankDocument
instanceW.Selection.PageSetup.Orientation = wdOrientLandscape
instanceW.Selection.Tables.Add instanceW.Selection.Range, 1, 4, wdWord9TableBehavior

...


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 :
...
For Each champ In table.Fields
If (compteur > 0 And compteur < 5) Then
champs(compteur) = champ.Name
instanceW.Selection.Tables(1).Cell(1, compteur).Range.Text = champ.Name
End If

compteur = compteur + 1
Next
...


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 :
...
enr.MoveFirst
Do
instanceW.Selection.Tables(1).Cell(compteL, 4).Select
instanceW.Selection.InsertRowsBelow 1
For compteur = 1 To 4
instanceW.Selection.Tables(1).Cell(compteL + 1, compteur).Range.Text = enr.Fields(champs(compteur)).Value
Next compteur

compteL = compteL + 1
enr.MoveNext
Loop Until enr.EOF
...


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 :
...
Next compteur
compteL = compteL + 1
enr.MoveNext
Loop Until enr.EOF

instanceW.ActiveDocument.SaveAs2 nomF, wdFormatDocumentDefault
instanceW.Quit
Set instanceW = Nothing


MsgBox "L'exportation de la table dans Word est terminée.", vbInformation
...


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,
Données Access exportées dans un tableau Word par le code VBA

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.

 
Sur Facebook
Sur Youtube
Les livres
Contact
Mentions légales



Abonnement à la chaîne Youtube
Partager la formation
Partager sur Facebook
Partager sur Twitter
Partager sur LinkedIn