2 fois Private Sub Worksheet_BeforeRightClick

seagull

XLDnaute Nouveau
Bonjour,
dans une feuille j' ai, d'une part ceci:

Code:
Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)

    If Intersect(Target, Range("d8:i14,d20:i26,d34:i40,n8:s14,n20:s26,n34:s40,x8:ac14,x20:ac26,x34:ac40")) Is Nothing Then Exit Sub
   Select Case Target.Interior.ColorIndex
    
    Case xlNone
        Target.Interior.ColorIndex = 4
    Case 4
        Target.Interior.ColorIndex = 15
    Case 15
        
        Target.Interior.ColorIndex = 4
    End Select
    If ActiveCell.Interior.ColorIndex = 15 Then
    ActiveCell.FormulaR1C1 = "0"
    ElseIf ActiveCell.Interior.ColorIndex = 4 Then
    
    ActiveCell.FormulaR1C1 = "X"
    End If
    
    Cancel = True
    
    
End Sub

d'autre part j'ai cela:

Code:
Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)


If Intersect(Target, Range("c8:c14,c20:c26,c34:c40,m8:m14,m20:m26,m34:m40,w8:w14,w20:w26,w34:w40")) Is Nothing Then Exit Sub
    
    statut.Show
   
    Cancel = True
    
    End Sub

mais les 2 codes dans la même feuille ne fonctionnent pas (erreur nom ambigu) et je ne parviens pas à les imbriquer pour que cela fonctionne dans le même Private Sub Worksheet_BeforeRightClick
pouvez vous m'aider svp? j'ai bien trouvé quelques discussions sur le sujet mais...pas moyen
merci
 

Fred0o

XLDnaute Barbatruc
Re : 2 fois Private Sub Worksheet_BeforeRightClick

Bonsoir Seagull,

As-tu essayé cette forme ?
VB:
Option Explicit

Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
    If Intersect(Target, Range("d8:i14,d20:i26,d34:i40,n8:s14,n20:s26,n34:s40,x8:ac14,x20:ac26,x34:ac40")) Is Nothing Then Exit Sub
        Select Case Target.Interior.ColorIndex
            Case xlNone
                Target.Interior.ColorIndex = 4
            Case 4
                Target.Interior.ColorIndex = 15
            Case 15
                Target.Interior.ColorIndex = 4
        End Select
        If ActiveCell.Interior.ColorIndex = 15 Then
            ActiveCell.FormulaR1C1 = "0"
        ElseIf ActiveCell.Interior.ColorIndex = 4 Then
            ActiveCell.FormulaR1C1 = "X"
        End If
        Cancel = True
        If Intersect(Target, Range("c8:c14,c20:c26,c34:c40,m8:m14,m20:m26,m34:m40,w8:w14,w20:w26,w34:w40")) Is Nothing Then Exit Sub
        statut.Show
        Cancel = True
End Sub

A+
 

kjin

XLDnaute Barbatruc
Re : 2 fois Private Sub Worksheet_BeforeRightClick

Bonsoir,
Code:
Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
If Not Intersect(Target, Range("D8:I14,D20:I26,D34:I40,N8:S14,N20:S26,N34:S40,X8:AC14,X20:AC26,X34:AC40")) Is Nothing Then
Cancel = True
Select Case Target.Interior.ColorIndex
    Case xlNone
        Target.Interior.ColorIndex = 4
        Target = "X"
    Case 4
        Target.Interior.ColorIndex = 15
        Target= "0"
    Case 15
        Target.Interior.ColorIndex = 4
        Target = "X"
    End Select
End If
If Not Intersect(Target, Range("C8:C14,C20:C26,C34:C40,M8:M14,M20:M26,M34:M40,W8:W14,W20:W26,W34:W40")) Is Nothing Then
Cancel = True
statut.Show
End If
End Sub
A+
kjin
 

seagull

XLDnaute Nouveau
Re : 2 fois Private Sub Worksheet_BeforeRightClick

Bonjour,
Le code de Kjin fonctionne et j'avais déjà essayé celui de FredOo mais ça ne marchait pas(une instruction sur les 2 fonctionne) en tous cas un grand merci pour vos interventions à tous les 2;).
Comme je suis très basique en VBA, Peux-tu m'expliquer le changement Kjin, je vois not intersect au lieu de intersect et plus de exit sub ?:rolleyes:
à+
seagull
 

kjin

XLDnaute Barbatruc
Re : 2 fois Private Sub Worksheet_BeforeRightClick

Bonjour,
L'opérateur Not est un opérateur logique (touche F1 dans vbe) qui ici inverse le test de "IsNothing"
En clair, ce que tu as essayé de faire c'est.....
1 - If IntersectTarget, Range(xx:xx)) IsNothing then Exit Sub
si la cellule cible n'est pas dans la plage je quitte la procédure
...la procédure...
2 - If IntersectTarget, Range(xx:xx)) IsNothing then Exit Sub
si la cellule cible n'est pas dans la plage je quitte la procédure
...la procédure...
....du coup, la condition 2 n'est jamais réalisée si la condition 1 est fausse
Il fallait donc tester l'inverse
1 - If Not IntersectTarget, Range(xx:xx)) IsNothing then Exit Sub
si la cellule cible est dans la plage
...la procédure...
End If
2 - If Not IntersectTarget, Range(xx:xx)) IsNothing then Exit Sub
si la cellule cible est dans la plage
...la procédure...
End If
J'espère avoir été suffisamment clair
A+
kjin
 

seagull

XLDnaute Nouveau
Re : 2 fois Private Sub Worksheet_BeforeRightClick

Merci Kjin,
c'est super bien expliqué! j'ai tout compris (à ce niveau:rolleyes:)
au fait, dans la 2ème partie de mon code, j'appele un userform (statut), sais tu comment je peux faire en sorte pour que l'userform s'ouvre à proximité de la cellule concernée, comme dans un clic droit classique
merci;)
 

Discussions similaires

Statistiques des forums

Discussions
312 679
Messages
2 090 846
Membres
104 677
dernier inscrit
soufiane12