Menu contextuel dynamique
y
Bonjour,
comme vous l'avez certainement remarqué, le menu contextuel de base obtenu par un clic droit sur un tableau structuré dépend de la ligne ou de la colonne sur laquelle on fait le clic droit.
Par exemple, il y a plus de commandes dans le sous-menu Insérer si on clique sur la cellule de la dernière ligne/dernière colonne du tableau (4 commandes) que si on clique sur la cellule de la 1ère ligne/1ère colonne (2 commandes).
Sauriez-vous, svp, comment une telle adaptation de ce menu contextuel est possible ?
Merci par avance.
Yohann
y
Pour ceux que ça intéresse, il faut en fait définir le menu contextuel différemment selon la ligne choisie; exemple ci-dessous:
Private Sub Workbook_SheetBeforeRightClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
MonCliqueDroit Sh, Target, False
End Sub
Function MonCliqueDroit(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
Application.CommandBars("List Range Popup").Reset
Dim TB As ListObject, data As Range
Set TB = ActiveSheet.ListObjects(1)
Set data = TB.DataBodyRange
If Application.Intersect(Target, Range(TB.DisplayName & "[#ALL]")) Is Nothing Then
Exit Function
End If
Set ContextMenu = Application.CommandBars("List Range Popup")
For Each Item In ContextMenu.Controls
Item.Delete
Next
Dim position_ligne As Long
position_ligne = Target.Row - data.Row 'data.Row est la ligne Excel où démarre le tableau structuré (première ligne après l'en-tête)
If position_ligne = -1 Or position_ligne = 0 Or position_ligne = 1 Then Exit Function 'on ne veut pas de menu contextuel pour la ligne d'en-tête et les 2 premières lignes du tableau
If position_ligne = 2 Then 'menu contextuel propre à la 3ème ligne du tableau
MenuInsertion2 "AjouteLigneApres", "&Insérer une ligne en dessous"
ElseIf position_ligne = data.Rows.Count - 1 Then 'menu contextuel de la dernière ligne du tableau
MenuInsertion1 "AjouteLigneAvant", "&Insérer une ligne au-dessus"
Else 'pour toutes les autres lignes du tableau
MenuInsertion "AjouteLigneAvant", "Ligne &au-dessus", "AjouteLigneApres", "Ligne &en dessous"
MenuSuppression "SupprimeLigne", "&Supprimer la ligne"
MenuNiveau "MonteNiveau", "&Monter d'un niveau", "BaisseNiveau", "&Baisser d'un niveau"
End If
End Function