Appel d'une procédure de type NomVariable_Click

Résolu
Bonjour à tous,

J'ai un programme qui crée des boutons dynamiquement dans une feuille Excel et qui leur assigne du code pour l'événement click.

Je suis en train de créer une nouvelle macro qui fait une recherche sur tous les boutons de la feuille et si l'un a "Delete" comme caption, je veux déclencher l'événement Click dudit bouton. J'ai fait pas mal de tests et de recherches mais je n'ai pas réussi à y parvenir.

Voici mon code:

Private Sub DeleteMacro_Click()

Dim Ctrl As OLEObject
Dim MyVar As String

For Each Ctrl In ActiveSheet.OLEObjects

      If Ctrl.Object.Caption = "Delete" Then
        MyVar = Ctrl.Name
        Call MyVar_Click
      End If
    
Next Ctrl

End Sub

Merci d'avance!

3 réponses

  1. Modérateur
    Bonjour,

    Une autre méthode est présentée ici : CallByName .

    Il convient toutefois de ne pas déclarer les fonctions événementielles en Private pour que cela fonctionne.
    Exemple :
    remplacer
    Private Sub CommandButton1_Click()
    par
    Sub CommandButton1_Click()


    Et ton code devient donc :
    Sub DeleteMacro_Click()
    Dim Ctrl As OLEObject
    Dim MyVar As String
    
       For Each Ctrl In ActiveSheet.OLEObjects
          If Ctrl.Object.Caption = "Delete" Then
             MyVar = Ctrl.Name
             CallByName ActiveSheet, MyVar & "_Click", VbMethod
          End If
       Next Ctrl
    End Sub

    1. Contributeur
      Bonjour,

      Voir ceci:

      https://excel.developpez.com/faq/?page=OleObject#DeclencheOleObject

      ce qui donne:

      Private Sub DeleteMacro_Click()
      
      Dim Ctrl As OLEObject
      Dim MyVar As String
      Dim mafeuille As String
      mafeuille = ActiveSheet.Name
      
      For Each Ctrl In ActiveSheet.OLEObjects
      
            If Ctrl.Object.Caption = "Delete" Then
              MyVar = Ctrl.Name
           Application.Run (mafeuille & "." & MyVar & "_Click")
            End If
          
      Next Ctrl
      
      End Sub
      
      1. Merci, ça marche très bien maintenant!
    2. Bonjour,

      Essaie
      MyVar=Ctrl.Name & "_Click"
      Application.Run MyVar


      (plutôt que Call).

      A+
      1. Bonjour,

        Malheureusement j'obtiens l'erreur d'exécution 1004: Erreur définie par l'application ou par l'objet.

        Sais-tu comment y remédier?
      2. Finalement cs_Le Pivert a trouvé la solution mais la tienne m'a aidé ailleurs. Merci à toi pour ton aide.