Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Excel > Macros et VBA Excel
Macros et VBA Excel Vos questions relatives aux macros Excel, à l'utilisation de VBA et à l'automatisation de vos classeurs Excel.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 17/11/2011, 18h35   #1
Invité régulier
 
Homme
Inscription : novembre 2011
Messages : 7
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : novembre 2011
Messages : 7
Points : 5
Points : 5
Par défaut Déterminer le choix fait dans un menu

Bonsoir,

je crée plusieurs boutons dans un menu, qui envoie tous à la même fonction.
Comment fait on pour déterminer, dans la fonction, le choix qui a été fait par l'utilisateur ?

Pour être plus clair, un peu de code :
Code :
1
2
3
4
5
6
7
8
9
10
11
Sub Creation()
    Set MenuContext = ShortcutMenus(xlWorksheetCell).MenuItems.AddMenu(Caption:="TOTO", before:=1)
    MenuContext.MenuItems.Add "TOTO1", "Traitement"
    MenuContext.MenuItems.Add "TOTO2", "Traitement"
    MenuContext.MenuItems.Add "TOTO3", "Traitement"
End Sub
 
Sub Traitement()
    ' Comment je sais ici si je suis venu en cliquant sur TOTO1, sur TOTO2 ou sur TOTO3 ?
 
End Sub
Merci d'avance pour votre aide.
FreeZf est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/11/2011, 18h52   #2
Membre confirmé
 
Avatar de lelensois16
 
Homme Romain M.
Étudiant
Inscription : avril 2009
Messages : 167
Détails du profil
Informations personnelles :
Nom : Homme Romain M.
Localisation : France, Nord (Nord Pas de Calais)

Informations professionnelles :
Activité : Étudiant
Secteur : Conseil

Informations forums :
Inscription : avril 2009
Messages : 167
Points : 204
Points : 204
Bonjour,

Vous avez plusieurs possibilités :

- Créer une variable GLOBALE pour chaque bouton. A l'ouverture du formulaire , elle est égale 0. A chaque clic du bouton ( évenement OnClic) , la variable prend la valeur 1.
- Utiliser la propriété TAG
- Réorganiser le code. Je ne vois pas pourquoi créer 3 boutons à chaque fois ... Pourquoi ne pas utiliser 3 boutons "fixes" et d'y associer des évenements par programmation évenementielle ( surtout si on créer une fonction avec un paramètre)

Bien cdt

RM
lelensois16 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/11/2011, 20h26   #3
Expert Confirmé
 
Avatar de patricktoulon
 
patrick
Inscription : avril 2009
Messages : 1 829
Détails du profil
Informations personnelles :
Nom : patrick
Âge : 42
Localisation : France, Var (Provence Alpes Côte d'Azur)

Informations professionnelles :
Secteur : Bâtiment

Informations forums :
Inscription : avril 2009
Messages : 1 829
Points : 2 857
Points : 2 857
Envoyer un message via MSN à patricktoulon
bonjour

essaie ca un peu

je créé ton menu et tes 3 boutons toto qui appelle la même macro

et tu determine quelle bouton a été cliqué par le "application.actioncontrol.tag"
allez assez de blabla
voila le code
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
 
Sub Creation_menu_popup_avec_plusieurs_boutons_dans_menu_contextuel()
 
    Dim Cpop1 As CommandBarPopup
    Dim Cbut As CommandBarButton
    Dim MaBarre As CommandBar
    resetmenu
 
    Set MaBarre = Application.CommandBars("cell")
    'on ajoute le popup qui va comporté tout les boutons
    Set Cpop1 = MaBarre.Controls.Add(msoControlPopup, before:=1)'on le met en tete de menu 
    With Cpop1
        ' on nomme le popup
        .Caption = "MENU DE TOTO"    '<-- label du sous-menu
 
    End With
 
'1 er bouton
    ' on ajoute le bouton au popup
    Set Cbut = Cpop1.Controls.Add(Type:=msoControlButton)
    With Cbut
        .FaceId = 326    '<-- bouton avec icône + texte
        .Caption = "TOTO 1"    '<-- label du bouton
        .OnAction = "la_meme_macro"    ' appel a la macro associée
        .Tag = "1er bouton"
    End With
 
    'on repete l'operation ----((with cbut end with)))---- autant de fois que l'on veut de boutons
'2eme bouton
    Set Cbut = Cpop1.Controls.Add(Type:=msoControlButton)
    With Cbut
        .FaceId = 326    '<-- bouton avec icône + texte
        .Caption = "TOTO 2"    '<-- label du bouton
        .OnAction = "la_meme_macro"
        .Tag = "2eme bouton"
    End With
 
   '3eme bouton
    Set Cbut = Cpop1.Controls.Add(Type:=msoControlButton)
    With Cbut
        .FaceId = 326    '<-- bouton avec icône + texte
        .Caption = "TOTO 3"    '<-- label du bouton
        .OnAction = "la_meme_macro"
        .Tag = "3eme bouton"
    End With
 
 
End Sub
Sub la_meme_macro()
    resultat = CommandBars.ActionControl.Tag    ' on recupere le tag du bouton que tu vien de cliquer
 
    Select Case resultat
    Case "1er bouton"
        MsgBox "coucou 'tu viens de cliquer sur le 1 er bouton "
 
    Case "2eme bouton"
        MsgBox "coucou 'tu viens de cliquer sur le 2eme bouton "
 
    Case "3eme bouton"
        MsgBox " coucou 'tu viens de cliquer sur le 3eme bouton "
 
 
 
    End Select
End Sub
' tu appelle cette macro a la fermeture du classeur pour réinitialiser le menu des cellules 
Sub resetmenu()
    Application.CommandBars("cell").reset ' en leve les modifications
End Sub

il est vrai que ta facon d'ajouter le menu toto est seduisante mais pour gérer les propriétés je n'ai pas trouver de donnée de facon avec ta methode


au plaisir

rebonsoir
quand je disais que ta méthode est séduisante au niveau du code
je n'imaginait pas a quel point réduction de code au maximum

alors voila avec ta methode:'on utilisera toujour le "application.actioncontrol" mais ".control" dans la macro que vont appeler les 3 boutons
ça donne ceci:

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
 
 
' n'ayant pas trouvé comment mettre un tag sur tes boutons avec ta méthode _
  je me sert de la captions du bouton toujours dans la même macro appelée a l'action de un des 3 boutons
Sub truc()
    resetmenu
    'on ajoute le menu
    Set menucontext = ShortcutMenus(xlWorksheetCell).MenuItems.AddMenu(Caption:="TOTO", before:=1)
    'on ajoute le 1er bouton
    menucontext.MenuItems.Add Caption:="TOTO1", OnAction:="la_meme_macro2"    'on appelle la meme macro
    'on ajoute le 2eme bouton
    menucontext.MenuItems.Add Caption:="TOTO2", OnAction:="la_meme_macro2"    'on appelle la meme macro
    'on ajoute le 3eme  bouton
    menucontext.MenuItems.Add Caption:="TOTO3", OnAction:="la_meme_macro2"    'on appelle la meme macro
 
 
End Sub
 
Sub la_meme_macro2()
 
    Select Case CommandBars.ActionControl.Caption    ' on recupere maintenant le caption du bouton que tu vien de cliquer
 
    Case "TOTO1"
        MsgBox "coucou 'tu viens de cliquer sur le 1 er bouton "
 
    Case "TOTO2"
        MsgBox "coucou 'tu viens de cliquer sur le 2eme bouton "
 
    Case "TOTO3"
        MsgBox " coucou 'tu viens de cliquer sur le 3eme bouton "
    End Select
End Sub
'on remet le menu d'origine a appeler l'ors de la fermeture du classeur
Sub resetmenu()
    Application.CommandBars("cell").reset    ' en leve les modification
End Sub
je te remercie de m'avoir posé cette colle elle m'a fait découvrir une autre méthode pour ajouter un/des items dans le menu contextuel des cellules

j'espère que ça te servira


n'hésite pas le sujet m'intéresse je cherche encore a y intégré les autres propriétés que l'on peut avoir avec ma méthode
au plaisir
__________________
mes fichiers dans les contributions:
mon formulaire mail avec CDO en vba et mon formulaire mail avec CDO en vbs dans un HTA
mon nouveau mouse in out pour les boutons dans un userform
mon addin pour prendre un cliché de selection de cellules

si ton problème est résolu n'oublie pas de pointer :résolu:ça peut servir aux autres
et n'oublie pas de voter
patricktoulon est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/11/2011, 08h02   #4
Expert Confirmé Sénior
 
Avatar de Qwazerty
 
Homme Stéphane
La très haute tension :D
Inscription : avril 2002
Messages : 2 446
Détails du profil
Informations personnelles :
Nom : Homme Stéphane
Âge : 32
Localisation : France

Informations professionnelles :
Activité : La très haute tension :D
Secteur : Service public

Informations forums :
Inscription : avril 2002
Messages : 2 446
Points : 4 620
Points : 4 620
Envoyer un message via MSN à Qwazerty
Salut
J'ai utilisé la génération de boutons dans le menu contextuel dans le fichier planning qu'on utilise au boulot.
Afin de pouvoir passer plus de paramètres, je place dans le tag mes paramètres les uns à la suite des autres en les séparant avec un caractère donné, par exemple une virgule. Ensuite dans le code de traitement du clic, j'utilise la fonction Split pour créer un tableau contenant mes différents paramétrés.

++
Qwaz
__________________

MagicQwaz := Harry Potter la baguette en moins
Le monde dans lequel on vit
HammerFest
Ma page perso DVP - Dernier Tutoriel : VBA & Internet Explorer
Qwazerty est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/11/2011, 17h08   #5
Invité régulier
 
Homme
Inscription : novembre 2011
Messages : 7
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : novembre 2011
Messages : 7
Points : 5
Points : 5
Bonjour,

merci pour vos réponses.
La solution CommandBars.ActionControl.Caption fonctionne parfaitement !

L'idée est effectivement de charger le nom des menus et sous-menus/boutons à partir d'une petite base de donnée. La macro à executer restant toujours la même, cette solution est parfaitement adaptée.

Je suis satisfait que ma question ait été bonne, je crains toujours de demander des choses simples à trouver sur les forum.
Mais bon, j'avais tellement chercher avant de la poser, que je me doutais bien que ce n'était pas si simple !

++
FreeZf est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/11/2011, 16h35   #6
Expert Confirmé
 
Avatar de patricktoulon
 
patrick
Inscription : avril 2009
Messages : 1 829
Détails du profil
Informations personnelles :
Nom : patrick
Âge : 42
Localisation : France, Var (Provence Alpes Côte d'Azur)

Informations professionnelles :
Secteur : Bâtiment

Informations forums :
Inscription : avril 2009
Messages : 1 829
Points : 2 857
Points : 2 857
Envoyer un message via MSN à patricktoulon
Par défaut re

bonjour FreeZf et qwazerty

ayant trouvé cette methode seduisante au niveau de reduction du code

j'ai poussé la reduction du code a son maximum

le résultat est tres surprenant

voici le code
Code :
1
2
3
4
5
6
7
8
9
10
11
 
'derniere solution avec code  reduit au maximum
Sub ajout_de_menu_dans_le_menu_contextuel_des_cellules2()
    Application.CommandBars("cell").reset    'on remet le menu contextuel d'origine
    Set mon_menu = ShortcutMenus(xlWorksheetCell).MenuItems.AddMenu("Menu TOTO", before:=1)    ' ajout du menu "Mon Menu"au menu contextuel des cellules en tete de menu
 
' ajout des 3 bouton dans le nouveau menu popup "Menu TOTO"dans le "menucontext" a l'aide d'une boucle
    For i = 1 To 3
         mon_menu.MenuItems.Add Caption:=("TOTO" & i), OnAction:="macro_unique"
    Next
End Sub
et la macro unique

Code :
1
2
3
4
5
6
7
8
9
10
Sub macro_unique()
    Select Case CommandBars.ActionControl.Caption
    Case "TOTO1"
        MsgBox "vous venez de cliquer sur le bouton N°1" & vbCrLf & "son Nom est " & vbCrLf & CommandBars.ActionControl.Caption
    Case "TOTO2"
        MsgBox "vous venez de cliquer sur le bouton N°2" & vbCrLf & "son Nom est " & vbCrLf & CommandBars.ActionControl.Caption
    Case "TOTO3"
        MsgBox "vous venez de cliquer sur le bouton N°3" & vbCrLf & "son Nom est " & vbCrLf & CommandBars.ActionControl.Caption
    End Select
End Sub

pour qwazerty:
Citation:
Salut
J'ai utilisé la génération de boutons dans le menu contextuel dans le fichier planning qu'on utilise au boulot.
Afin de pouvoir passer plus de paramètres, je place dans le tag mes paramétrés les uns à la suite des autres en les séparant avec un caractère donné, par exemple une virgule. Ensuite dans le code de traitement du clic, j'utilise la fonction Split pour créer un tableau contenant mes différents paramétrés.

++
Qwaz
le probleme c'est que je ne connais pas les constantes voir meme si elles existent pour modifier le tag,le faceid

avec "application.commandbar........" c'est simple mais avec "ShortcutMenus(xlWorksheetCell)....... je n'est rien trouvé


au plaisir
__________________
mes fichiers dans les contributions:
mon formulaire mail avec CDO en vba et mon formulaire mail avec CDO en vbs dans un HTA
mon nouveau mouse in out pour les boutons dans un userform
mon addin pour prendre un cliché de selection de cellules

si ton problème est résolu n'oublie pas de pointer :résolu:ça peut servir aux autres
et n'oublie pas de voter
patricktoulon est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/11/2011, 07h08   #7
Expert Confirmé Sénior
 
Avatar de Qwazerty
 
Homme Stéphane
La très haute tension :D
Inscription : avril 2002
Messages : 2 446
Détails du profil
Informations personnelles :
Nom : Homme Stéphane
Âge : 32
Localisation : France

Informations professionnelles :
Activité : La très haute tension :D
Secteur : Service public

Informations forums :
Inscription : avril 2002
Messages : 2 446
Points : 4 620
Points : 4 620
Envoyer un message via MSN à Qwazerty
Salut
Je n'utilise pas shortcutMenus non plus, j'essaierai de mettre mon fichier en ligne dans une contribution quand j'aurais le temps (et le courage), il faut que je l'anonymise un peu avant cela.
++
Qwaz
__________________

MagicQwaz := Harry Potter la baguette en moins
Le monde dans lequel on vit
HammerFest
Ma page perso DVP - Dernier Tutoriel : VBA & Internet Explorer
Qwazerty est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/11/2011, 14h33   #8
Expert Confirmé
 
Avatar de patricktoulon
 
patrick
Inscription : avril 2009
Messages : 1 829
Détails du profil
Informations personnelles :
Nom : patrick
Âge : 42
Localisation : France, Var (Provence Alpes Côte d'Azur)

Informations professionnelles :
Secteur : Bâtiment

Informations forums :
Inscription : avril 2009
Messages : 1 829
Points : 2 857
Points : 2 857
Envoyer un message via MSN à patricktoulon
Par défaut re

bonjour qwazerty

je te remercie pour le fichier

cela dit j'avais bien compris comment tu transporte les parametres en argument par le tag du control en utilisant la fonction split par les virgules ou tout autre symbole

ce que je cherche c'est comment metre un tag avec la formule shortcutmenus
je ne connaissais pas j'ai commencé vba avec 2007

il semblerait que ca soit l'ancienne methode mais neanmoins interressante
au niveau de la longueur du code

d'ailleur j'ai trouvé ceci dans une page internet en faisant une recherche
il semblerait que des arguments soit disponibles

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
 
 Sub truc2()
Application.CommandBars("cell").reset
Dim MyMenu As Object
 
Set MyMenu = Application.ShortcutMenus(xlWorksheetCell).MenuItems.AddMenu("Menu Perso", 1)
 
With MyMenu.MenuItems
 
    'ajout "nom du bouton",macro associée, je met quoi ici?, emplacement 'du bouton,"ici entre guillemet je met quoi?"
 'je constate aussi que pour placer le bouton a un endroit precis il n'est 'pas necessaire de marquer "before:=1"simplement le chiffre
 
 .Add "Monbouton1", "MyMacro1", , 1, ""
    .Add "Monbouton2", "MyMacro1", , 2, , ""
 
 
 
End With
 
Set MyMenu = Nothing
 
End Sub
 
Sub MyMacro1()
MsgBox CommandBars.ActionControl.Tag
End Sub

au plaisir
__________________
mes fichiers dans les contributions:
mon formulaire mail avec CDO en vba et mon formulaire mail avec CDO en vbs dans un HTA
mon nouveau mouse in out pour les boutons dans un userform
mon addin pour prendre un cliché de selection de cellules

si ton problème est résolu n'oublie pas de pointer :résolu:ça peut servir aux autres
et n'oublie pas de voter
patricktoulon est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/11/2011, 22h15   #9
Expert Confirmé Sénior
 
Avatar de Qwazerty
 
Homme Stéphane
La très haute tension :D
Inscription : avril 2002
Messages : 2 446
Détails du profil
Informations personnelles :
Nom : Homme Stéphane
Âge : 32
Localisation : France

Informations professionnelles :
Activité : La très haute tension :D
Secteur : Service public

Informations forums :
Inscription : avril 2002
Messages : 2 446
Points : 4 620
Points : 4 620
Envoyer un message via MSN à Qwazerty
Salut

Ok je comprends ce que tu recherches à faire, mais je n'ai pas de réponse.

Pour ta question concernant Before:=1, c'est simplement par ce que tu renseignes tous les arguments. si tu décidais de ne pas faire apparaître le 2ème argument, laissé vide dans le code, tu devrais alors nommer les arguments suivant en précisant leur nom suivi de :=. Logic, sinon comment vba saurais de quel argument tu veux parler, celui que tu ne souhaites pas renseigner ou celui qui suit....

Si je trouve plus d'info sur shortcutsmenu, je rajouterais l'info ici.

[Edit]
Citation:
Caption As String, [OnAction],[ShortCutKey],[Before], [Restore],[StatusBar],[HeldFile],[HelpContextID]
Voila ce que nous donne l'aide à la saisie.
[/Edit]

++
Qwaz
__________________

MagicQwaz := Harry Potter la baguette en moins
Le monde dans lequel on vit
HammerFest
Ma page perso DVP - Dernier Tutoriel : VBA & Internet Explorer
Qwazerty est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 22/11/2011, 12h23   #10
Invité régulier
 
Homme
Inscription : novembre 2011
Messages : 7
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : novembre 2011
Messages : 7
Points : 5
Points : 5
Bonjour à tous les deux,

c'est effectivement une ancienne méthode que j'avais trouvé séduisante et que j'utilise depuis un moment. Mais je n'avais jamais poussé autant.

C'est génial !

Merci à tous les deux !!
FreeZf est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/11/2011, 13h51   #11
Expert Confirmé
 
Avatar de patricktoulon
 
patrick
Inscription : avril 2009
Messages : 1 829
Détails du profil
Informations personnelles :
Nom : patrick
Âge : 42
Localisation : France, Var (Provence Alpes Côte d'Azur)

Informations professionnelles :
Secteur : Bâtiment

Informations forums :
Inscription : avril 2009
Messages : 1 829
Points : 2 857
Points : 2 857
Envoyer un message via MSN à patricktoulon
Par défaut re

bonjour qwazerty et FreeZf

pour qwazerty:

merci pour la diction de la formule

j'en conclu que pour le tag c'est rapé c'est bien dommage

pour FreeZf:oui c'a n'est pas parce que c'est vieux (vielle méthode) que c'est a jeter a la poubelle pourtant moi j'ai appris avec la nouvelle méthode (application.commandbars("cell").add......)avec la quelle on peu t aller plus loin visiblement mais je reste séduit par l'ancienne méthode

qwazerty si tu trouve ou si tu a un lien interessant je reste intéressé par cette méthode


au plaisir
__________________
mes fichiers dans les contributions:
mon formulaire mail avec CDO en vba et mon formulaire mail avec CDO en vbs dans un HTA
mon nouveau mouse in out pour les boutons dans un userform
mon addin pour prendre un cliché de selection de cellules

si ton problème est résolu n'oublie pas de pointer :résolu:ça peut servir aux autres
et n'oublie pas de voter
patricktoulon est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 13h49.


 
 
 
 
Partenaires

Hébergement Web