Toute l'actualité de [self-access.com] en direct sur votre ordinateur !  Vous êtes ici : Accueil » Access » Tutoriaux » Publipostage automatiséConnexion
 


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.

  1. ' ---
  2. ' PUBLIPOSTAGE AVEC WORD 2003
  3. ' ---
  4. ' Le résultat de la fusion reste affiché
  5. ' à l'écran.
  6. '
  7. Sub Publipostage()
  8. Dim wdApp As Word.Application
  9. Dim strCheminDoc As String
  10. Dim strSQL As String
  11.  
  12. ' Chemin du document Word à ouvrir
  13. strCheminDoc = "C:\Documents and Settings\Hervé\Mes documents\courrier.doc"
  14.  
  15. ' Instruction SQL permettant d'extraire les clients
  16. strSQL = "SELECT * FROM [tblPersonnes]"
  17.  
  18. ' Démarrer Word
  19. Set wdApp = New Word.Application
  20. With wdApp
  21.     ' Rendre Word visible pour faciliter la mise au point
  22.     .Visible = True
  23.    
  24.     ' Ouvrir le document de publipostage
  25.     .Documents.Open strCheminDoc
  26.    
  27.     ' Paramétrer le publipostage
  28.     With .ActiveDocument.MailMerge
  29.         .OpenDataSource Name:=CurrentProject.FullName, _
  30.             SQLStatement:=strSQL, _
  31.             ReadOnly:=True
  32.            
  33.         ' Diriger le publipostage vers un nouveau document
  34.         ' plutôt que vers l'imprimante
  35.         .Destination = wdSendToNewDocument
  36.        
  37.         ' Lancer la fusion
  38.         .Execute
  39.     End With
  40. End With
  41.  
  42. ' Fermer et libérer les objets
  43. Set wdApp = Nothing
  44. 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 !).

  1. ' ---
  2. ' PUBLIPOSTAGE AVEC WORD 2003
  3. ' ---
  4. ' Le résultat de la fusion est sauvegardé
  5. ' dans un document.
  6. '
  7. Sub Publipostage_Vers_Document()
  8. Dim wdApp As Word.Application
  9. Dim strCheminDoc As String, strCheminFusion As String
  10. Dim strSQL As String
  11.  
  12. ' Chemin du document Word à ouvrir
  13. strCheminDoc = "C:\Documents and Settings\Hervé\Mes documents\courrier.doc"
  14.  
  15. ' Chemin du document Word à créer (résultat de la fusion)
  16. strCheminFusion = "C:\Documents and Settings\Hervé\Mes documents\fusion.doc"
  17.  
  18. ' Instruction SQL permettant d'extraire les clients
  19. strSQL = "SELECT * FROM [tblPersonnes]"
  20.  
  21. ' Démarrer Word
  22. Set wdApp = New Word.Application
  23. With wdApp
  24.     ' Ouvrir le document de publipostage
  25.     .Documents.Open strCheminDoc
  26.    
  27.     ' Paramétrer le publipostage
  28.     With .ActiveDocument.MailMerge
  29.         .OpenDataSource Name:=CurrentProject.FullName, _
  30.             SQLStatement:=strSQL, _
  31.             ReadOnly:=True
  32.            
  33.         ' Diriger le publipostage vers un nouveau document
  34.         ' plutôt que vers l'imprimante
  35.         .Destination = wdSendToNewDocument
  36.        
  37.         ' Lancer la fusion
  38.         .Execute
  39.     End With
  40.    
  41.     ' Sauvegarder le document fusionné
  42.     .ActiveDocument.SaveAs Filename:=strCheminFusion
  43.    
  44.     ' Quitter Word
  45.     .Quit SaveChanges:=wdDoNotSaveChanges
  46. End With
  47.  
  48. ' Libérer les objets
  49. Set wdApp = Nothing
  50. 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).

  1. ' ---
  2. ' PUBLIPOSTAGE AVEC WORD 2003
  3. ' ---
  4. ' Le résultat de la fusion est directement imprimé.
  5. '
  6. Sub Publipostage_Vers_Imprimante()
  7. Dim wdApp As Word.Application
  8. Dim strCheminDoc As String
  9. Dim strSQL As String
  10.  
  11. ' Chemin du document Word à ouvrir
  12. strCheminDoc = "C:\Documents and Settings\Hervé\Mes documents\dummy.doc"
  13.  
  14. ' Instruction SQL permettant d'extraire les clients
  15. strSQL = "SELECT * FROM [tblPersonnes]"
  16.  
  17. ' Démarrer Word
  18. Set wdApp = New Word.Application
  19. With wdApp
  20.     ' Ouvrir le document de publipostage
  21.     .Documents.Open strCheminDoc
  22.    
  23.     ' Paramétrer le publipostage
  24.     With .ActiveDocument.MailMerge
  25.         .OpenDataSource Name:=CurrentProject.FullName, _
  26.             SQLStatement:=strSQL, _
  27.             ReadOnly:=True
  28.            
  29.         ' Diriger le publipostage vers un nouveau document
  30.         ' plutôt que vers l'imprimante
  31.         .Destination = wdSendToPrinter
  32.        
  33.         ' Lancer la fusion
  34.         .Execute
  35.     End With
  36.    
  37.     ' Quitter Word
  38.     .Quit SaveChanges:=wdDoNotSaveChanges
  39. End With
  40.  
  41. ' Libérer les objets
  42. Set wdApp = Nothing
  43. 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.


Mes livres sur Access...
[cliquez pour plus d'infos]





Hit-Parade 
 
[ Copyright 1997-2018 hervé inisan, self-access.com Reproduction interdite ]