[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.
A voir également:
- [VBA] obtenir le nom de l'objet appelant
- Nommez une application d'appel vidéo ou de visioconférence - Guide
- Obtenir windows 10 gratuitement - Accueil - Mise à jour
- Changer le nom de son iphone - Guide
- Cliquez sur ce lien. en n'utilisant que le clavier, quel mot obtenez-vous ? ✓ - Forum souris / Touchpad
- Nom de compte steam exemple - Forum Jeux vidéo
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.
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é :).
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.
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.
Lupin
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.
Pour regrouper tout les évènements Click des boutons j'utiliserai un module de classe.
'----------------------------------------------------
'Dans le module ThisWorkbook
'----------------------------------------------------
'Dans un module
'----------------------------------------------------
''Dans un module de classe nommée Class1
En espérant ne pas m'être tromper.
Caribou
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