Comment automatiser Word avec Visual Basic pour créer une fusion et publipostage

Résumé

Cet article explique comment automatiser Word pour créer un publipostage pour une source de données externe. Cet article explique également les différences de code entre l’accès aux données avec OLEDB, ODBC et l’échange de données dynamique (DDE).

Informations supplémentaires

Méthodes d’accès aux données

Pour configurer par programmation une source de données pour un document de fusion et publipostage Word, vous devez d’abord appeler la méthode OpenDataSource d’un objet MailMerge. La syntaxe de la méthode OpenDataSource est la suivante :

<MailMergeObject>.OpenDataSource(Name, [Format], [ConfirmConversions], [ReadOnly], [LinkToSource], [AddToRecentFiles], [PasswordDocument], [PasswordTemplate], [Revert],[WritePasswordDocument], [WritePasswordTemplate], [Connection], [SQLStatement], [SQLStatement1], [OpenExclusive], [SubType]) 

Remarque

Pour obtenir une description complète de chaque argument, reportez-vous à l’aide en ligne de Microsoft Word Visual Basic. Les arguments Name, Connection et SubType présentent un intérêt principal pour la connexion à une source de données externe. Différentes combinaisons de ces trois arguments représentent différentes méthodes d’accès aux données pour le publipostage.

Utilisation d’OLEDB

OLEDB est la méthode d’accès aux données recommandée. Pour spécifier OLEDB comme méthode d’accès aux données avec OpenDataSource, fournissez l’argument Name avec le chemin d’accès et le nom de fichier à la base de données ou à une connexion Office DataSource (.odc). Si vous fournissez une base de données pour l’argument Name, Word utilise automatiquement OLEDB s’il y a un fournisseur OLEDB installé qui prend en charge le format de base de données.

Exemple

<MailMergeObject>.OpenDataSource Name:="C:\MyDB.mdb", _
           SQLStatement:="SELECT * FROM [MyTable]"

ou

<MailMergeObject>.OpenDataSource Name:="C:\MyDataSource.odc", _
           SQLStatement:="SELECT * FROM [MyTable]"

Word et d’autres applications Office XP utilisent l’objet Office DataSource (ODSO) pour l’accès OLEDB aux sources de données externes. ODSO est le seul mécanisme par lequel Word peut accéder aux données à l’aide d’OLEDB pour un publipostage. ODSO requiert que l’argument Name pour OpenDataSource soit un chemin d’accès complet à une base de données ou un chemin d’accès complet à un fichier ODC valide. ODSO ignore toutes les informations dans l’argument Connection.

Utilisation d’ODBC

Vous pouvez utiliser ODBC pour votre publipostage afin d’accéder aux données pour lesquelles un nom de source de données utilisateur (DSN) a été configuré sur le système. Pour spécifier ODBC comme méthode d’accès aux données avec OpenDataSource, fournissez une chaîne vide pour l’argument Name, une chaîne de connexion ODBC pour l’argument Connection et wdMergeSubTypeWord2000 pour l’argument SubType.

Exemple

<MailMergeObject>.OpenDataSource Name:= "", _
     Connection:= "DSN=MySQLServerDSN;DATABASE=pubs;uid=sa;pwd=;", _
     SQLStatement:= "Select au_id, au_lname, au_fname from authors", _
     SubType:= wdMergeSubTypeWord2000

Utilisation de DDE

Vous pouvez utiliser DDE pour accéder aux données des bases de données Microsoft Access ou des classeurs Microsoft Excel. Pour spécifier DDE comme méthode d’accès aux données avec OpenDataSource, fournissez le chemin d’accès et le nom de fichier à la base de données ou au classeur de l’argument Name, et wdMergeSubTypeWord2000 pour l’argument SubType.

Exemple

<MailMergeObject>.OpenDataSource Name:="C:\MyDB.mdb", _
           SQLStatement:="SELECT * FROM [MyTable]", _
           SubType:=wdMergeSubTypeWord2000

Exemple Automation

L’exemple de code suivant crée et exécute un publipostage pour les lettres de formulaire à l’aide d’OLEDB (via ODSO). La source de données utilisée est l’exemple de base de données Access Northwind.mdb. Si Northwind n’est pas installé, démarrez Microsoft Access 2002 ou Microsoft Office Access 2003. Dans le menu Aide , cliquez sur Exemples de bases de données, puis choisissez Northwind Sample Database pour installer cette fonctionnalité.

Pour exécuter cet exemple, procédez comme suit :

  1. Démarrez un nouveau projet EXE standard en Visual Basic. Par défaut, Form1 est créé.

  2. Dans le menu Projet , cliquez sur Références.

  3. Cliquez sur La bibliothèque d’objets Microsoft Word 2000 dans la liste des références, puis cliquez sur OK.

    Note Pour utiliser l’objet Microsoft Office Word 2003, ajoutez la bibliothèque d’objets Microsoft Word 11.0 dans la liste des références, puis cliquez sur OK.

  4. Ajoutez un contrôle CommandButton à Form1.

  5. Ajoutez le code suivant au module de code pour Form1.

    Note Si nécessaire, modifiez le chemin d’accès à Northwind.mdb pour qu’il corresponde à votre installation pour Office XP.

    Dim WithEvents oApp As Word.Application
    
    Private Sub Form_Load()
        'Start Word.
        Set oApp = CreateObject("Word.Application")
    End Sub
    
    Private Sub Command1_Click()
    
    Dim oMainDoc As Word.Document
        Dim oSel As Word.Selection
        Dim sDBPath as String
    
    'Start a new main document for the mail merge.
        Set oMainDoc = oApp.Documents.Add
    
    With oMainDoc.MailMerge
    
    .MainDocumentType = wdFormLetters
    
    'Set up the mail merge data source to Northwind.mdb.
            sDBPath = "C:\Program Files\Microsoft Office\" & _
                      "OfficeXP\Samples\Northwind.mdb"
            .OpenDataSource Name:=sDBPath, _
               SQLStatement:="SELECT * FROM [Customers]"
    
    'Add the field codes to the document to create the form letter.
            With .Fields
                Set oSel = oApp.Selection
                .Add oSel.Range, "CompanyName"
                oSel.TypeParagraph
                .Add oSel.Range, "Address"
                oSel.TypeParagraph
                .Add oSel.Range, "City"
                oSel.TypeText ", "
                .Add oSel.Range, "Country"
                oSel.TypeParagraph
                oSel.TypeParagraph
                oSel.TypeText "Dear "
                .Add oSel.Range, "ContactName"
                oSel.TypeText ","
                oSel.TypeParagraph
                oSel.TypeParagraph
                oSel.TypeText " This letter is to inform you..."
                oSel.TypeParagraph
                oSel.TypeParagraph
                oSel.TypeText "Sincerely, [Your Name Here]"
            End With
        End With
    
    'Perform the mail merge to a new document.
        With oMainDoc
            .MailMerge.Destination = wdSendToNewDocument
            .MailMerge.Execute Pause:=False
        End With
    
    End Sub
    
    Private Sub oApp_MailMergeAfterMerge(ByVal Doc As Word.Document, ByVal DocResult As Word.Document)
    
    'When the mail merge is complete, 1) make Word visible,
        '2) close the mail merge document leaving only the resulting document
        'open and 3) display a message.
        Doc.Close False
        oApp.Visible = True
        MsgBox "Mail Merge Complete: " & oApp.ActiveDocument.Name
    
    End Sub
    
    Private Sub Form_Unload(Cancel As Integer)
        Set oApp = Nothing
    End Sub
    
  6. Appuyez sur F5 pour exécuter le programme.

  7. Cliquez sur le contrôle CommandButton sur Form1 pour effectuer le publipostage.

Une fois le code terminé, Word est rendu visible avec un nouveau document ouvert. Le nouveau document contient des lettres de formulaire qui résultent d’un publipostage contenant des données extraites de la table Customers dans Northwind.mdb.

References

Pour plus d’informations, consultez l’article de la Base de connaissances Microsoft :

285176 Comment automatiser Word pour effectuer une fusion et publipostage côté client à l’aide de XML à partir de SQL Server