IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Déterminer le choix fait dans un menu


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Novembre 2011
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 7
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  2. #2
    Membre émérite
    Homme Profil pro
    Ingénieur Pilotage
    Inscrit en
    Avril 2009
    Messages
    405
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur Pilotage
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2009
    Messages : 405
    Par défaut
    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

  3. #3
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  4. #4
    Expert confirmé
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    4 126
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

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

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 126
    Par défaut
    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
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Novembre 2011
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 7
    Par défaut
    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 !

    ++

  6. #6
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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:
    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:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MySQL] afficher le choix éffectué dans un menu déroulant
    Par qeumarh dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 19/05/2008, 12h08
  2. Réponses: 3
    Dernier message: 20/04/2007, 14h18
  3. Réponses: 27
    Dernier message: 12/04/2007, 10h23
  4. Réponses: 8
    Dernier message: 16/06/2006, 18h48
  5. Réponses: 3
    Dernier message: 08/10/2005, 00h02

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo