Easy-Micro

ESPACEMEMBRE VBA
Word et VBA

Liens avec l'applications Word

Pour avoir accès aux objets d'une autre application, donc pour manipuler les informations du serveur, on doit référencer sa bibliothèque d'objets (un fichier .olb) via le menu Outils / Références de l'éditeur VBA. Ce menu est la liste des serveurs OLE enregistrés dans la base de registre de Windows.

VBA La technologie Automation
Automation, appelée également OLE (Object Linking and Embedding) ou OLE Automation, est une technologie qui permet de manipuler les objets d'une autre application directement à partir d'Excel. Pour utiliser la technologie Automation, on doit définir dans le code VBA une variable objet associée aux objets de type application.

Pour réaliser notre exemple (Démarrer et écrire dans Word depuis Excel), il faut d'abord sélectionner une référence au module externe Word via le menu Outils / Références de l'éditeur VBA.
On coche l'option Microsoft Word 12.0 Object Library (11.0 correspond à 2003, 12.0 pour 2007et 14.0 pour 2010).

Démarrer et écrire dans Word depuis Excel : Exemple minima

Sub ecrire_dans_word()
	
Dim w As Word.Application 'déclaration de la variable objet w
Set w = New Word.Application

' lance Word en mode masqué (donc visible=True)
w.Documents.Add
w.Visible = True

' Selection représente le point d'insertion
w.Selection.TypeText Text:="Hello EveryBody"

' Autre syntaxe :
w.Selection.TypeText ("Hello EveryBody")

End Sub

Lister dans Word les noms des feuilles Excel

Option Explicit
Dim w As Object 'déclaration de la variable objet w
Dim i As Integer
Dim str_moncontenu() As String ' tableau dynamique
Dim int_nombre_de_feuille As Integer

Sub proc_liste_dans_word_les_noms_des_feuilles_Excel()
'initialisation de la variable objet
'Set w = New Word.Application ' ou bien :
Set w = CreateObject("Word.Application")

'récupe le nombre de feuille
int_nombre_de_feuille = Sheets.Count

'redimentionne le tableau dynamique avec le nombre de feuilles
ReDim str_moncontenu(int_nombre_de_feuille)

'inititalise le tableau avec les noms de feuilles Excel
For i = 1 To int_nombre_de_feuille
    str_moncontenu(i - 1) = ActiveWorkbook.Sheets(i).Name
Next i

' ouvre un nouveau document Word et l'affiche(visible)
w.Documents.Add
w.Visible = True

'liste les noms de feuilles Excel dans Word
For i = 0 To int_nombre_de_feuille
    w.Selection.TypeText Text:=str_moncontenu(i)
    w.Selection.TypeParagraph 'Changement de paragraphe
Next i

End Sub

Démarrer et écrire dans Word depuis Excel : Exemple plus complet

' Déclaration de variable
Public montexte1 As String

Sub ecriredansword()
' Initialisation de variable
montexte1 = "premier_texte"

Dim w As Word.Application 'déclaration de la variable objet w
Set w = New Word.Application

w.Documents.Add ' lance Word en mode masqué
w.Visible = True

' Ouvrir un modèle
w.Documents.Add Template:="C:Documents and Settings\Administrateur\Mes documents\monmodele.doc"

' Ou bien ouvrir
w.Documents.Open ("Documents/titi.doc") ' Attention: adresse complète obligatoire

' Format de la première ligne
w.Selection.Font.Size = 20
w.Selection.Font.Bold = True

' Ecrire du contenu
w.Selection.TypeText Text:="Salut à toutes et à tous"

w.Selection.TypeParagraph 'Changement de paragraphe

' Ecrire du contenu (avec la variable globale "montexte1")
w.Selection.TypeText Text:="Production 2009 : " & montexte1

' Création et initialisation de variables Word
w.ActiveDocument.Variables.Add ("MaVariable1")
w.ActiveDocument.Variables("Mavariable1").Value = "Bonjour"
' Deuxième syntaxe:
w.ActiveDocument.Variables.Add Name:="MaVariable2", Value:="Bienvenue"

' Initialisation d'une variable pré-existante dans Word
' Voir le menu insertion/champ/automatisation/variabledoc
w.ActiveDocument.Variables("nom").Value = "Coucou"

' Affichage du contenu des variables Word (ligne par ligne)
w.Selection.TypeText Text:=w.ActiveDocument.Variables("MaVariable1").Value

' Affichage du contenu des variables Word (boucle)
For Each maVar In w.ActiveDocument.Variables
w.Selection.TypeText Text:=maVar.Value
w.Selection.TypeParagraph 'Changement de paragraphe
Next maVar

' Création et remplissage de signet
w.ActiveDocument.Bookmarks.Add ("monsignet")
w.ActiveDocument.Bookmarks("monsignet").Range.Text = "Byby"

' Mise à jour des champs Word
w.ActiveDocument.Fields.Update

w.ActiveDocument.SaveAs "titi.doc"
w.ActiveDocument.Close

w.Quit

End Sub

Note: Pour éviter les ambigüités entre les applications, les lignes:
Dim w As Word.Application
Set w = New Word.Application
Remplacent les lignes :
Dim w as Object
Set w = CreateObject("Word.Application")

Autre exemple: Exporter un tableau Excel vers Word.

Public Sub CopiedansWord()

' Création d'une variable de type Application
Dim w As Word.Application
Set w = New Word.Application

' Création d'une variable de type Document
Dim wdoc As Word.Document
Set wdoc = w.Documents.Add

w.Visible = True

'Copie dans Excel
Range("A1:B5").Copy

w.Selection.Paste

wdoc.Tables(1).AutoFitBehavior wdAutoFitWindow

Application.CutCopyMode = False

End Sub


< Page précédente VBA Page suivante >