OVH Cloud OVH Cloud

Passer des paramètres à une macro dans un bouton de barre d'outils

3 réponses
Avatar
Kyosho
Bonjour,

J'aimerai appeler une macro avec un paramètre, genre macro(1), depuis un
bouton créé en VBA dans une barre d'outil.

Les boutons sont créés en fonction de paramètres sur une feuille.
Donc je ne peux pas créer une fonction par bouton.

Merci d'avance

3 réponses

Avatar
Hervé
Salut Kyosho,
Tu peux utiliser la propriété Tag (ou Parameter) des boutons de barre de
commande et ensuite faire un Select Case dans la macro appelée pour définir
l'action à faire. Tu as aussi la possibilité de passer des arguments à la
macro mais je ne trouve pas la chose très souple.
Exemple avec une barre de menu et 2 boutons :

Sub Menu()
Dim Barre As CommandBar
Dim Ctrl As CommandBarButton
Dim Chaine1 As String
Dim Chaine2 As String

On Error Resume Next
Application.CommandBars("Test").Delete
On Error GoTo 0

Set Barre = Application.CommandBars.Add("Test", msoBarTop)
With Barre
.Visible = True
Set Ctrl = .Controls.Add(msoControlButton)
With Ctrl
.Tag = "Bouton1"
.Caption = "Bouton1"
.OnAction = "MaMacro"
.TooltipText = "Bouton 1"
.FaceId = 462
End With
Set Ctrl = .Controls.Add(msoControlButton)
With Ctrl
.Tag = "Bouton2"
.Caption = "Bouton2"
.OnAction = "MaMacro"
.TooltipText = "Bouton 2"
.FaceId = 464
End With
End With

Set Barre = Nothing
Set Ctrl = Nothing
End Sub

Sub MaMacro()
Select Case CommandBars.ActionControl.Tag
Case "Bouton1"
MsgBox "Clic sur le bouton 1 !"
Case "Bouton2"
MsgBox "Clic sur le bouton 2 !"
End Select
End Sub

Hervé.

"Kyosho" a écrit dans le message news:
cuira1$e58$
Bonjour,

J'aimerai appeler une macro avec un paramètre, genre macro(1), depuis un
bouton créé en VBA dans une barre d'outil.

Les boutons sont créés en fonction de paramètres sur une feuille.
Donc je ne peux pas créer une fonction par bouton.

Merci d'avance


Avatar
MichDenis
Bonjour Kyosho,

Si tes boutons sont des boutons émanant de la boîte à outils "Formulaire", tu peux nommer tes boutons de cette manière :
Bouton 1 , Bouton 2 ....

Tu attaches tous tes boutons à la même macro.

Et tu peux te servir ce cette ligne de code dans ta macro pour extraire le "numéro" de ton bouton ...1 , 2 ....et t'en
servir comme paramètre si c'est ce que tu désires.

MsgBox Val(Split(Application.Caller)(1))



Salutations!




"Kyosho" a écrit dans le message de news: cuira1$e58$
Bonjour,

J'aimerai appeler une macro avec un paramètre, genre macro(1), depuis un
bouton créé en VBA dans une barre d'outil.

Les boutons sont créés en fonction de paramètres sur une feuille.
Donc je ne peux pas créer une fonction par bouton.

Merci d'avance
Avatar
Kyosho
Hervé wrote:

Salut Kyosho,
Tu peux utiliser la propriété Tag (ou Parameter) des boutons de barre de
commande et ensuite faire un Select Case dans la macro appelée pour définir
l'action à faire. Tu as aussi la possibilité de passer des arguments à la
macro mais je ne trouve pas la chose très souple.
Exemple avec une barre de menu et 2 boutons :

Sub Menu()
Dim Barre As CommandBar
Dim Ctrl As CommandBarButton
Dim Chaine1 As String
Dim Chaine2 As String

On Error Resume Next
Application.CommandBars("Test").Delete
On Error GoTo 0

Set Barre = Application.CommandBars.Add("Test", msoBarTop)
With Barre
.Visible = True
Set Ctrl = .Controls.Add(msoControlButton)
With Ctrl
.Tag = "Bouton1"
.Caption = "Bouton1"
.OnAction = "MaMacro"
.TooltipText = "Bouton 1"
.FaceId = 462
End With
Set Ctrl = .Controls.Add(msoControlButton)
With Ctrl
.Tag = "Bouton2"
.Caption = "Bouton2"
.OnAction = "MaMacro"
.TooltipText = "Bouton 2"
.FaceId = 464
End With
End With

Set Barre = Nothing
Set Ctrl = Nothing
End Sub

Sub MaMacro()
Select Case CommandBars.ActionControl.Tag
Case "Bouton1"
MsgBox "Clic sur le bouton 1 !"
Case "Bouton2"
MsgBox "Clic sur le bouton 2 !"
End Select
End Sub

Hervé.

"Kyosho" a écrit dans le message news:
cuira1$e58$

Bonjour,

J'aimerai appeler une macro avec un paramètre, genre macro(1), depuis un
bouton créé en VBA dans une barre d'outil.

Les boutons sont créés en fonction de paramètres sur une feuille.
Donc je ne peux pas créer une fonction par bouton.

Merci d'avance




Merci Hervé ça marche impecable