Voir le flux RSS

Eric KERGRESSE

Récupérer la valeur d'une cellule d'un tableau Excel inséré dans word.

Noter ce billet
par , 03/09/2019 à 07h02 (134 Affichages)
.
Ce billet est issu de cette discussion : Formule-utilisant-nbr-fixe-signet-cellule-tableau-excel-insere-word-resultat

J'ai regardé avec VBA comment on pouvait récupérer une valeur d'un tableau Excel incorporé dans Word.

Le code ci-dessous permet de mettre à jour un signet PourcentageAcompte calculé à partir de la valeur de l'acompte correspondant au signet Acompte et du montant TTC correspondant à la zone nommée "TotalTtc" du tableau.

CODE :
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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
Option Explicit

' Référencer la Dll Microsoft Excel

' Déclare les routines d'API nécessaires:
Declare Function FindWindow Lib "user32" Alias _
"FindWindowA" (ByVal lpClassName As String, _
                    ByVal lpWindowName As Long) As Long

Declare Function SendMessage Lib "user32" Alias _
"SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, _
                    ByVal wParam As Long, _
                    ByVal lParam As Long) As Long


Sub MettreAJourLePourcentageAcompte()

Dim I As Integer
Dim AppXl As Excel.Application
Dim MonOnglet As Excel.Worksheet
Dim DocEncours As Document
Dim ValeurAcompte As Double, ValeurTtc As Double, MonPourcentage As Double

    Set DocEncours = ActiveDocument
    With DocEncours
    
         For I = 1 To .InlineShapes.Count
             With .InlineShapes(I)
                  If .Type = wdInlineShapeEmbeddedOLEObject Then
                      If .OLEFormat.ClassType = "Excel.Sheet.12" Then ' Indice 12 à vérifier, test sur Excel 2010
                          With .OLEFormat
                               .Edit
                               Set AppXl = GetObject(, "Excel.Application")
                               With AppXl
                                    Set MonOnglet = .Sheets("Base")
                                    ValeurTtc = MonOnglet.Range("TotalTtc")
                                    Set MonOnglet = Nothing
                               End With
                               AppXl.Quit
                               Set AppXl = Nothing
                           End With
                           
                      End If
                      .Select
                  End If
             End With
         Next I
                
        If ValeurTtc > 0 Then
           ValeurAcompte = CDbl(.Bookmarks("Acompte").Range)
           MonPourcentage = Round(ValeurAcompte * 100 / ValeurTtc, 2)
           MajPourcentageAcompte2 DocEncours, .Bookmarks("PourcentageAcompte"), MonPourcentage
        End If
        
        .Bookmarks("PourcentageAcompte").Range.Select
       
         MsgBox "% acompte pour " & ValeurTtc & " € mis à jour !", vbInformation
    End With
 
  Set DocEncours = Nothing
  

End Sub

Sub MajPourcentageAcompte2(ByVal DocEnCours2 As Document, MonSignet As Bookmark, MonPourcentage2 As Double)

' Une adaptation de RemplacerTexteSignet d'Olivier LEBEAU

Dim intI As Long 'intI pour le début de notre Bookmark
Dim stBM As String 'stBM pour le nom de notre Bookmark
Dim MyRng As Range 'un objet range pour le range de notre Bookmark
    
    With DocEnCours2
    
         With MonSignet
              stBM = .Name  'Récupération du nom du signet
              intI = .Start 'Récupération de la position de départ de notre signet
             .Range.Text = CStr(MonPourcentage2) 'Affectation du texte à notre Bookmark
         End With
        
         'Affectation de l'objet Range, où la position de départ est
         ' la même que pour le Bookmark et la fin sera le début augmenté
         ' de la longueur du texte
         Set MyRng = .Range(Start:=intI, End:=intI + Len(CStr(MonPourcentage2)))
         .Bookmarks.Add stBM, MyRng ' Crée le Bookmark sur l'objet Range
         Set MyRng = Nothing
         
    End With
    
End Sub
Capture d'écran :

Nom : Capture.JPG
Affichages : 19
Taille : 27,9 Ko


Lancement de la macro :

Pour le lancement de la macro, on rattache la macro au document dans la barre d'accès rapide, et on change son aspect (modifier en bas de la fenêtre)

Nom : Capture.JPG
Affichages : 17
Taille : 45,7 Ko

Le triangle vert apparaît dans la barre de menu :

Nom : Capture.JPG
Affichages : 16
Taille : 14,3 Ko
Miniatures attachées Fichiers attachés

Envoyer le billet « Récupérer la valeur d'une cellule d'un tableau Excel inséré dans word. » dans le blog Viadeo Envoyer le billet « Récupérer la valeur d'une cellule d'un tableau Excel inséré dans word. » dans le blog Twitter Envoyer le billet « Récupérer la valeur d'une cellule d'un tableau Excel inséré dans word. » dans le blog Google Envoyer le billet « Récupérer la valeur d'une cellule d'un tableau Excel inséré dans word. » dans le blog Facebook Envoyer le billet « Récupérer la valeur d'une cellule d'un tableau Excel inséré dans word. » dans le blog Digg Envoyer le billet « Récupérer la valeur d'une cellule d'un tableau Excel inséré dans word. » dans le blog Delicious Envoyer le billet « Récupérer la valeur d'une cellule d'un tableau Excel inséré dans word. » dans le blog MySpace Envoyer le billet « Récupérer la valeur d'une cellule d'un tableau Excel inséré dans word. » dans le blog Yahoo

Commentaires