formateur informatique

Consolider les données Access dans Word en VBA

Accueil  >  Bureautique  >  Access  >  Access VBA  >  Consolider les données Access dans Word en VBA
Livres à télécharger


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


Inscription Newsletter    Inscription Newsletter
Sujets que vous pourriez aussi aimer :


Consolider les données Access dans Word

Le volet précédent nous avait appris à exporter les données d'une table Access dans un tableau d'un nouveau document Word. Cette nouvelle astuce va démontrer comment consolider les données en exportant les informations d'une autre table, à la suite des précédentes exportations, dans le tableau Word déjà construit.



Base de données Access à télécharger
Pour ce nouveau développement, il est opportun d'appuyer l'étude sur les travaux précédents. Vous le constatez, la décompression livre le fichier de la base de données, accompagné d'un sous dossier nommé export. Celui-ci est encore vide pour l'instant. C'est lui quoi doit accueillir le document Word destiné à réceptionner les exportations Access.
  • Double cliquer sur le fichier de la base de données pour l'ouvrir dans Access,
  • Cliquer alors 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,
Formulaire Access pour exporter à la suite dans un tableau Word

Ainsi, nous exécutons le formulaire Access. Nous le connaissons déjà. Une liste déroulante propose de choisir parmi l'une des tables à exporter depuis cette base de données. Un clic sur le bouton Exporter doit insérer les données de la table désignée dans les cellules d'un tableau Word. Mais ce mode d'exportation doit désormais varier en fonction de la case qui est cochée en-dessous de la liste déroulante. Lorsque la deuxième case est cochée, ces informations doivent être exportées dans un tableau d'un nouveau document Word. Lorsque la première case est cochée, l'exportation doit se poursuivre dans le document Word existant, à la suite des données déjà insérées dans les lignes de son tableau. C'est tout l'enjeu de ce volet et ce groupe de case d'options se nomme mode.

Ouvrir un document existant
L'objectif de ce sujet consiste à adapter le code du développement précédent qui avait permis d'exporter les données d'une table Access dans un tableau d'un nouveau document Word. Désormais, si la première case est cochée, ce document doit être ouvert pour poursuivre l'exportation.
  • 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,
De cette manière, nous basculons dans l'éditeur VBA Access entre les bornes de la procédure événementielle exporter_Click.

Nous récupérons tout d'abord le nom de la table choisie et construisons le chemin d'accès au fichier Word à créer ou à ouvrir :

nomTable = listeTables.Value
nomF = CurrentProject.Path & "\export\donnees.docx"


Ensuite, nous initialisons les objets pour piloter les enregistrements de la base de données en cours :

Set base = CurrentDb()
Set enr = base.OpenRecordset(nomTable)
Set table = base.TableDefs(nomTable)


Puis, nous créons une nouvelle instance de Word, pour l'instant pour pouvoir insérer des données dans un nouveau document. Et c'est précisément sur les lignes de code qui suivent que la première adaptation doit intervenir. Si la première case est cochée, il n'est pas question d'exporter dans un nouveau document. Il est question d'exporter à la suite dans le document existant.
  • Adapter les lignes de code qui suivent de cette manière :
If(mode = 2) Then
instanceW.Documents.Add DocumentType:=wdNewBlankDocument
instanceW.Selection.PageSetup.Orientation = wdOrientLandscape
instanceW.Selection.Tables.Add instanceW.Selection.Range, 1, 4, wdWord9TableBehavior
compteL = 1
Else
instanceW.Documents.Open nomF
compteL = instanceW.ActiveDocument.Tables(1).Rows.Count
End If


Si la seconde case est cochée (If (mode = 2) Then), nous conservons le code VBA précédent. Il crée un nouveau tableau de quatre colonnes dans un nouveau document Word. Dans le cas contraire, nous exploitons la méthode Open de la collection VBA Word Documents pour ouvrir le fichier (nomF) de l'exportation précédente. Et grâce à la propriété Count de la collection Rows de l'objet Tables, nous stockons le nombre de lignes de ce tableau dans la variable compteL. C'est elle qui indique à partir de quelle ligne l'inscription des données doit se faire. Grâce à ce renseignement, nous allons pouvoir insérer des nouvelles lignes après la dernière, dans le tableau existant.

Grâce à ce subterfuge, nous ne touchons pas aux deux boucles qui suivent. La boucle For Each permet de créer les entêtes du tableau Word avec les noms des champs de la table Access. La boucle Do permet de parcourir les enregistrements et de les insérer à la suite. Dans le cas d'un nouveau document, l'exportation démarre après la ligne d'entête. Dans le cas d'une consolidation, l'insertion reprend à partir de la dernière ligne existante, grâce à cette variable compteL réajustée. En effet, à chaque passage dans cette boucle, c'est la méthode InsertRowsBelow qui est utilisée pour créer une nouvelle ligne dans le tableau, après la dernière :

instanceW.Selection.Tables(1).Cell(compteL,4).Select
instanceW.Selection.InsertRowsBelow 1




Sauvegarder les exportations
Il nous reste cependant un dernier ajustement à opérer. Lorsqu'il s'agit d'une consolidation de données, il n'est plus question d'enregistrer le document Word sous un nom à définir. Il s'agit simplement d'enregistrer le document existant.
  • Sous la boucle Do, adapter la ligne de sauvegarde, comme suit :
If(mode = 2) Then
instanceW.ActiveDocument.SaveAs2 nomF, wdFormatDocumentDefault
Else
instanceW.ActiveDocument.Save
End If


C'est simplement la méthode Save de l'objet ActiveDocument qui permet d'enregistrer les modifications du document en cours.

Exporter la première table
L'adaptation du code VBA Access est déjà terminée. Il est donc temps de tester son bon fonctionnement.
  • Enregistrer les modifications (CTRL + S) et basculer sur le formulaire Access (ALT + Tab),
  • L'exécuter en enfonçant par exemple la touche F5 du clavier,
  • Avec la liste déroulante, choisir la première table (societes1),
  • Puis, cliquer sur le bouton Exporter,
Après quelques secondes de traitement, vous voyez un message de confirmation apparaître.
  • Cliquer sur le bouton Ok pour fermer cette boîte de dialogue,
  • A la racine du dossier de décompression, double cliquer sur le sous dossier export pour l'ouvrir,
Comme vous pouvez le voir, il n'est plus vide. Il accueille un fichier Word assez volumineux, nommé donnees.docx.
  • Double cliquer sur ce fichier pour l'ouvrir dans Word,
Le tableau des exportations apparaît et il est parfaitement construit. Si vous atteignez la dernière page, vous constatez que le tableau se conclut par l'activité nommée La Casa située dans Les Deux Alpes.



Consolider les exportations
Cette remarque est importante. Nous allons voir si nous sommes en mesure de poursuivre l'exportation des nouvelles données précisément à partir de ce point.
  • Fermer le document Word en cliquant sur la croix de sa fenêtre,
  • Revenir sur le formulaire Access,
  • Avec la liste déroulante, choisir la table societes2,
  • Cocher la première case (A la suite),
  • Puis, cliquer de nouveau sur le bouton Exporter,
Exporter à la suite dans un tableau Word en VBA Access

Après le message de confirmation, si vous rouvrez le fichier Word, vous constatez que le tableau s'est considérablement enrichi. Et si vous atteignez la dernière ligne de l'exportation précédente, vous remarquez que les données de la nouvelle table ont parfaitement été consolidées à la suite.

 
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