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 Subla 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 Functiondis 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