Une table dynamique

Cet exemple générera une table dynamique, avec une ligne ajoutée pour chaque enregistrement joint (voir ci-dessous pour une illustration).

Dans cet exemple nous avons un tableau avec une ligne et trois colonnes :

Tableau

Le code pour cet exemple est :

Private Sub Document_Open()
   ' 
' Installer la source de données et lancer la fusion
Set MainDocument = ActiveDocument
With ActiveDocument.MailMerge
.MainDocumentType = wdFormLetters
.OpenDataSource _
Name:="", _
connection:="DSN=EMu Loans;", _
SQLStatement:="SELECT * FROM eloans.csv", _
Subtype:=wdMergeSubTypeWord2000
.Destination = wdSendToNewDocument
.Execute Pause:=False
End With

 

Dim key As String
Dim row As Integer
Dim table As Word.table
Dim connection As New ADODB.connection
Dim recordset As New ADODB.recordset
   ' 
' Connecter au DSN que nous allons utiliser
connection.Open "DSN=EMu Loans;"
   ' 
' Ce code vérifie chaque tableau que nous avons ajouté au document Word pour le peupler avec les données.
' avec les données. Dans cet exemple nous avons un seul tableau.
For i = 1 To ActiveDocument.Tables.Count
With ActiveDocument.Tables(i)
           ' 
' Copier et modifier la section "If" suivante du code (entre les déclarations If et
' End If) pour chaque fichier .csv généré.
If InStr(.Cell(1, 1).Range.Text, "IRN") = 1 Then
               ' 
' Identifier la clé – dans ce cas localiser dans ligne 1, colonne 2
key = .Cell(1, 2).Range.Text
key = Trim(Left(key, Len(key) - 2))
               ' 
' Nous voulons afficher les NEI et Données sommaires.
' Puisque le nombre d’enregistrements Catalogue joint est inconnu, nous utilisons le
' code suivant pour ajouter dynamiquement une ligne pour chaque enregistrement.
row = 1
               ' 
' Vous remplacerez le nom du fichier .csv et la clé comme nécessaire
' pour votre rapport.
' Dans cet exemple le fichier .csv est appelé ObjObjec.csv
' et la clé est eloans_key
recordset.Open "select * from ObjObjec.csv where eloans_key = " & key, connection
While Not recordset.EOF
row = row + 1
.Rows.Add
.Cell(row, 1).Range.Text = recordset("irn")
.Cell(row, 3).Range.Text = recordset("SummaryData")
recordset.MoveNext
Wend
recordset.Close
               ' 
' Enlever la colonne contenant la clé pour qu’elle ne s’affiche
' dans le rapport de publipostage
.Columns(2).Select
Selection.Columns.Delete
   
' Enlever les bordures du tableau
.Borders.Enable = False
   
End If
End With
Next i
   ' 
' Fermer les connections
connection.Close
   ' 
' Forcer tous les champs à être mis à jour dans le cas où nous avons des images
ActiveDocument.Fields.Update
' MainDocument.Close SaveChanges:=False
End Sub
Private Sub Document_Close()
'  Lorsque le document est fermé, nous devons déconnecter la
'  source de données, sinon Word tentera de l’utiliser
'  à l’ouverture du document
ActiveDocument.MailMerge.MainDocumentType = wdNotAMergeDocument
ActiveDocument.Save
End Sub

L'éditeur Microsoft Visual Basic apparaît semblable à :

Code pour tableau dynamique

  1. Sauvegarder et fermer le document de rapport principal.
  2. À l'étape 1. Écrire le code VB nous avions modifié le code VB en le commentant dans le but de faire un test MainDocument.Close SaveChanges:=False. Avant de pouvoir finaliser le rapport, nous devons éditer le code VB pour supprimer l'apostrophe.

    Lorsque le rapport est exécuté, le rapport de publipostage suivant sera généré avec une ligne ajoutée au tableau Objets pour chaque objet associé :

    Rapport de publipostage