Recuperer la valeur d'un bouton cliqué

Résolu
Dudulle32 Messages postés 42 Date d'inscription mercredi 10 mai 2006 Statut Membre Dernière intervention 31 janvier 2014 - 17 sept. 2012 à 18:08
MarcPL Messages postés 172 Date d'inscription jeudi 8 décembre 2011 Statut Membre Dernière intervention 21 juillet 2013 - 19 sept. 2012 à 17:28
Bonjour à tous

Sur une feuille Excel j'ai un schéma (une image) avec plusieurs flux. Sur chacun de ces flux j'ai placé un bouton de formulaire à cliquer.
Le but est d'afficher un userform contenant quelques infos sur ce flux, un peu comme une info bulle.

Je voudrais exécuter la même macro à chaque fois que je clique sur un bouton (facile), mais je voudrais pouvoir récupérer le nom du bouton (bouton 1 ; bouton 2 etc) dans la macro pour pouvoir adapter les infos du flux sélectionné. Ces infos se trouvent dans un grand tableau sur la même feuille que celle qui contient l'image.

Voici mon code (très simple):
Sub Bouton3_Cliquer()

'(on recupere la valeur du bouton dans la variable bouton)

UserForm1.Label2 = Cells(40, bouton).Value
UserForm1.Show

End Sub


En espérant que ce soit faisable...

Merci d'avance.

21 réponses

MarcPL Messages postés 172 Date d'inscription jeudi 8 décembre 2011 Statut Membre Dernière intervention 21 juillet 2013 2
18 sept. 2012 à 11:01
Bonjour Dudulle32 !

Application.Caller t'indique le nom du bouton appelant, exactement ce dont tu as besoin !

___________________________________________________________________________________________________________________
Comme la vitesse de la lumière est supérieure à celle du son, certains ont l'air brillant avant d'avoir l'air con !
2
NHenry Messages postés 15112 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 avril 2024 159
17 sept. 2012 à 18:37
Bonjour,

Ben, avec :
Sub Bouton3_Cliquer()
C'est le bouton Bouton3 qui a été appuyé, quel est le problème ?

Pour automatiser tout ça, tu peux faire une Sub qui prend en paramètre le bouton appuyé :
Sub MaSub(Byval pButton as Button)

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, celui-ci pour bien poser votre question ou encore celui-ci pour les PFE et autres exercices.[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : ).[*]En VB.NET pensez à activer Option Explicit et Option Strict (propriété du projet) et à retirer l'import automatique de l'espace de nom Microsoft.VisualBasic (onglet Références dans les propriétés du projet).[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés/list
---
0
Dudulle32 Messages postés 42 Date d'inscription mercredi 10 mai 2006 Statut Membre Dernière intervention 31 janvier 2014
17 sept. 2012 à 19:23
Bonjour

Le soucis c'est que j'appelle la même macro avec tous les boutons (pour ne pas avoir à l'écrire plusieurs fois).

Je vais essayer ta proposition.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
17 sept. 2012 à 20:25
Bonjour,
Le ridicule ne tuant pas, je vais me réoudre à paraître bête :
Qu'est donc :
Sub Bouton3_Cliquer()

Car je ne vois pas d'évènement portant ce nom (suis-je donc bête !!!)
Est-ce une procédure ? Est-ce autre chose ? et quoi exactement (car tu n'en parles pas !) ?




________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Dudulle32 Messages postés 42 Date d'inscription mercredi 10 mai 2006 Statut Membre Dernière intervention 31 janvier 2014
17 sept. 2012 à 23:46
Bonjour

Cette procédure est la 1ere qui a été crée (automatiquement) quand j'ai placé mon 1er bouton sur la feuille ; j'ai gardé le nom par défaut, mais tous les autres boutons qui ont suivi font appel à cette même procédure.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
18 sept. 2012 à 07:56
Cette procédure est la 1ere qui a été crée (automatiquement) quand j'ai placé mon 1er bouton sur la feuille ; j'ai gardé le nom par défaut

Ah !
De deux choses l'une, dans ce cas :
- ou (comme je l'ai dit plus haut) je suis devenu sénile et bête
- ou ta version de Excel est assez "particulière". Quelle est donc cette version ?

Soyons sérieux !
Tu n'as pas créé une procédure évènementielle (c'est Click et non cliquer, par défaut), mais une macro à laquelle tu as donné le nom Bouton3_Cliquer et que tu lances toi-même ! Ce qui :
- est TRES LOIN d'être pareil !
- ne saurait te permettre (et pour cause) ce que tu cherches à faire !

Alors que la procédure évènementielle d'un bouton se déclenche seule au click de ce bouton (que tu connais alors forcément - comme exposé par NHenry) !
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
0
Dudulle32 Messages postés 42 Date d'inscription mercredi 10 mai 2006 Statut Membre Dernière intervention 31 janvier 2014
18 sept. 2012 à 08:25
Bonjour

Désolé je ne suis pas très à l'aise avec les termes.
Donc oui, il s'agit d'une macro qui se lance lors du click sur le bouton (bouton de formulaire).

Dois-je utiliser l'autre type de bouton ?
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
18 sept. 2012 à 08:33
Donc oui, il s'agit d'une macro qui se lance lors du click sur le bouton (bouton de formulaire).

Seule ? Et avec ce nom ?
Je ne le crois pas !
Allez : metsd-nous ici un copier/coller du code (tout) que contient le module de code de tes macros (Module1, je pense).




________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
0
Dudulle32 Messages postés 42 Date d'inscription mercredi 10 mai 2006 Statut Membre Dernière intervention 31 janvier 2014
18 sept. 2012 à 12:15
Seule ? Et avec ce nom ?
Je ne le crois pas !
Allez : metsd-nous ici un copier/coller du code (tout) que contient le module de code de tes macros (Module1, je pense).


C'est pourtant le cas : Je place un bouton sur la feuille Excel, une fenêtre s'ouvre immédiatement pour me demander d'associer une macro au click du bouton, avec comme nom par défaut Bouton(n°du bouton)_Cliquer.
Je peux alors choisir de créer une nouvelle macro avec ce nom proposé par défaut.

Bien sur lorsque cette macro est crée elle en contient rien du tout, le code que j'ai posté plus haut représente la totalité de ce que j'avais écris.

Je viens de refaire ceci en guise de test:
Sub Bouton3_Cliquer()

nomdubouton = Application.Caller
MsgBox (nomduboutton)
End Sub


mais il n'y a aucun texte dans la msgbox...
0
MarcPL Messages postés 172 Date d'inscription jeudi 8 décembre 2011 Statut Membre Dernière intervention 21 juillet 2013 2
18 sept. 2012 à 12:40
LoL !   Normal t'as fait une faute de frappe pour le nom de la variable dans le MsgBox !

___________________________________________________________________________________________________________________
Comme la vitesse de la lumière est supérieure à celle du son, certains ont l'air brillant avant d'avoir l'air con !
0
Dudulle32 Messages postés 42 Date d'inscription mercredi 10 mai 2006 Statut Membre Dernière intervention 31 janvier 2014
18 sept. 2012 à 13:25
En effet, quelle andouille je suis...

En corrigeant la faute de frappe ça fonctionne très bien ; un grand merci à toi :)
0
MJPMJPMJP Messages postés 18 Date d'inscription jeudi 12 février 2009 Statut Membre Dernière intervention 15 février 2013
19 sept. 2012 à 08:58
bonjour a tous

" Le ridicule ne tuant pas, je vais me réoudre à paraître bête "

la rentrée c'est dur pour tout le monde....

merci pour le
"application.caller"

@+JP
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
19 sept. 2012 à 10:05
Bonjour, MJPMJPMJP,
Continuant à être bête et ne trouvant nulle-part l'évènement "cliquer", je rappelle ma question restée sans réponse :
ou ta version de Excel est assez "particulière". Quelle est donc cette version ?

Mais ton intervention me donne l'espoir d'avoir une réponse : celle que tu vas me donner, toi !


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
19 sept. 2012 à 10:46
Et je te rappelle cette question (que j'ai posée) :
Est-ce une procédure ? Est-ce autre chose ? et quoi exactement (car tu n'en parles pas !) ?

et la réponse reçue :
Cette procédure est la 1ere qui a été crée (automatiquement) quand j'ai placé mon 1er bouton sur la feuille ; j'ai gardé le nom par défaut

Or, je ne connais pas de procédure créée automatiquement (lors du placement d'un bouton) autre que la procédure évènementielle Click (et non Cliquer)
Tu m'expliques, maintenant, le chemin pris ?

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
0
Dudulle32 Messages postés 42 Date d'inscription mercredi 10 mai 2006 Statut Membre Dernière intervention 31 janvier 2014
19 sept. 2012 à 16:02
Quand tu places un bouton directement sur une feuille tu as le choix entre 2 possibilités: Utiliser un bouton qui est un contrôle activex, qui appelle une procédure appelée Private Sub CommandButton(n° du bouton)_Click(), ou bien utiliser un bouton qui est un contrôle de formulaire, qui appelle une macro au choix, mais dont le nom par défaut est Bouton(n° du bouton)_Cliquer

A ma connaissance on trouve ce choix dans toutes les versions de Excel.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
19 sept. 2012 à 16:27
1)
Il se trouve que chez moi (version 2007) l'évènement par défaut n'est pas "cliquer", mais clic !
Quelle est donc la version qui propose :
Sub Bouton3_Cliquer()
et non
Sub Bouton7_Clic()
2) tu dis plus haut vouloir la même procédure pour chaque bouton cliqué.
Cela se traduit par :
une procédure unique (appelons-la toto) appelée paer l'évènement Clic de chaque bouton
Exemple :
Sub toto(quoi)
 MsgBox "voilà mes instructions pour " & quoi.Name
End Sub
Sub Bouton6_Clic()
  toto ActiveSheet.Shapes("Bouton 6")
End Sub
Sub Bouton7_Clic()
   toto ActiveSheet.Shapes("Bouton 7")
End Sub

sans Application.Caller
ou encore (avec Application.Caller)
Sub toto()
 MsgBox Application.Caller
End Sub
Sub Bouton6_Clic()
  toto 
End Sub
Sub Bouton7_Clic()
   toto 
End Sub

Je préfère personnellement, dans ce cas, la première méthode qui, n'utilisant pas Application.Caller, est moins gourmande (car directe)
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
0
Dudulle32 Messages postés 42 Date d'inscription mercredi 10 mai 2006 Statut Membre Dernière intervention 31 janvier 2014
19 sept. 2012 à 16:42
Ma version est celle de 2010. ; je viens de vérifier sur la 2003 et effectivement l'intitulé est différent (Bouton1_QuandClic).

Ta variante fonctionne probablement, mais l'avantage de Application.Caller c'est que je n'ai même pas besoin d'une procédure par bouton, j'appelle la même macro avec tous mes boutons.

Pour info voici le code que j'ai finalement utilisé:

Sub Bouton3_Cliquer()

Dim nomduboutton As String
nomduboutton = Application.Caller
Range("A50") = nomduboutton

UserForm1.Label2 = Cells(63, 2).Value
UserForm1.Label3 = Cells(64, 2).Value * 100 & "%"
UserForm1.Label5 = Cells(65, 2).Value * 100 & "%"
UserForm1.Label7 = Cells(66, 2).Value * 100 & "%"
UserForm1.Label9 = Cells(67, 2).Value * 100 & "%"
UserForm1.Label11 = Cells(68, 2).Value * 100 & "%"
UserForm1.Label13 = Cells(69, 2).Value & " kg/h"
UserForm1.Label15 = Cells(70, 2).Value & " °C"
UserForm1.Label17 = Cells(71, 2).Value & " b"
UserForm1.Label19 = Cells(72, 2).Value & " kg/m3"


UserForm1.Show

End Sub


L'écriture dans la cellule A50 permet d'aller de mettre à jour les cellules 63,2 à 72,2 avec une fonctionne recherchev à partir d'une table contenant les caractéristiques de tous mes flux.
0
Dudulle32 Messages postés 42 Date d'inscription mercredi 10 mai 2006 Statut Membre Dernière intervention 31 janvier 2014
19 sept. 2012 à 16:45
D'ailleurs au passage il y a un truc que je ne comprend pas ; la fonction val(nomduboutton) ne me donne pas la valeur numérique du bouton (alors que la chaine de texte contient bien cette valeur), j'ai systématiquement 0.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
19 sept. 2012 à 16:46
Fais comme tu l'entends.
Vérifie toutefois (sait-on jamais) que la portabilité existe entre deux versions en dépit du fait que la procédure porte un nom différent.


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
19 sept. 2012 à 16:57
ne me donne pas la valeur numérique du bouton (alors que la chaine de texte contient bien cette valeur), j'ai systématiquement 0

Parce que la fonction Val(chaine) te retourne la valeur numérique des premiers caractères numériques de la chaîne.
Ainsi : Val("A") = 0
Val("Bc1") = 0
Val("32blabla") = 32


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
0
Rejoignez-nous