Comment automatiser Word à partir de Visual Basic pour créer un publipostage pour les étiquettes de publipostage

Résumé

Cet article explique comment automatiser Microsoft Office Word à partir d’une application Microsoft Visual Basic pour créer et exécuter un publipostage pour les étiquettes de publipostage.

Informations supplémentaires

L’exemple de code de cet article utilise un fichier texte délimité par des tabulations pour la source de données. Le fichier texte contient les champs suivants :

  • Contact_Name
  • Address
  • City
  • Postal_Code
  • Pays

Vous pouvez utiliser n’importe quel éditeur de texte pour créer la source de données du fichier texte. Par exemple, vous pouvez utiliser le Bloc-notes.

Lorsque vous créez la source de données, n’oubliez pas de séparer les champs (colonnes) à l’aide d’un caractère d’onglet et de séparer les enregistrements (lignes) à l’aide d’un retour chariot. Voici un exemple de la façon dont le fichier texte peut apparaître :

Contact_NameAddress City Postal_Code Country
Maria AndersObere Str. 57 Berlin 12209 Germany 
Thomas Hardy120 Hanover Sq. London WA1 1DP UK
Hanna MoosForsterstr. 57 Mannheim 68306 Germany
Laurence Lebihan 12, rue des Bouchers Marseille 13008 France

Remarque

Vous pouvez utiliser n’importe quelle autre source de données au lieu du fichier texte délimité par des tabulations. Par exemple, vous pouvez utiliser une base de données Microsoft Access.

Exemple pas à pas

  1. Démarrez un nouveau projet EXE standard en Visual Basic. Par défaut, un formulaire nommé Form1 est créé.
  2. Ajoutez un CommandButton à Form1.
  3. Sélectionnez la bibliothèque d’objets Microsoft Word pour la version de Word que vous souhaitez automatiser, puis cliquez sur OK.
  4. Copiez le code suivant dans la fenêtre de code de Form1.
    Private Sub Command1_Click()
    
    Dim oApp As Word.Application
        Dim oDoc As Word.Document
    
    'Start a new document in Word
        Set oApp = CreateObject("Word.Application")
        Set oDoc = oApp.Documents.Add
    
    With oDoc.MailMerge
    
    'Insert the mail merge fields temporarily so that
            'you can use the range that contains the merge fields as a layout
            'for your labels -- to use this as a layout, you can add it
            'as an AutoText entry.
            With .Fields
                .Add oApp.Selection.Range, "Contact_Name"
                oApp.Selection.TypeParagraph
                .Add oApp.Selection.Range, "Address"
                oApp.Selection.TypeParagraph
                .Add oApp.Selection.Range, "City"
                oApp.Selection.TypeText "  "
                .Add oApp.Selection.Range, "Postal_Code"
                oApp.Selection.TypeText " -- "
                .Add oApp.Selection.Range, "Country"
            End With
            Dim oAutoText As Word.AutoTextEntry
            Set oAutoText = oApp.NormalTemplate.AutoTextEntries.Add("MyLabelLayout", oDoc.Content)
            oDoc.Content.Delete 'Merge fields in document no longer needed now
                                'that the AutoText entry for the label layout
                                'has been added so delete it.
    
    'Set up the mail merge type as mailing labels and use
            'a tab-delimited text file as the data source.
            .MainDocumentType = wdMailingLabels 
            .OpenDataSource Name:="C:\data.txt" 'Specify the data source here
    
    'Create the new document for the labels using the AutoText entry
            'you added -- 5160 is the label number to use for this sample.
            'You can specify the label number you want to use for the output
            'in the Name argument.
            oApp.MailingLabel.CreateNewDocument Name:="5160", Address:="", _
                AutoText:="MyLabelLayout", LaserTray:=wdPrinterManualFeed
    
    'Execute the mail merge to generate the labels.
            .Destination = wdSendToNewDocument
            .Execute
    
    'Delete the AutoText entry you added
            oAutoText.Delete
    
    End With
    
    'Close the original document and make Word visible so that
    
    'the mail merge results are displayed
        oDoc.Close False
        oApp.Visible = True
    
    'Prevent save to Normal template when user exits Word
        oApp.NormalTemplate.Saved = True
    
    End Sub
    
    
    L’argument Name de la méthode OpenDataSource dans ce code fait référence à la source de données en tant que c:\data.txt. Si la source de données a un chemin d’accès différent ou un nom de fichier différent, modifiez cette ligne dans le code en conséquence.
  5. Appuyez sur la touche F5 pour exécuter le programme, puis cliquez sur Command1. Un document d’étiquette de publipostage est créé à l’aide de données extraites de la source de données.

References

Pour plus d’informations sur l’automatisation de Word ou sur la création de documents de fusion et publipostage, cliquez sur les numéros d’article suivants pour afficher les articles de la Base de connaissances Microsoft :

220911 Comment automatiser Microsoft Word pour effectuer une fusion et publipostage à l’aide de Visual C++ et MFC

212034 Comment créer des étiquettes de publipostage à l’aide du publipostage dans Word