XL 2019 code click droit

pascal21

XLDnaute Barbatruc
bonjour à tous,
j'ai un code sur click droit qui inscrit une valeur dans une cellule (c43)
ca fonctionne mais j'aimerais deux choses
qu'un click droit sur une autre cellule (par exemple f43) ne modifie pas (c43)
que ce code puisse fonctionner sur une autre cellule avec une autre valeur
je ne trouve pas la syntaxe pour faire cela
merci
VB:
On Error Resume Next
If Range("c43") Is Nothing Then Exit Sub
Cancel = True
If IsEmpty(Range("c43")) Then
Range("c43") = "5"

ElseIf Range("c43") = "5" Then
Range("c43") = ""

Cancel = True
End If
 

M12

XLDnaute Accro
bonjour à tous,
j'ai un code sur click droit qui inscrit une valeur dans une cellule (c43)
ca fonctionne mais j'aimerais deux choses
qu'un click droit sur une autre cellule (par exemple f43) ne modifie pas (c43)
que ce code puisse fonctionner sur une autre cellule avec une autre valeur
je ne trouve pas la syntaxe pour faire cela
merci
VB:
On Error Resume Next
If Range("c43") Is Nothing Then Exit Sub
Cancel = True
If IsEmpty(Range("c43")) Then
Range("c43") = "5"

ElseIf Range("c43") = "5" Then
Range("c43") = ""

Cancel = True
End If
Bonjour,
Teste ceci
VB:
Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
On Error Resume Next
  If Not Application.Intersect(Target, Range("C43")) Is Nothing Then
    Cancel = True
    If IsEmpty(Range("c43")) Then
    Range("c43") = "5"
    ElseIf Range("c43") = "5" Then
    Range("c43") = ""
    End If
  End If
 
  If Not Application.Intersect(Target, Range("F43")) Is Nothing Then
    Cancel = True
    If IsEmpty(Range("F43")) Then
    Range("F43") = "5"
    ElseIf Range("c43") = "5" Then
    Range("F43") = ""
    End If
  End If
End Sub
 
Dernière édition:

patricktoulon

XLDnaute Barbatruc
re
bonjour
@M12 espérons qu'il en n'ai pas une ribambelle de cellules à gérer

on parle du click droit
donc selon moi un test intersect pour une cellule dans une cellule est inutile
un simple test address suffit
ensuite on peut largement simplifier l'ecriture du code de l'intention
on va faire ça dans un select case
on peut en rajouter autant que l'on veut sans faire pour autant un test intersect et un double if
VB:
Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
Select Case Target.Address(0, 0)

Case "F43": Cancel = True: Target = String(Abs(Target = ""), "5")

Case "C43": Cancel = True: Target = String(Abs(Target = ""), "5")
'etc...
Case Else: cancel=false:Exit Sub
End Select

End Sub
c'est desuite plus clair là non ?
 

patricktoulon

XLDnaute Barbatruc
je dirais même que je me suis fourboyé si c'est toujours le chiffre 5

VB:
Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
Select Case Target.Address(0, 0)
Case "F43","C43": Cancel = True: Target = String(Abs(Target = ""), "5")
Case Else: Exit Sub
End Select
End Sub
 

M12

XLDnaute Accro
Re,
Ou Bien
VB:
Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
On Error Resume Next
  If Not Application.Intersect(Target, Range("C43")) Is Nothing Then
    Cancel = True
    If IsEmpty(Target.Value) Then Target.Value = "5" Else Target.Value = ""
  ElseIf Not Application.Intersect(Target, Range("F43")) Is Nothing Then
    Cancel = True
    If IsEmpty(Target.Value) Then Target.Value = "5" Else Target.Value = ""
  End If
End Sub
 
Dernière édition:

patricktoulon

XLDnaute Barbatruc
re
@M12
tu n'a pas compris ma démarche
ton dernier exemple = 2 tests intersect + 4 if en 2 if/else pour 2 cellules
c'est pas faux mais comme je disais si il en a une ribambelle a faire là ça risque d’être un peu too much

avec ma méthode
tu teste le target.count à 1 d'office(si plus d'une cellule sélectionnées bye bye!!)
si c'est une autre que ces deux là bye bye aussi
ssi c'est un des target désirés bingo!!
le tout en une seule ligne

bref autrement dit je remplace ceci
VB:
 If Not Application.Intersect(Target, Range("C43")) Is Nothing Then
    Cancel = True
    If IsEmpty(Target.Value) Then Target.Value = "5" Else Target.Value = ""
  End If
 
  If Not Application.Intersect(Target, Range("F43")) Is Nothing Then
    Cancel = True
    If IsEmpty(Target.Value) Then Target.Value = "5" Else Target.Value = ""
  End If
par cela
Code:
Case "F43","C43": Cancel = True: Target = String(Abs(Target = ""), "5")
l'avantage du case c'est que des qu'il a trouvé une correspondence, il sort tandis qu'avec les if /else ils sont tous lu dans l’exécution de la macro
 

M12

XLDnaute Accro
re
@M12
tu n'a pas compris ma démarche
ton dernier exemple = 2 tests intersect + 4 if en 2 if/else pour 2 cellules
c'est pas faux mais comme je disais si il en a une ribambelle a faire là ça risque d’être un peu too much

avec ma méthode
tu teste le target.count à 1 d'office(si plus d'une cellule sélectionnées bye bye!!)
si c'est une autre que ces deux là bye bye aussi
ssi c'est un des target désirés bingo!!
le tout en une seule ligne

bref autrement dit je remplace ceci
VB:
 If Not Application.Intersect(Target, Range("C43")) Is Nothing Then
    Cancel = True
    If IsEmpty(Target.Value) Then Target.Value = "5" Else Target.Value = ""
  End If
 
  If Not Application.Intersect(Target, Range("F43")) Is Nothing Then
    Cancel = True
    If IsEmpty(Target.Value) Then Target.Value = "5" Else Target.Value = ""
  End If
par cela
Code:
Case "F43","C43": Cancel = True: Target = String(Abs(Target = ""), "5")
l'avantage du case c'est que des qu'il a trouvé une correspondence, il sort tandis qu'avec les if /else ils sont tous lu dans l’exécution de la macro
Mais chacun à le droit de voir Midi à sa porte NON ?
 

patricktoulon

XLDnaute Barbatruc
re
et ben tu les resépare et met 14.5 a la place de 5 dans le case "F43"
VB:
Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
Select Case Target.Address(0, 0)

Case "F43": Cancel = True: Target = String(Abs(Target = ""), "14,5")

Case "C43": Cancel = True: Target = String(Abs(Target = ""), "5")
'etc...
Case Else: cancel=false:Exit Sub
End Select
 

Discussions similaires

Statistiques des forums

Discussions
312 305
Messages
2 087 079
Membres
103 455
dernier inscrit
saramachado