Appel d'une procédure de type NomVariable_Click

Résolu
Ein85 Messages postés 32 Statut Membre -  
pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   -
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. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
     
    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
    1. Ein85 Messages postés 32 Statut Membre
       
      Merci, ça marche très bien maintenant!
      0
  2. Zoul67 Messages postés 2001 Statut Membre 149
     
    Bonjour,

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


    (plutôt que Call).

    A+
    0
    1. Ein85 Messages postés 32 Statut Membre
       
      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?
      0
    2. Ein85 Messages postés 32 Statut Membre
       
      Finalement cs_Le Pivert a trouvé la solution mais la tienne m'a aidé ailleurs. Merci à toi pour ton aide.
      0
  3. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
     
    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

    0