Bonjour,
J'ai cette fonction qui marche bien sur le double click :
Elle ouvre un formulaire avec l'enregistrement choisi.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) Dim Index As Long If Not Intersect(Target, Range("Tableau1")) Is Nothing Then Cancel = True ShowSuiviForm Target End If End Sub
Sauf que je n'ai pas envie que ça m'empeche le double click pour l'édition d'une cellule.
Je me suis donc dit que j'allais ajouter un menu pour ouvrir le formulaire via le menu contextuel.
Mes connaissance en VBA étant assez faible, j'ai chercher le code pour modifier le menu contextuel. J'ai fini par trouvé.
Mais après pour lancer la fonction, malgré mes différentes tentatives d'ajustement, j'ai toujours un message d'erreur : incompatibilité de type, argument byref etc...
Voici mon code, pouvez vous m'aider? :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean) If Not Application.Intersect(Target, Range("Tableau1")) Is Nothing Then Cancel = True 'on annule l'affichage du menu cell 'on ajoute l'item au menu cell With CommandBars("List Range Popup").Controls.Add(Type:=msoControlButton, before:=6, temporary:=True) .Caption = "MODIFICATION VIA FORMULAIRE" .OnAction = "'Feuil1.ouvre_form " & Chr(34) & Target.Address & Chr(34) & "'" 'on appelle la macro qui est dans le module de la feuille elle meme et on lui script l'argument de l'adress de la target 'donc l'item appelera la sub AVEC!!!! argument End With CommandBars("List Range Popup").ShowPopup 'comme on l'a annuler il faut l'affifficher (showpopup) End If 'quand tu aura selectionner ou pas et que le popup se sera fermer la commandbars("cell") revient a l'origine ' ainsi quand tu fermera ton classeur et ouvrira un autre la barre cell sera d'origine CommandBars("List Range Popup").Reset End Sub Sub ouvre_form(ByVal adresse As Range) Dim Index As Long If Not Intersect(adresse, Range("Tableau1")) Is Nothing Then Cancel = True ShowSuiviForm adresse End If End Sub
Partager