Les procédures suivantes proposent
- La création d'un graphe dans Excel
- Son positionnement selon les coordonnées d'une cellule dans Excel
- La création d'une instance de Word
- L'ouverture d'un document existant
- La copie du graphe dans Excel
Le choix entre :
- Le collage du graphe lié à la feuille Excel, à l'emplacement d'un signet dans le document Word
ou
- La copie de l'image du Graphe
- Le collage de cette "image" à l'emplacement d'un signet dans le document Word

- Le redimensionnement du graphe ou de l'image dans Word
- L'enregistrement du document Word et sa fermeture

Crée un graphique de type histogramme dans Excel
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Sub CreerLeGraphe()
Dim FL1 As Worksheet
Dim Graph As Object
    Set FL1 = Worksheets("Feuil1")
    Set Graph = Charts.Add
    With Graph
        .ChartType = xlColumnClustered 'Histogramme (*)
        .SetSourceData Source:=FL1.Range("E1:F9")
        .Location Where:=xlLocationAsObject, Name:=FL1.Name
    End With
    With ActiveChart
        .HasTitle = True
        .ChartTitle.Characters.Text = "Titre du Graphique"
        .ChartTitle.Characters.Font.Name = "Arial"
        .ChartTitle.Characters.Font.Size = 16
        .ChartTitle.Characters.Font.ColorIndex = 11 'Bleu marine
    End With
    PositionnerLeGrapheDansExcel FL1
    OuvrirWord FL1
End Sub
Positionne le graphique dans Excel
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
Sub PositionnerLeGrapheDansExcel(FL1 As Worksheet)
    With FL1.Shapes(FL1.Shapes.Count)
        .Select
        .Top = FL1.Range("D5").Top
        .Left = FL1.Range("D5").Left
    End With
End Sub
Crée une instance de Word et ouvre un document
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
Sub OuvrirWord(FL1 As Worksheet)
Dim WdApp As Object
Dim WdDoc
    Set WdApp = CreateObject("Word.Application")
    Set WdDoc = WdApp.Documents.Open(Filename:="D:\Doc\Doc1.doc")
    DoEvents
    WdApp.Visible = False
    WdApp.Selection.GoTo What:=-1, Name:="Signet"
 
 'Copie le graphique et le colle dans le document avec liaison (**)
    CopierLeGrapheLie FL1, WdApp
 
 'Copie une "image" du graphique et le colle dans le document sans liaison (***)
    'CopierImageDuGraphe FL1, WdApp
 
    DoEvents
    RedimensionnerLeGrapheDansWord WdApp, WdDoc
    DoEvents
    WdDoc.Close True 'Enregistre le document et le ferme
    DoEvents
    WdApp.Quit 'Ferme Word
    Set WdApp = Nothing
    Set WdDoc = Nothing
End Sub
(**) Crée une copie liée du graphe avec Excel :
- Toute modification de données dans Excel sera mise à jour dans le document Word
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
Sub CopierLeGrapheLie(FL1 As Worksheet, WdApp As Object)
    FL1.Select
    ActiveSheet.ChartObjects(ActiveSheet.ChartObjects.Count).Activate
    ActiveChart.ChartArea.Select
    ActiveChart.ChartArea.Copy
    WdApp.Selection.PasteSpecial Link:=True, DataType:=0, Placement:=0
End Sub
(***) Crée une copie de l'image du graphe
- Les modifications de données dans Excel ne seront pas mises à jour dans le document Word
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
Sub CopierImageDuGraphe(FL1 As Worksheet, WdApp As Object)
    FL1.Select
    FL1.Shapes(FL1.Shapes.Count).Copy
    WdApp.Selection.PasteSpecial Link:=False, DataType:=3, _
        Placement:=0
End Sub
Exemple d'intervention sur le graphe incorporé dans le document Word
InlineShapes est utilisé ici car le graphe a été inséré "associé au texte" (sur une ligne du document)
Si le graphe a été incorporé "Dissocié du texte" (donc sans position pré-définie) remplacer InlineShapes par Shapes
WdDoc.InlineShapes.Count désigne le dernier objet incorporé dans le document
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
Sub RedimensionnerLeGrapheDansWord(WdApp As Object, WdDoc)
    WdDoc.InlineShapes(WdDoc.InlineShapes.Count).Select
    WdApp.Selection.InlineShapes(1).Height = 141.75 * 0.5
    WdApp.Selection.InlineShapes(1).Width = 211.75 * 0.5
End Sub
(*) Les autres types de graphes se trouvent dans l'aide en ligne de VBA-Excel, à "ChartType"
Quelques-uns de ces types :
- xlLine 'Courbes
- xlPie 'Secteurs
- xlXYScatter 'Nuage de points

A savoir :
Word n'accepte pas le nom des arguments des méthodes utilisées depuis Excel. Dans les procédures VBA-Excel utilisant ces arguments, il est nécessaire de les remplacer par leurs valeurs.
Exemple :
WdApp.Selection.GoTo What:=wdGoToBookmark, Name:="Signet"
s'écrit
Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WdApp.Selection.GoTo What:=-1, Name:="Signet"
Un mot sur l'ouverture de Word :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
Sub OuvrirWord(FL1 As Worksheet)
Dim WdApp As Object
Dim WdDoc '(as variant)
    Set WdApp = CreateObject("Word.Application")
    Set WdDoc = WdApp.Documents.Open(Filename:="D:\Doc\Doc1.doc")
La déclaration de WdApp as object dispense de valider la référence "Microsoft Word XX.X Object Library"

En cas de problème avec cette syntaxe, valider cette référence ( dans l'Editeur VBA -> Outils -> Références ) et utiliser cette syntaxe
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
Sub OuvrirWord(FL1 As Worksheet)
Dim WdApp As Word.Application
Dim WdDoc As Word.Document
    Set WdApp = CreateObject("Word.Application")
    Set WdDoc = WdApp.Documents.Open("D:\doc\doc1.doc")
Bonne programmation.