Les Snippets

Connexion

Ajout d'un menu et sous-menus au menu contextuel d'Excel

Niveau requis pour utiliser/comprendre cette source : 1 ( Débutant )
Créé le 20/01/2007 20:37:58 et initié par MPi [Liste]
Vue : 5307
Catégorie(s) : Trucs & Astuces
Langages dispo pour ce code :
- VBA



Langage : VBA
Date ajout : 20/01/2007
Posté par MPi [Liste]
' À mettre dans une module
Public MainMenu As CommandBarPopup      'Menu contextuel principal
Public SousMenu1 As CommandBarControl   '  1er Sous-menu à MainMenu
Public SousMenu2 As CommandBarControl   '  2e  Sous-menu à MainMenu
Sub SubMenu1()
    MsgBox "Sous-menu 1"
    
End Sub
Sub SubMenu2()
    MsgBox "Sous-menu 2"
End Sub
Sub EffacerMenus()
    Dim I As Integer
    
    For I = Application.CommandBars("cell").Controls.Count To 1 Step -1
        If Application.CommandBars("cell").Controls(I).Caption = "Test" Then
            Application.CommandBars("cell").Controls(I).Delete
        End If
    Next
    
End Sub

' À mettre dans ThisWorkbook
Private Sub Workbook_Deactivate()
    'Effacer les menus contextuels si on change de classeur
    EffacerMenus
End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean)
    'Effacer les menus contextuels si on ferme le classeur
    EffacerMenus
End Sub
' À mettre dans le code d'une feuille
Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
   
    'Effacer les menus contextuels créés s'ils existent déjà
    EffacerMenus
    
    'Création d'un menu contextuel ajouté en premier aux autres d'Excel
    If Not Application.Intersect(Target, Range("A:AZ")) Is Nothing Then
        Set MainMenu = CommandBars("cell").Controls.Add _
                        (Type:=msoControlPopup, _
                        before:=1, _
                        temporary:=True)
            MainMenu.Caption = "Test"
        
        'Création du premier sous-menu affecté à MainMenu
        Set SousMenu1 = MainMenu.Controls.Add(Type:=msoControlButton)
            With SousMenu1
               .Caption = "1er sous-menu"   'Texte affiché
               .OnAction = "Submenu1"       'Nom de la macro
               .Tag = "Menu1"               'au besoin
            End With
        
        'Création du deuxième sous-menu toujours affecté à MainMenu
        Set SousMenu2 = MainMenu.Controls.Add(Type:=msoControlButton)
            With SousMenu2
               .Caption = "2e sous-menu"    'Texte affiché
               .OnAction = "Submenu2"       'Nom de la macro
               .Tag = "Menu2"               'au besoin
            End With
    
    End If
End Sub
Private Sub Worksheet_Deactivate()
    'Effacer les menus contextuels si on change de feuille
    EffacerMenus
End Sub

Remarque :
Attention si vous changez des choses de ne pas effacer les menus existants d'Excel...



Codes sources en rapport avec : Popupmenu, Contextuel, Sous-menu

{Flash} MENU SOUS-MENU, EN ROLL-OVER AVEC VARIABLE
un menu et sous-menu qui s'affiche en roll-over avec chaque bouton du menu "parent" activé. en roll...

{Javascript / DHTML} MENU CONTEXTUEL SUR BALISE DE SON CHOIX
Il s'agit d'un menu contextuel basic qui s'implemente de facon simple sur n'importe quel partie de v...

{Visual Basic, VB6, VB.NET, VB 2005} CONTROLE UTILISATEUR POUR LA SAISIE D'UN HORAIRE
Voir aussi cette autre version plus graphique : http://www.codes-sources.com/code.aspx?ID=43070 L...

{Delphi} POPUPMENU STYLE XP SANS COMPOSANT
salut Voila un example de codes sources. comment realiser un popupmenu Style XP sans avoir un comp...

{Javascript / DHTML} MENU CONTEXTUEL GRÂCE AU CLICK DROIT DE LA SOURIS AVEC DES MENUS SECONDAIRES VALIDÉ IE ET FIREFOX
Ce menu contextuel est déclenché par le clique droit de la souris. Le style du menu est uniquement ...

{Javascript / DHTML} MENU CONTEXTUEL PERSONNALISABLE POUR CLIC DROIT
Ma librairie permet de creer des menus contextuels personnalisable très facilement!! Tres complet...

{Javascript / DHTML} MENU CONTEXTUEL PERSONNALISABLE AVEC CHOIX D'IMAGES
Ma librairie vous permet de creer un ou plusieurs menus contextuels pour le clic droit de la souris ...

{Visual Basic, VB6, VB.NET, VB 2005} COPY PATH
Présentation ------------ Copy Path est destiné à être exécuté depuis le menu contextuel d'un fich...

{C / C++ / C++.NET} SHELL TREEVIEW (WIN32)
C'est un classe permattant d'afficher un TreeView contenant les dossiers a partir du bureau, comme l...

{Delphi} DIR2DOS - POUR OUVRIR CMD.EXE DIRECTEMENT SUR LE RÉPERTOIRE UTILE.
Cette mini-application sert depuis l'Explorateur Windows à ouvrir une fenêtre de commande MsDOS dire...