Pour rendre l'événement disponible dans toutes les feuilles il faut passer par l'événement Workbook_sheetbeforerightclick. Donc la procédure de la feuil1 est à recopier dans la feuille ThisWorkBook, puis bien sûr la procédure de feuil1 est à supprimer.
Private Sub Workbook_SheetBeforeRightClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
Dim Ctrl As CommandBarControl
Dim Cel As Range, Plage As Range
Dim NbItem As Long, Boucle As Long
Dim DejaPris As Boolean
For Each Ctrl In Application.CommandBars("cell").Controls
If Ctrl.Tag = "brccm" Then Ctrl.Delete
Next Ctrl
With ActiveCell
If .Row = 1 Then Exit Sub
ReDim ListItem(1 To .Row)
Set Plage = Range(Cells(1, .Column), .Offset(-1, 0))
End With
For Each Cel In Plage
'inutile de boucler au delà de NbItem, le reste sera vide !
For Boucle = 1 To NbItem
If Cel.Value = ListItem(Boucle) Then
DejaPris = True
Exit For
End If
Next Boucle
If Not DejaPris And Cel.Value <> "" Then
NbItem = NbItem + 1
ListItem(NbItem) = Cel.Value
With Application.CommandBars("cell").Controls _
.Add(Type:=msoControlButton, before:=6, temporary:=True)
.Caption = CStr(Cel.Value)
.OnAction = "EcrisValeur(" & NbItem & ")"
.Tag = "brccm"
End With
End If
DejaPris = False
Next Cel
End Sub