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 :

Menu contextuel lié à un tableau excel [XL-2016]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Homme Profil pro
    ingénieur généraliste
    Inscrit en
    Novembre 2018
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : ingénieur généraliste
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2018
    Messages : 4
    Par défaut Menu contextuel lié à un tableau excel
    Bonjour,

    J'ai une macro qui fonctionne parfaitement. Je l'ai ajouté au menu contextuel du clic droit dans une feuille classique. Cela fonctionne parfaitement (modification et RAZ du menu contextuel, appelle de la macro etc).

    Mon problème est que je n'arrive pas à connaitre le nom du menu contextuel lié à un tableau excel (excel 2016; insérer/tableaux/tableaux ou Ctrl+l) pour appeler ma macro depuis un clic droit dans le tableau. Actuellement j'ai du le déplacer en dehors mais ce n'est pas satisfaisant.

    J'ai cherché sur le forum et sur le net et n'ai rien trouvé sauf la quasi certitude que c'est bien un commandbar comme pour toutes les autres applications se servant du clic droit dans excel.
    J'ai utilisé la macro ci-dessous pour obtenir le nom du menu contextuel en faisant plusieurs clics droit dans un tableaux. J'obtiens "worksheet menu bar".
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
     
        MsgBox Application.CommandBars.ActiveMenuBar.Name
     
    End Sub
    J'ai créé une autre macro pour obtenir toutes les commadbars et en ai essayé une bonne dizaine mais sans résultat. (J'ai obtenu une liste de 155 noms que je ne colle pas ici pour la clarté.)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub ggg()
     
     
        Dim cb As CommandBar
        Dim i As Integer
        i = 1
     
        For Each cb In Application.CommandBars
            Range("A" & i) = cb.Name
            i = i + 1
        Next cb
     
    End Sub

    Je m'en remets donc à votre aide pour obtenir ce nom de commandbar mystérieux. Merci d'avance pour votre soutien.

  2. #2
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Par défaut
    Bonjour,

    je n'ai pas Excel 2016 mais par exemple en Excel 2007, si je veux afficher le menu contextuel clic droit c'est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Dim B As CommandBar
     
    Set B = CommandBars("Cell")
    B.ShowPopup
    Si je veux exécuter le menu "Insérer..." de cette barre, je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Dim B As CommandBar
     
    Set B = CommandBars("Cell")
    B.Controls("&Insérer...").Execute
    L'esperluette avant le mot "Insérer" représente le trait de raccourci clavier et il doit être mis sinon, le nom du menu ne sera pas reconnu.
    Code pour voir les Captions des contrôles :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Dim B As CommandBar
    Dim C As CommandBarControl
     
    Set B = CommandBars("Cell")
     
    For Each C In B.Controls: Debug.Print C.Caption: Next C
    Là, on voit bien les esperluettes qui sont dans les noms.

  3. #3
    Membre à l'essai
    Homme Profil pro
    ingénieur généraliste
    Inscrit en
    Novembre 2018
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : ingénieur généraliste
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2018
    Messages : 4
    Par défaut
    Bonjour Theze et merci pour ton temps,

    Je maîtrise les ajouts que l'on peut faire au menu contextuel en général et en particulier à celui des cellules standards car je connais le nom de la commandbar sur laquelle agir. Nom : menu contextuel.png
Affichages : 1143
Taille : 4,2 Ko
    Mon soucis est de connaître le nom de la commandbar affectée au tableaux que l'on insère via insérer/tableaux/tableaux ou Ctrl+l.
    Mon problème sera alors résolu car dans mon code je remplacerai commandbars("Cell") par commandbars("INCONNU_POUR_L'INSTANT") et tout sera fini.
    Nom : menu contextuel tableau.png
Affichages : 1467
Taille : 23,3 Ko

  4. #4
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Par défaut
    Bonjour,

    Peut être en listant les objets de chaque barre de commande dans la feuille active et en cherchant le nom du bouton :
    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
     
    Sub Test()
     
        Dim B As CommandBar
        Dim Ctrl As CommandBarControl
        Dim I As Integer
     
        For Each B In CommandBars
     
            I = I + 1: Cells(I, 1).Value = B.Name
     
            For Each Ctrl In B.Controls
     
                I = I + 1: Cells(I, 2).Value = Ctrl.Caption
                Cells(I, 3).Value = TypeName(Ctrl)
                'Ctrl.CopyFace: ActiveSheet.Paste Cells(I, 4) 'ceci prend pas mal de temps d'où le DoEvents
                'DoEvents
     
            Next Ctrl
     
        Next B
     
    End Sub

  5. #5
    Membre à l'essai
    Homme Profil pro
    ingénieur généraliste
    Inscrit en
    Novembre 2018
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : ingénieur généraliste
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2018
    Messages : 4
    Par défaut
    MERCI !

    La solution était en effet de ne pas juste afficher les commandbars comme je l'avais évoqué mais bien d'afficher le niveau inférieur et de rechercher ("ta&ble" et non "table").

    Pour ceux qui voudront la réponse directement c'est "List Range Popup". Pour ceux qui voudront agir sur un autre, utilisez la petite macro de Theze pour trouver la commandbar qui vous intéresse.
    Et pour les détails de codage je joins le code qui ajoute et retire les options perso au clic droit.
    dans un module :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    '**********************************************************************************************************************************
    '                                                RESTAURATION CLIC DROIT
    '**********************************************************************************************************************************
     
    Sub DeleteFromCellMenu()
     
        Application.CommandBars("cell").Reset
        Application.CommandBars("List Range Popup").Reset
     
     
    End Sub
    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
    '**********************************************************************************************************************************
    '                                                AJOUT AU CLIC DROIT pour MOTOR TABLE
    '**********************************************************************************************************************************
     
     
    Sub AddToCellMenu_MOTORTABLE()
        Dim ContextMenu As CommandBar
        Dim MySubMenu As CommandBarControl
     
        ' Supprime les ajouts pour éviter les doublons
        Call DeleteFromCellMenu
     
        ' définit ContextMenu comme un menu concernant les cellules
        Set ContextMenu = Application.CommandBars("List Range Popup")
     
        ' Ajoute  un bouton
        Set MySubMenu = ContextMenu.Controls.Add(Type:=msoControlButton, before:=1)
     
        With MySubMenu
            .FaceId = 25
            .Caption = "SEARCH MOTOR"
            .Tag = "My_Cell_Control_Tag"
            .OnAction = "'" & ThisWorkbook.Name & "'!" & "Manual_search"
        End With
     
        ' ajoute un séparateur avec le menu suivant
        ContextMenu.Controls(2).BeginGroup = True
     
    End Sub

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    '**********************************************************************************************************************************
    '                                                RECHERCHE MANUELLE DE MOTEUR DEPUIS TABLEAU MOTEUR
    '**********************************************************************************************************************************
     
    Sub Manual_search()
     
        Application.ScreenUpdating = False
     
        TRAITEMENT DE LA MACRO
     
        Application.ScreenUpdating = True
     
    End Sub
    dans workbook :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub Workbook_Deactivate()
     
        Call DeleteFromCellMenu
     
    End Sub

    Merci encore à Theze et bonne journée.

  6. #6
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Par défaut
    Bonjour,

    Content de t'avoir aidé mais je ne pouvais pas te donner le nom du bouton car je n'ai pas Excel 2016 et il n'existe pas en 2007 !

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

Discussions similaires

  1. VBA Excel - Modification du menu contextuel
    Par FreeZf dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 17/11/2011, 13h27
  2. menu contextuel vba excel
    Par jpo dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 17/03/2008, 22h49
  3. utiliser le menu contextuel de IE (Export to excell)
    Par cortex024 dans le forum ASP.NET
    Réponses: 1
    Dernier message: 16/05/2007, 16h46
  4. VSTO - Excel : modifier le menu contextuel
    Par Chandy dans le forum C#
    Réponses: 2
    Dernier message: 15/05/2007, 11h24
  5. [Vba-Excel] Menu contextuel
    Par cedric59dk dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 21/02/2007, 16h15

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