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

10 réponses

1 2
Avatar
michdenis
Pour ajouter un bouton issu de la barre des outils "Contrôle"
au dimension de la cellule G5 de l'onglet ayant le nom de "Feuil1"

Sub Ajouter_Un_Bouton()
With Worksheets("Feuil1")
.OLEObjects.Add ClassType:="Forms.CommandButton.1", _
Left:=.Range("G5").Left, Top:=.Range("G5").Top, _
Width:=.Range("G5").Width, Height:=.Range("G5").Height
End With
End Sub




"harry" a écrit dans le message de groupe de discussion :

Bonjour,

J'ai écrit une application VBA qui, sur base d'un fichier de données,
génère dans un autre fichier les graphiques correspondant aux
données.
Je souhaiterais, lors de la création d'un graphique, y ajouter un
bouton (commandbutton).
Un aide serait la bienvenue car je n'ai aucune expérience dans l'ajout
d'un objet sur un objet en VBA

D'avance merci

Harry
Avatar
harry
Bonjour,
Merci pour l'information que je vais soigneusement conserver.
Le problème que je souhaite résoudre est l'ajout d'un bouton
formulaire dans un graphique.
Je poursuis mes recherches
Encore merci pour la réponse

Harry

On 29 jan, 03:01, "michdenis" wrote:
Pour ajouter un bouton issu de la barre des outils "Contrôle"
au dimension de la cellule G5 de l'onglet ayant le nom de "Feuil1"

Sub Ajouter_Un_Bouton()
With Worksheets("Feuil1")
    .OLEObjects.Add ClassType:="Forms.CommandButton.1", _
        Left:=.Range("G5").Left, Top:=.Range("G5").Top, _
        Width:=.Range("G5").Width, Height:=.Range("G5").Heigh t
End With
End Sub

"harry" a écrit dans le message de groupe de discussion :

Bonjour,

J'ai écrit une application VBA qui, sur base d'un fichier de données,
génère dans un autre fichier les graphiques correspondant  aux
données.
Je souhaiterais, lors de la création d'un graphique, y ajouter un
bouton (commandbutton).
Un aide serait la bienvenue car je n'ai aucune expérience dans l'ajout
d'un objet sur un objet en VBA

D'avance merci

Harry


Avatar
parci
harry a écrit :
Bonjour,
Merci pour l'information que je vais soigneusement conserver.
Le problème que je souhaite résoudre est l'ajout d'un bouton
formulaire dans un graphique.
Je poursuis mes recherches
Encore merci pour la réponse



Tu devrais pouvoir le faire avec, par exemple :

' un bouton qui lance une sub "test" sur le premier graph du classeur
Sub AddButton()

Dim ch As Chart
Dim b As Button

Set ch = Charts(1)
Set b = ch.Buttons.Add(20, 20, 50, 20)
b.OnAction = "test"
Set b = Nothing
Set ch = Nothing

End Sub

Pas documenté mais fonctionne (sur une version antérieure à 2003 au moins).
Avatar
michdenis
| Set b = ch.Buttons.Add(20, 20, 50, 20)

Si tu regardes dans l'explorateur d'objets de la fenêtre de l'éditeur de code,
tu peux afficher les propriétés et méthodes des objets masqués par la
commande du menu contextuel (afficher les membres masqués)

Elle est effectivement présente et fonctionnelle mais elle fait référence
au modèle objet probablement Excel 1977. Elle est là pour assurer la
compatibilité des versions. Ce qui explique qu'on on ne retrouve pas
d'information sur ces membres masqués. La question : Devrait-on
continuer d'utiliser ces "items" dans nos nouveaux classeurs ?




"parci" a écrit dans le message de groupe de discussion :

harry a écrit :
Bonjour,
Merci pour l'information que je vais soigneusement conserver.
Le problème que je souhaite résoudre est l'ajout d'un bouton
formulaire dans un graphique.
Je poursuis mes recherches
Encore merci pour la réponse



Tu devrais pouvoir le faire avec, par exemple :

' un bouton qui lance une sub "test" sur le premier graph du classeur
Sub AddButton()

Dim ch As Chart
Dim b As Button

Set ch = Charts(1)
Set b = ch.Buttons.Add(20, 20, 50, 20)
b.OnAction = "test"
Set b = Nothing
Set ch = Nothing

End Sub

Pas documenté mais fonctionne (sur une version antérieure à 2003 au moins).
Avatar
Modeste
Bonsour® michdenis
Elle fait référence
au modèle objet probablement Excel 1977. Elle est là pour assurer la
compatibilité des versions.



????
désolé mais le dinosaure que je suis, ne connais pas cette version ...
La première version d'Excel est sortie en 1985
mais je n'ai commencé à y toucher qu'en 1988 ;o)))
mais je manipulais Visicalc dès 1986...
http://www.bricklin.com/anonymous/VCdotcom
Avatar
michdenis
On s'entend pour 1997... Ok ?

"Modeste" a écrit dans le message de groupe de discussion :

Bonsour® michdenis
Elle fait référence
au modèle objet probablement Excel 1977. Elle est là pour assurer la
compatibilité des versions.



????
désolé mais le dinosaure que je suis, ne connais pas cette version ...
La première version d'Excel est sortie en 1985
mais je n'ai commencé à y toucher qu'en 1988 ;o)))
mais je manipulais Visicalc dès 1986...
http://www.bricklin.com/anonymous/VCdotcom
Avatar
parci
On 1 fév, 22:21, "michdenis" wrote:
|  Set b = ch.Buttons.Add(20, 20, 50, 20)

Si tu regardes dans l'explorateur d'objets de la fenêtre de l'éditeur de code,
tu peux afficher les propriétés et méthodes des objets masqués pa r la
commande du menu contextuel (afficher les membres masqués)



Oui, non documenté.

Elle est effectivement présente et fonctionnelle mais elle fait réf érence
au modèle objet probablement Excel 1977. Elle est là pour assurer la
compatibilité des versions. Ce qui explique qu'on on ne retrouve pas
d'information sur ces membres masqués. La question : Devrait-on
continuer d'utiliser ces "items" dans nos nouveaux classeurs ?



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.
Avatar
michdenis
| 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'excel.
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 = msoShapeRound1Rectangle

**********************************************
On peut ajouter aussi tous les contrôles de la boîte à outils formulaire
**********************************************
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 bouton
'--------------------------------------------------------
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 standard
.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
'--------------------------------------------------------
Avatar
Modeste
Bonsour® michdenis
y = msoShapeRound1Rectangle



;o)))
juste pour le plaisir ;o)
msoshapebevel est plus beau !!!
rotf
Avatar
michdenis
| juste pour le plaisir ;o)
| msoshapebevel est plus beau !!!

Tu devrais pondre un fichier sur tes plus beaux boutons,
ça m'intéresse. ça me permettrait de raffiner les miens !

;-)
1 2