Contrôle d'une application Microsoft Office à partir d'une autre

Pour exécuter du code dans une application Microsoft Office fonctionnant avec les objets d'une autre application, suivez les étapes décrites ci-dessous.

Pour exécuter le code

  1. Définissez une référence vers la bibliothèque de types de l’autre application dans la boîte de dialogue Références (menu Outils). Ensuite, les objets, propriétés et méthodes apparaissent dans l’Explorateur d’objets et la syntaxe est vérifiée au moment de la compilation. Une aide contextuelle est disponible pour chaque objet, propriété et méthode.

  2. Déclarez les variables objet qui feront référence aux objets de l'autre application en tant que types spécifiques. Veillez à qualifier chaque type à l'aide du nom de l'application dont l'objet est issu. Par exemple, l'instruction suivante déclare une variable pointant vers un document Microsoft Word et une autre qui fait référence à un classeur Microsoft Excel :

      Dim appWD As Word.Application, wbXL As Excel.Workbook
    

    Remarque Suivez les étapes ci-dessus si vous souhaitez que votre code utilise la liaison anticipée.

  3. Utilisez la fonction CreateObject avec les Identificateurs de programmation OLE de l’objet avec lequel vous souhaitez travailler dans l’autre application, comme l’indique l’exemple suivant. Pour voir la session de l'autre application, définissez la propriété Visible sur True.

      Dim appWD As Word.Application 
    
    Set appWD = CreateObject("Word.Application") 
    appWd.Visible = True
    
  4. Appliquez les propriétés et les méthodes à l'objet contenu dans la variable. Par exemple, l'instruction suivante crée un document Word.

    Dim appWD As Word.Application 
    
    Set appWD = CreateObject("Word.Application") 
    appWD.Documents.Add
    
  5. Lorsque vous avez terminé de travailler dans l’autre application, utilisez la méthode Quit pour la fermer, puis définissez sa variable d’objet sur Nothing pour libérer la mémoire qu’elle utilise, comme l’indique l’exemple suivant.

    appWd.Quit 
    Set appWd = Nothing
    

Exemple de code fourni par : Bill Jelen, MrExcel.com l’exemple de code suivant crée un nouveau Microsoft Office Word pour chaque ligne de données d’une feuille de calcul.

' You must pick Microsoft Word Object Library from Tools>References
' in the VB editor to execute Word commands.
Sub ControlWord()
    Dim appWD As Word.Application
    ' Create a new instance of Word and make it visible
    Set appWD = CreateObject("Word.Application.12")
    appWD.Visible = True

    ' Find the last row with data in the spreadsheet
    FinalRow = Range("A9999").End(xlUp).Row
    For i = 1 To FinalRow
        ' Copy the current row
        Worksheets("Sheet1").Rows(i).Copy
        ' Tell Word to create a new document
        appWD.Documents.Add
        ' Tell Word to paste the contents of the clipboard into the new document.
        appWD.Selection.Paste
        ' Save the new document with a sequential file name.
        appWD.ActiveDocument.SaveAs Filename:="File" & i
        ' Close the new Word document.
        appWD.ActiveDocument.Close
    Next i
    ' Close the Word application.
    appWD.Quit
End Sub

Exemple de code fourni par : Dennis Wallentin, VSTO & .NET & Excel Cet exemple prend les valeurs de cellules d’une plage nommée, W_Data, qui contient trois valeurs et insère ces valeurs dans un document Word. Les valeurs sont insérées aux emplacements signet nommés td1, td2 et td3. Pour exécuter cet exemple, vous devez disposer d’une plage nommée W_Data qui contient trois valeurs dans l’onglet Feuil1 du classeur. Vous devez disposer d’un document Word nommé Test.docx enregistré au même endroit que le classeur Excel, et ce document Word doit comporter trois signets nommés td1, td2 et td3.

' You must pick Microsoft Word Object Library from Tools>References
' in the Visual Basic editor to execute Word commands.

Option Explicit

Sub Add_Single_Values_Word()
Dim wdApp As Word.Application
Dim wdDoc As Word.Document
Dim wdRange1 As Word.Range
Dim wdRange2 As Word.Range
Dim wdRange3 As Word.Range

Dim wbBook As Workbook
Dim wsSheet As Worksheet

Dim vaData As Variant

Set wbBook = ThisWorkbook
Set wsSheet = wbBook.Worksheets("Sheet1")

vaData = wsSheet.Range("W_Data").Value

' Instantiate the Word Objects.
Set wdApp = New Word.Application
Set wdDoc = wdApp.Documents.Open(wbBook.Path & "\Test.docx")

With wdDoc
    Set wdRange1 = .Bookmarks("td1").Range
    Set wdRange2 = .Bookmarks("td2").Range
    Set wdRange3 = .Bookmarks("td3").Range
End With

' Write values to the bookmarks.
wdRange1.Text = vaData(1, 1)
wdRange2.Text = vaData(2, 1)
wdRange3.Text = vaData(3, 1)

With wdDoc
    .Save
    .Close
End With

wdApp.Quit

' Release the objects from memory.
Set wdRange1 = Nothing
Set wdRange2 = Nothing
Set wdRange3 = Nothing
Set wdDoc = Nothing
Set wdApp = Nothing

End Sub

À propos des collaborateurs

MVP Bill Jelen est l’auteur de plus de deux douzaines livres sur Microsoft Excel. Il est invité régulièrement sur TechTV avec Leo Laporte et il est l’hôte de MrExcel.com qui inclut plus de 300 000 questions et réponses sur Excel.

Dennis Wallentin est l’auteur de VSTO & .NET & Excel, un blog consacré aux solutions .NET Framework pour Excel et Excel Services. Dennis développe des solutions Excel depuis plus de 20 ans et a également co-écrit « Professional Excel Development: The Definitive Guide to Developing Applications Using Microsoft Excel, VBA and .NET (2nd Edition) ».

Assistance et commentaires

Avez-vous des questions ou des commentaires sur Office VBA ou sur cette documentation ? Consultez la rubrique concernant l’assistance pour Office VBA et l’envoi de commentaires afin d’obtenir des instructions pour recevoir une assistance et envoyer vos commentaires.