[VBA] obtenir le nom de l'objet appelant
xantro
-
Caribou -
Caribou -
Bonjour à tous (et à toutes ?),
Je viens vous demander votre aide pour un souci qui je pense est bénin, mais dont je n'arrive pas à me sortir.
Voilà le contexte est simple. Sur une feuille Excel, j'ai plusieurs bouton, portant tous un nom différent et ayant chacun un évenment _Click() (jusque là tout va bien).
Mais ce que j'aimerai faire, c'est que dans chaque evenement _Click() je puisse afficher le nom du bouton sur lequel on vient de cliquer.
En gros faire un :
Private Sub btn_test1_Click()
MsgBox "btn_test1"
End Sub
Sauf que je ne veux pas saisir le nom du bouton en dur comme je viens de le faire.
Dans beaucoup d'autres langage, il y a un argument Sender as Object dans l'événement, donnant des informations sur l'objets ayent appelé cet événement. En fait j'aimerai avoir un équivalent de ce Sender, ou, au minimum, avoir le nom de l'objet ayant appelé cet événement.
Sachant que je suis obligé (par mon client) de passé par des boutons et rien d'autres. Pour information ce nom de bouton me servira plus tard dans le traitement et pour l'édition d'une feuille, mais là n'est pas le problème :)
Voilà, j'espère avoir été assez clair et que vous pourrez m'aider.
Merci d'avance.
Je viens vous demander votre aide pour un souci qui je pense est bénin, mais dont je n'arrive pas à me sortir.
Voilà le contexte est simple. Sur une feuille Excel, j'ai plusieurs bouton, portant tous un nom différent et ayant chacun un évenment _Click() (jusque là tout va bien).
Mais ce que j'aimerai faire, c'est que dans chaque evenement _Click() je puisse afficher le nom du bouton sur lequel on vient de cliquer.
En gros faire un :
Private Sub btn_test1_Click()
MsgBox "btn_test1"
End Sub
Sauf que je ne veux pas saisir le nom du bouton en dur comme je viens de le faire.
Dans beaucoup d'autres langage, il y a un argument Sender as Object dans l'événement, donnant des informations sur l'objets ayent appelé cet événement. En fait j'aimerai avoir un équivalent de ce Sender, ou, au minimum, avoir le nom de l'objet ayant appelé cet événement.
Sachant que je suis obligé (par mon client) de passé par des boutons et rien d'autres. Pour information ce nom de bouton me servira plus tard dans le traitement et pour l'édition d'une feuille, mais là n'est pas le problème :)
Voilà, j'espère avoir été assez clair et que vous pourrez m'aider.
Merci d'avance.
Configuration: Windows XP Firefox 2.0.0.8
6 réponses
-
Bonjour,
Pour repondre à ta question
Private Sub btn_test1_Click()
'nom du boutton
MsgBox btn_test1.Name
'si tu veux connaitre le texte du bouton
MsgBox btn_test1.Caption
End Sub
Salut. -
Merci pour ta réponse
Mais en fait, je veux pouvoir me débrouiller sans avoir le nom de l'objet, c'est à dire sans le btn_test1. Faire en quelque sorte comme si je ne connaissais pas le bouton qui a appelé cet événement.
J'ai peut être mal formulé ma question, j'en suis désolé, mais je voudrais récupérer l'objet appelant, en faisant comme si je ne le connaissait pas.
Imaginons que je ne connaisse pas le bouton ayant appelé cette méthode, comment puis-je le récupérer ? comment savoir quel objet est l'appelant ?
J'ai du mal à l'expliquer désolé :). -
C'est bon j'ai trouvé une autre solution pour mon projet. Merci quand même :)
Cela dit je suis quand même curieux de savoir si il y a une réponse à ma question ^^
Donc si parmis vous quelqu'un peut répondre qu'il n'hésite pas même si le problème est réglé.
Merci et à la prochaine. -
Bonjour,
Le seul moyen que je connaisse est de cibler par la position du bouton.
Option Explicit Dim nbrBouton As Long, Boucle As Long ' Private Sub cmd_Charger_Click() nbrBouton = ActiveSheet.OLEObjects.Count For Boucle = 1 To nbrBouton If (ActiveSheet.OLEObjects.Item(Boucle).Left = 60) Then MsgBox ActiveSheet.OLEObjects.Item(Boucle).Name End If Next Boucle End Sub ' Private Sub cmd_Execute_Click() Dim nbrBouton As Long, Boucle As Long nbrBouton = ActiveSheet.OLEObjects.Count For Boucle = 1 To nbrBouton If (ActiveSheet.OLEObjects.Item(Boucle).Left = 120) Then MsgBox ActiveSheet.OLEObjects.Item(Boucle).Name End If Next Boucle End Sub '
Lupin -
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
Bonjour,
Pour connaitre le bouton appelant, WiWeb a donnée la solution la plus juste.Me.ActiveControl
Pour regrouper tout les évènements Click des boutons j'utiliserai un module de classe.
'----------------------------------------------------
'Dans le module ThisWorkbook
PrivateSub Workbook_Open() 'boucle sur chaque bouton pour les ajouter à la Class1 lors de l'ouverture du classeur Dim Ctrl As Control Set Collect = New Collection For Each Ctrl In Me.Controls If TypeOf Ctrl Is MSForms.CommandButton Then 'ajout de l'objet dans la classe Set Cl = New Class1 Set Cl.CmdBtn = Ctrl Collect.Add Cl End If Next Ctrl End Sub
'----------------------------------------------------
'Dans un module
Public Cl As Class1 Public Collect As Collection
'----------------------------------------------------
''Dans un module de classe nommée Class1
Public WithEvents CmdBtn As MSForms.CommandButton Private Sub CmdBtn_Click() Me.ActiveControl 'code de l'évènement End Sub
En espérant ne pas m'être tromper.
Caribou -