[VBA] obtenir le nom de l'objet appelant

Fermé
xantro - 20 févr. 2008 à 11:33
 Caribou - 13 nov. 2011 à 15:59
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.

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.
0
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é :).
0
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.
0
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
0

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
0
Me.ActiveControl.Name
-1