Connaitre quel bouton a lancé une macro VBA

Doumé95 -  
 Coform -
Bonjour,

J'ai une feuille qui a plusieurs boutons et qui appellent une macro VBA générique. cette macro générique doit faire un traitement différent en fonction du bouton qui l'a appelé, quasiment le même à une nuance près.
Comment puis-je dans la macro identifier le bouton de la feuille qui l'a appelé. La différence entre les différents boutons est le titre du bouton.
Merci de m'aider à résoudre ce problème...

6 réponses

bouket Messages postés 143 Date d'inscription   Statut Membre Dernière intervention   22
 
une petite astuce simple : définissez le nom de la macro en variable au début de chacune d'elle ... ensuite mettez ce nom dans une cellule ... de ce fait, selon que vous lanciez une macro ou une autre par les boutons, vous serez fixé ;)
1
Doumé95
 
Merci pour cette réponse mais je ne la comprends pas. J'ai du mal m'expliquer. J'ai un bouton 1 dont le titre est "bouton 1" qui appelle la macro "macro" et un bouton 2 dont le titre est "bouton 2" qui appelle la même macro "macro". Quand je suis dans le corps de la macro "macro", comment puis-je savoir quel bouton a lancé la macro ? mon exemple indique 2 boutons mais en fait j'en ai un grand nombre que seul diffère le titre et je ne veux pas avoir à définir une macro par bouton, car 99% du code serait le même. Merci de votre aide
0
Coform > Doumé95
 
Bonjour, je suis très intéressé par ton message car je suis confronté à la même problématique.
As tu trouvé une solution, si oui, pourrais tu me la faire partager.
Par avance, merci, et bien entendu je continue à chercher de mon coté.
0
eriiic Messages postés 24603 Date d'inscription   Statut Contributeur Dernière intervention   7 275
 
Bonjour,

Pour chaque bouton ne mettre dans le code qu'une valeur dans une variable btn et appeler la macro commune. La macro commune testera cette variable.
eric
0
Coform
 
Merci Eric pour ta réponse.
Si je te comprends bien, je suis obligé de créer autant de sub que de bouton.
A l'intérieur de cette sub, la même ligne qui appelle une fonction avec passage de paramètre.

Cordialement
0
eriiic Messages postés 24603 Date d'inscription   Statut Contributeur Dernière intervention   7 275
 
Re,

une fonction ou un autre sub.
ex:

Dim btn As Integer
Private Sub CommandButton1_Click()
    btn = 1
    commun
End Sub
Sub commun()
    If btn = 1 Then
    '...
    End If
    '...
End Sub


eric
0
Coform
 
Merci pour ta réponse mais, si je puis me permettre, un peu d'optimisation serait un plus.
Avec ton code j'écrirais plutot.

Dim btn As Integer
Private Sub CommandButton1_Click()
btn = 1
commun
End Sub
Sub commun()
Select case btn
Case 1
(Actions)
Case 2
(Actions)
'...
End Select
'...
End Sub

Mais j'ai fait sans variable Btn, et sans Select, voilà ce que ça donne
Private Sub CommandButton1_Click()
Commun(1)
End Sub

Sub commun(Num as Byte)
(Actions, par exemple msgbox chr(Num + 64)
End Sub

Merci pour tes lumières.
0
michel_m Messages postés 16602 Date d'inscription   Statut Contributeur Dernière intervention   3 313
 
Bonjour tt le monde

Si tu crées tes boutons avec la barre d'outils "formulaire"

sub macro_unique()
 choix=Application.Caller
'choix est affecté du nom du bouton sur lequel tu as cliqué...

select case choix
etc


What Else ?
0
Coform
 
Merci pour cette information très intéressante.
Cependant, je suis tout de même dans l'obligation de créer une macro pour chaque bouton.
En fait, j'ai 26 boutons, un par lettre de l'alphabet.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
michel_m Messages postés 16602 Date d'inscription   Statut Contributeur Dernière intervention   3 313
 
Désolé, je viens d'essayer avec 2 boutons "formulaire"
les deux affectés à la m^me macro
Sub unique()
application.caller
end sub
me renvoie bien le nom sur bouton sur lequel j'ai cliqué

si tu utilises des boutons "contr^le", tu peux le faire je crois avec un module de classe, mais tu peux aussi mettre tes boutons dans un userform et boucler jusqu'à celui qui a le focus ou encore un combobox (sur userform ou feuille) avec les 26 lettres....

autrement pourquoi ne pas utiliser un tableau de cellules en utilisant Worksheet_selection change
0
Coform
 
Merci Michel pour tous ces éclaircissements.
0