Ce demande que la référence "Microsoft Word X.XX Object Library soit activée -> Editeur VBA -> Outils -> Référence (merci ilcocodrillo)
Ce code propose :
- La sélection manuelle d'une plage de cellules dans Excel
- Le positionnement sur un signet dans le document Word
- Le collage lié de la plage de cellules sur le signet
- le redimensionnement de la plage de cellules dans word
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
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
Sub CopierAlEndroitVouluUnePlageDeCellulesExcelDansWord()
Dim WdApp As Word.Application
Dim WdDoc As Word.Document
Dim i, hauteur As Double, plage As Range
    Set WdApp = CreateObject("word.application")     'ouvre la session Word
    Set WdDoc = WdApp.Documents.Open("D:\Doc\Worddoc.doc")    'ouvre le doc
    WdApp.Visible = False                                   'masque l'appli
 
    Do                          'Sélection de la plage de cellules à copier
        On Error Resume Next                          'gère une plage nulle
        Set plage = Application.InputBox("Saisir la plage de cellules", , , , , , , 8)
        If plage Is Nothing Then GoTo Fin             'sortie si plage vide
        On Error GoTo 0
    Loop While InStr(plage.Address, ",") <> 0
    plage.Copy                                                'plage copiée
    DoEvents                  'laisse au system le temps de copier la plage
 
                                      'Place l'image sur le signet "Signet"
    With WdApp
        .Selection.Goto What:=wdGoToBookmark, Name:="Signet"
        .Selection.PasteSpecial Link:=True, DataType:=wdPasteOLEObject, _
                   Placement:=wdInLine, DisplayAsIcon:=False
        WdDoc.InlineShapes(WdDoc.InlineShapes.Count).Width = 453.55    'Règle la largeur dans Word
 
        'Calcul de la hauteur de plage dans le document word
        hauteur = 453.55 / WdDoc.InlineShapes(WdDoc.InlineShapes.CounWdDoc.InlineShapes.Count).Width _
                * WdDoc.InlineShapes(WdDoc.InlineShapes.Count).Height
 
        'Règlage de la hauteur de la plage proportionnellement à la largeur
        WdDoc.InlineShapes(WdDoc).Height = Int(hauteur)
    End With
 
    'WdApp.Visible = True 'Pour voir (Ne pas fermer le fichier depuis Word)
 
Fin::
    WdDoc.Close True                       'Enregistre et ferme le doc word
    DoEvents            'Laisse au system le temps d'enregistrer le fichier
    WdApp.Quit                                            'ferme la session
 
    Set plage = Nothing
    Set WdApp = Nothing
    Set WdDoc = Nothing
NB - Dans cet exemple, la largeur entre marges dans le document word = 16 cm
......(disposition Portrait, marges gauche et droite de 2,5 cm).
- La Hauteur se règle en fonction de cette largeur.
- La liaison de la plage avec le classeur est donnée par [Link:=True]