Associer des plages de cellules à des menus contextuels

Bonjour à tous,

J'ai créé plusieurs menus contextuels personnalisés que j'appelle automatiquement au clic droit sur une cellule avec l'instruction "showPopup". Pour déterminer lequel de ces menus est associé à la cellule sélectionnée, j'ai rédigé une procédure lourde, pas élegante et appelant beaucoup de variables pour déterminer quel menu est associé à la plage contenant la cellule que je sélectionne.

J'ai la conviction qu'on peut faire plus efficace mais je ne trouve pas.

Pourriez vous me conseiller un moyen propre de détecter si un menu contextuel perso est associé à une cellule sur laquelle je fais un clic droit et lequel ?

Merci de votre aide. Au plaisir de vous lire.

Bonjour Beber,

je t'envois un exemple de procedure:

https://www.excel-pratique.com/~files/doc/TestMenu.xls

Je n'ai pas trop compris si tes menus était des menus perso de excel ou des userforms, j'ai fait un code pour les deux. Dans la feuille ListeMenu, je liste le nom du menu, la feuille et la cellule affecté. Ensuite dans la feuille choisi, rajoute ce code :

Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
    Dim NomMenu As String

    NomMenu = MenuExiste(Replace(Target.Address, "$", ""), ActiveSheet.Name)
    'Pour afficher un userform
    'If NomMenu <> "" Then VBA.UserForms.Add(NomMenu).Show
    'Pour afficher un menu perso
    'If NomMenu <> "" Then Application.CommandBars("Test").Visible = True
End Sub

la procedure MenuExiste compare les menus inscrits dans la feuille listemenu et l'adresse de la cellule cliquée. Si ça concorde, elle renvoie le nom du menu qu'ensuite on appelle:

Public Function MenuExiste(Adresse As String, NomFeuille As String) As String
    Application.ScreenUpdating = False

    Sheets("ListeMenu").Activate
    Range("A2").Select

    Do While ActiveCell.Offset <> ""
        If ActiveCell.Offset(0, 1) = NomFeuille And ActiveCell.Offset(0, 2) = Adresse Then
            MenuExiste = ActiveCell
        End If
        ActiveCell.Offset(1, 0).Select
    Loop

    Sheets(NomFeuille).Activate
    Range(Adresse).Select

    Application.ScreenUpdating = True
End Function

dis moi si ça répond à ta questions

Rebonjour Beber,

premièrement merci pour ta question, tu m'as fait apprendre de nouvelle notion de vba..

j'ai refait le fichier pour qu'il soit plus fonctionnelle. Maintenant j'appelle de vrai menu contextuel créer par code vba. Je fonctionne encore avec une liste de cellule dans la feuille liste cellule. Regarde ça et hésite pas si tu a des questions.

voici le fichier:

https://www.excel-pratique.com/~files/doc/TestMenu2.xls

j'ai adapté le code que j'ai trouvé à ce lien:

[/code]

Salut Math

Merci beaucoup d'avoir travaillé le sujet. Je vais m'empresser d'essayer.

A charge de revanche. Bonne journée

Rechercher des sujets similaires à "associer plages menus contextuels"