Connaitre quel bouton a lancé une macro VBA
Doumé95
-
Coform -
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...
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...
Configuration: Windows Vista Internet Explorer 8.0 Excel 2003 & 2007
6 réponses
-
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é ;)
-
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
-
-
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 -
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-
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.
-
-
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 ? -
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
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 -