Appel d'une procédure de type NomVariable_Click

Résolu/Fermé
Ein85 Messages postés 32 Date d'inscription jeudi 10 décembre 2015 Statut Membre Dernière intervention 2 mars 2016 - Modifié par crapoulou le 16/12/2015 à 16:25
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 - 17 déc. 2015 à 07:51
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

cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 728
16 déc. 2015 à 18:23
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
Ein85 Messages postés 32 Date d'inscription jeudi 10 décembre 2015 Statut Membre Dernière intervention 2 mars 2016
16 déc. 2015 à 18:43
Merci, ça marche très bien maintenant!
0
Zoul67 Messages postés 1959 Date d'inscription lundi 3 mai 2010 Statut Membre Dernière intervention 30 janvier 2023 149
Modifié par Zoul67 le 16/12/2015 à 16:35
Bonjour,

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


(plutôt que Call).

A+
0
Ein85 Messages postés 32 Date d'inscription jeudi 10 décembre 2015 Statut Membre Dernière intervention 2 mars 2016
16 déc. 2015 à 18:13
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
Ein85 Messages postés 32 Date d'inscription jeudi 10 décembre 2015 Statut Membre Dernière intervention 2 mars 2016
16 déc. 2015 à 19:01
Finalement cs_Le Pivert a trouvé la solution mais la tienne m'a aidé ailleurs. Merci à toi pour ton aide.
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
17 déc. 2015 à 07:51
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