Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Excel 2003 Ajout via VBA un bouton à un graphique

11 réponses
Avatar
harry
Bonjour,

J'ai =E9crit une application VBA qui, sur base d'un fichier de donn=E9es,
g=E9n=E8re dans un autre fichier les graphiques correspondant aux
donn=E9es.
Je souhaiterais, lors de la cr=E9ation d'un graphique, y ajouter un
bouton (commandbutton).
Un aide serait la bienvenue car je n'ai aucune exp=E9rience dans l'ajout
d'un objet sur un objet en VBA

D'avance merci

Harry

1 réponse

1 2
Avatar
parci
On 2 fév, 16:29, "michdenis" wrote:
| Comment faire pour insérer un ActiveX sur une feuille graphique ?
| J'ai pas 2003, mais avec 2007 ce n'est pas possible (OLEObjects.Add
| échoue). Et manuellement, c'est inactif.

Première observation :
Lorsque l'on utilise l'enregistreur de macro pour ajouter un bouton
émanant de la boîte d'outils formulaire, le code renvoyé par
l'enregistreur macro utilise Buttons.add... ça donne quelque chose
comme :
ActiveSheet.Buttons.Add 912249.75, 988516.5, 1087682.25, 333898.5
Évidemment, il est "impossible" d'avoir de l'information de l'aide d'ex cel.
Ce fut une surprise ;-) même si tous savent que l'enregistreur de macro
ne génère pas le meilleur code disponible...

Voici je te propose une façon d'ajouter des contrôles dans un graphe :

'-------------------------------------------
Dim y As MsoAutoShapeType
y = msoShapeRound1Rectangle
Sheets("Graph1").Shapes.AddShape y, 50, 50, 100, 200
'-------------------------------------------
Pour connaître toute la collection des contrôles MsoAutoShapeType
il y a bien sûr l'explorateur d'objets... et on peut obtenir une liste
déroulante énumérant tous les items disponibles immédiatement
après avoir saisi le symbole "=" dans  y = msoShapeRound1Rectangl e

**********************************************
On peut ajouter aussi tous les contrôles de la boîte à outils formu laire
**********************************************
de cette manière :
Dim x As XlFormControl
x = xlButtonControl
 Sheets("Graph1").Shapes.AddFormControl x, 50, 50, 50, 50
'--------------------------------------------------------
ET pour ceux qui voudrait avoir un exemple comment programmer un tel bout on
'--------------------------------------------------------
With Sheets("Graph1").Shapes
    With .AddFormControl(x, 50, 50, 50, 50)
        .Name = "Denis" 'définit sa propriéte Name
        'Ce qui est inscrit sur le bouton
        .OLEFormat.Object.Caption = "Denis"
        'Affecte une macro "MaMacro" situé dans un module stand ard
        .OLEFormat.Object.OnAction = "MaMacro"
        'Définit les caractéristiques de la police utilisée sur le bouton.
        With .OLEFormat.Object.Font
            .Name = "Arial"
            .Bold = True
            .ColorIndex = 3
        End With
    End With
End With
'--------------------------------------------------------



Intéressant, merci.
Ma question était un peu rhétorique, je savais ce que proposait
l'enregistreur de macro.

Le truc "rigolo" c'est que le Shape crée avec AddFormControl et
xlButtonControl retourne via sa propriété OLEFormat.Object un objet
Button (c'est d'ailleurs cet objet que tu manipules pour fixer les
propriétés du contrôle) . Et un bouton ajouté avec Buttons.Add
retourne via sa propriété Shaperange un objet Shape (c'est une
collection qui ne contient ici qu'un seul Shape). Autant utiliser
AddFormControl puisque que c'est documenté mais il faut que les objets
de la boite d'outils formulaire existent vraiment et pas pour des
raisons de compatibilité (ils étaient déjà masqué dans Excel 97).
C'est du polymorphisme (tous ces contrôles sont aussi des Shape) et du
point de vue de MS, ça permet de documenter qu'une seule méthode
générique pour tous les contrôles.
1 2