Préambule
Le but de cet article n'est pas de vous apprendre à construire un publipostage manuellement entre Word et Access. Nous supposons que vous connaissez déjà la technique.
Il sera par contre question ici d'automatiser le tout en Visual Basic. L'idée : le débutant clique sur un bouton, dans sa base Access ; le bouton démarre Word, ouvre la lettre type, déclenche la fusion automatiquement, et arrête tout ça proprement :-). A la limite, il n'est pas même pas utile de voir Word pendant le processus !
Spécial Word 2003
Attention : le code proposé dans cet article s'applique spécifiquement à Word 2003. Principalement parce que la technique a changé sensiblement depuis cette version, et que c'est du coup l'un des problèmes rencontrés les plus fréquemment sur cette version.
Références
Le code emploie des références explicites aux objets Word 2003. Vous devez avoir coché la bibliothèque Microsoft Word 11.0 dans le menu Outils/Références de Visual Basic Editor.
Exemple 1 : mise en place
Dans cet exemple, la fusion est laissée visible à l'écran, de façon à vous permettre de tester plus facilement. Recopiez la procédure ci-dessous dans un module standard, et aménagez-la comme il faut :
- Modifiez la variable strCheminDoc pour qu'elle pointe vers votre lettre type Word (supposée exister, donc).
- Modifiez l'instruction SQL chargée d'extraire les données de votre base Access (dans notre exemple, une table tblPersonnes liste les adresses de destinataires).
Important
Après avoir recopié, aménagé le code VB, pensez impérativement à enregistrer le module (et ce, après toute modification). Sinon, la base Access sera verrouillée en mode Création, donc mode Exclusif, et le publipostage ne pourra pas exécuter la requête SQL.
- ' ---
- ' PUBLIPOSTAGE AVEC WORD 2003
- ' ---
- ' Le résultat de la fusion reste affiché
- ' à l'écran.
- '
- Sub Publipostage()
- Dim wdApp As Word.Application
- Dim strCheminDoc As String
- Dim strSQL As String
- ' Chemin du document Word à ouvrir
- strCheminDoc = "C:\Documents and Settings\Hervé\Mes documents\courrier.doc"
- ' Instruction SQL permettant d'extraire les clients
- strSQL = "SELECT * FROM [tblPersonnes]"
- ' Démarrer Word
- Set wdApp = New Word.Application
- With wdApp
- ' Rendre Word visible pour faciliter la mise au point
- .Visible = True
- ' Ouvrir le document de publipostage
- .Documents.Open strCheminDoc
- ' Paramétrer le publipostage
- With .ActiveDocument.MailMerge
- .OpenDataSource Name:=CurrentProject.FullName, _
- SQLStatement:=strSQL, _
- ReadOnly:=True
- ' Diriger le publipostage vers un nouveau document
- ' plutôt que vers l'imprimante
- .Destination = wdSendToNewDocument
- ' Lancer la fusion
- .Execute
- End With
- End With
- ' Fermer et libérer les objets
- Set wdApp = Nothing
- End Sub
Exemple 2 : fusion dans un document
Dans ce second exemple, Word est utilisé comme sous-traitant, il n'apparaît plus à l'écran. Le résultat du publipostage est stocké automatiquement dans un texte Word nommé fusion.doc (aménagez le listing à votre convenance, comme d'habitude !).
- ' ---
- ' PUBLIPOSTAGE AVEC WORD 2003
- ' ---
- ' Le résultat de la fusion est sauvegardé
- ' dans un document.
- '
- Sub Publipostage_Vers_Document()
- Dim wdApp As Word.Application
- Dim strCheminDoc As String, strCheminFusion As String
- Dim strSQL As String
- ' Chemin du document Word à ouvrir
- strCheminDoc = "C:\Documents and Settings\Hervé\Mes documents\courrier.doc"
- ' Chemin du document Word à créer (résultat de la fusion)
- strCheminFusion = "C:\Documents and Settings\Hervé\Mes documents\fusion.doc"
- ' Instruction SQL permettant d'extraire les clients
- strSQL = "SELECT * FROM [tblPersonnes]"
- ' Démarrer Word
- Set wdApp = New Word.Application
- With wdApp
- ' Ouvrir le document de publipostage
- .Documents.Open strCheminDoc
- ' Paramétrer le publipostage
- With .ActiveDocument.MailMerge
- .OpenDataSource Name:=CurrentProject.FullName, _
- SQLStatement:=strSQL, _
- ReadOnly:=True
- ' Diriger le publipostage vers un nouveau document
- ' plutôt que vers l'imprimante
- .Destination = wdSendToNewDocument
- ' Lancer la fusion
- .Execute
- End With
- ' Sauvegarder le document fusionné
- .ActiveDocument.SaveAs Filename:=strCheminFusion
- ' Quitter Word
- .Quit SaveChanges:=wdDoNotSaveChanges
- End With
- ' Libérer les objets
- Set wdApp = Nothing
- End Sub
Exemple 3 : impression directe
Cette fois, le publipostage est dirigé vers l'imprimante automatiquement (Word ne s'affiche pas non plus à l'écran).
- ' ---
- ' PUBLIPOSTAGE AVEC WORD 2003
- ' ---
- ' Le résultat de la fusion est directement imprimé.
- '
- Sub Publipostage_Vers_Imprimante()
- Dim wdApp As Word.Application
- Dim strCheminDoc As String
- Dim strSQL As String
- ' Chemin du document Word à ouvrir
- strCheminDoc = "C:\Documents and Settings\Hervé\Mes documents\dummy.doc"
- ' Instruction SQL permettant d'extraire les clients
- strSQL = "SELECT * FROM [tblPersonnes]"
- ' Démarrer Word
- Set wdApp = New Word.Application
- With wdApp
- ' Ouvrir le document de publipostage
- .Documents.Open strCheminDoc
- ' Paramétrer le publipostage
- With .ActiveDocument.MailMerge
- .OpenDataSource Name:=CurrentProject.FullName, _
- SQLStatement:=strSQL, _
- ReadOnly:=True
- ' Diriger le publipostage vers un nouveau document
- ' plutôt que vers l'imprimante
- .Destination = wdSendToPrinter
- ' Lancer la fusion
- .Execute
- End With
- ' Quitter Word
- .Quit SaveChanges:=wdDoNotSaveChanges
- End With
- ' Libérer les objets
- Set wdApp = Nothing
- End Sub
Conseil
Les portions de code sont présentées ici sous forme de procédures (Sub) sans paramètres. Vous pouvez bien sûr améliorer le tout en les transformant en procédures paramétrées.


Dans cet article...
Article mis à jour le 07/02/2009