Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Activer CommandButton

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

ziopizza

XLDnaute Occasionnel
Bonjour le Forum,

Je voudrais activer des commandButton en passant par l'événement change de la feuille.
Je joins un petit exemple qui sera sûrement plus explicite.
Ma demande peut paraître bizarre mais mon appli a plus de 200
Boutons, et quant on connais le code cela sera plus facile de le
Taper que de chercher le bon bouton.
Merci à tous,

Yves [file name=essai_20051126203805.zip size=11278]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/essai_20051126203805.zip[/file]
 

Pièces jointes

Bonjour à tous,

Je ne reviens que très rarement poster sur le forum, mais je le consulte toujours régulièrement, et j'avais remarqué hier ta question, Ziopizza. Alorts comme je vois aujourd'hui que tu es toujours sans réponse, voici quelques pistes:

Pour le code pour appeler ta procédure liée à l'événement Click de tes boutons, il suffit a priori d'écrire:

Call CommandButton2_Click, le mot Call n'étant pas obligatoire.

Sauf que, les procédures événementielles liées à tes boutons sont par défaut de niveau du module de ton UserForm, donc non accessibles depuis un autre module (en l'occurence depuis ton code lié à ta feuille)

Pour que cela fonctionne, il te faut supprimer devant chaque procédure Sub CommandButton(n)_Click de ton userform le mot Private, afin que ces procédures deviennent accessibles depuis les autres modules.

Ensuite, pour que ta procédure sache où les trouver, tu peux préciser:
Call UserForm1.CommandButton2_Click

Et le tour est joué!


Voilà ce que cela donne pour moi:

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Application.Intersect(Range('A1'), Range(Target.Address)) Is Nothing Then
        If Range('A1') = 2 Then
            Call UserForm1.CommandButton2_Click
        ElseIf Range('A1') = 3 Then
            Call UserForm1.CommandButton3_Click
        End If
    End If
End Sub

Maintenant, je cherche (en vain) à te mettre une petite cerise sur le gateau. En effet, si tu as 200 boutons, tu vas devoir faire une boucle If...Elseif ou un Select Case 200 fois.

Je cherche donc à appeler la procédure en mettant son nom en variable
Quelque chose du type:
Call 'UserForm1.CommandButton' & Range('A1') & '_Click'
Mais je ne trouve pas pour le moment.
Je ne sais pas si c'est possible. L'idéal aurait été bien sûr au départ de créer une fonction regroupant toutes tes procédures.

En espérant t'avoir déjà un peu dépanné.

Bonne soirée,

Laurent.
 
Bonsoir à tous,


Je squatte le fil de ziopizza pour te saluer Laurent. J'espère que tu vas bien ainsi que ta petite famille. Bon anniversaire en retard, le 06 novembre est pas si loin et Joyeuses Pâques en avance.

Bises pour l'occasion.

Edition :



J'avais oublié l'essentiel, coucou de


Message édité par: Brigitte, à: 27/11/2005 17:03
 
Bonjour, Brigitte,

Merci de m'avoir envoyé ce petit coucou si rapidement.
Tout va très bien pour moi, et ma famille. Je vais d'ailleurs vite m'occuper des enfants.

Tu vois, de mon côté, je n'ai même pas eu le temps de me pencher sur le nouveau forum, et de voir comment remettre ma signature!
Mais comme David va nous concocter une nouvelle version encore plus perfomante, j'attendrai de voir le forum de 3ème génération!

En tout cas, je salue tout les membres de plus en plus nombreux d'XLD.
Bises

Laurent.
 
Bonsoir Yves, Laurent, Brigitte, bonsoir le forum,

Laurent, hier j'y ai passé un sacré bout de temps sur ce problème mais j'ai séché aussi sur la possibilité de pouvoir appeler une macro en y mettant une variable Sub CommandButton(n)_Click.
Si un jour tu trouves une réponse, mets-la je t'en prie dans ce fil je vais m'y inscrire.

Merci.
 
Bonsoir, Justine,

Désolé, j'ai essayé ta proposition sans succès. Je m'y suis peut-être mal pris. Mais je pense qu'après Call, il faut le nom intrinsèque de la macro, et surtout pas de chaîne de caractères. J'ai poursuivi par ailleurs mes recherches, notamment dans un bouquin de John Walkenbach, où j'ai trouvé ceci dans le chapitre traitant de l'appel d'une procédure à partir d'une autre procédure:

D'abord, il explique comment on le fait classiquement avec Call

Puis il montre l'utilisation de Application.run LaProcAAppeler

Et enfin ceci (je le cite):

'La meilleure raison que l'on peut avoir d'utiliser la méthode Run concerne le cas où le nom de la procédure est affecté à une variable. En fait, il s'agit du seul moyen d'exécuter une procédure de cette manière.'

Voici son exemple:


Code:
Sub Main()
    Dim SubAAppeler As String
    Select Case Weekday(Now)
        Case 1, 7: SubAAppeler = 'Weekend'
        Case Else: SubAAppeler = 'JourSemaine'
    End Select
    Application.Run SubAAppeler
End Sub

Sub Weekend()
    MsgBox 'Aujourd'hui, c'est le week-end'
End Sub

Sub JourSemaine()
    MsgBox 'Aujourd'hui, c'est un jour de la semaine'
End Sub

Là, je me suis dit: 'EUREKA'
Malheureusement, je butte toujours.


J'ai essayé quelque chose du style:
Code:
    Dim ProcAAppeler As String
    ProcAAppeler = 'CommandButton' & Range('A1') & '_Click'
    Application.Run ProcAAppeler
End Sub

Mais ça ne passe pas.
Je pense que quand on appelle une macro avec Run, Vba ne la trouve pas car elle appartient en fait au UserForm et non à un module standard.

J'ai essayé de passer par une procédure intermédiaire dans le Worksheet_Change, puis faire jouer le Run depuis le UserForm (voir pièce jointe), mais rien n'y fait.

Il y a peut-être quelque chose à faire en passant par un module de classe, mais je ne sais pas trop faire.

Sinon, il y a toujours possibilité de faire une macro qui réécrit elle-même tous les codes répétitifs (faire une recherche sur 'a la volée')

Bref, voici un sujet à suivre de près.

Bonne soirée à tous

Laurent. [file name=AppelProcVariable.zip size=14704]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/AppelProcVariable.zip[/file]
 

Pièces jointes

bonsoir Yves , Laurent , Brigitte , Robert et Justine

si le prefixe 'Private' est préalablement oté dans l'UserForm tu peux tester

Private Sub Worksheet_Change(ByVal Target As Range)
CallByName UserForm1, 'CommandButton' & Range('A1') & '_Click', VbMethod
End Sub



bonne soirée
MichelXld
 
Bonsoir le fil, bonsoir le forum,

CallByName Appele-la par son nom !!! J'en ri encore tellement ça má énervé. Et c'est Michel qui gagne une tringle à rideau...
Un grand merci à tous car une fois de plus je vois à quel point le partage de connaissance est la raison d'être de ce site.
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
8
Affichages
2 K
Réponses
3
Affichages
2 K
P
Réponses
4
Affichages
1 K
placis
P
A
Réponses
4
Affichages
1 K
H
Réponses
2
Affichages
837
henri
H
B
Réponses
6
Affichages
2 K
Bertrand
B
M
Réponses
2
Affichages
2 K
max47
M
C
Réponses
3
Affichages
1 K
M
Réponses
2
Affichages
899
maqfisto
M
P
Réponses
1
Affichages
2 K
Pierrot93
P
Z
Réponses
7
Affichages
1 K
B
  • Question Question
Réponses
0
Affichages
1 K
Bertrand
B
M
Réponses
1
Affichages
1 K
L
Réponses
4
Affichages
2 K
Laydie
L
A
Réponses
2
Affichages
1 K
azuréens
A
P
Réponses
18
Affichages
4 K
P
P
Réponses
1
Affichages
726
B
  • Question Question
Réponses
1
Affichages
1 K
N
Réponses
5
Affichages
2 K
Nicolas
N
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…