[VBA] obtenir le nom de l'objet appelant

xantro -  
 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.
Configuration: Windows XP
Firefox 2.0.0.8

6 réponses

  1. amigo
     
    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
  2. xantro
     
    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
  3. xantro
     
    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
  4. Lupin.A
     
    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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Caribou
     
    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