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
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
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
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
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
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
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
WdApp.Selection.GoTo What:=-1, Name:="Signet"
Un mot sur l'ouverture de Word :
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
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.
Partager