Bonjour,
il faut utiliser la surveillance événementielle de la feuille afin de détecter la modification d'une des deux cellules de liste de choix, mais il faut aussi l'arrêter afin de ne pas entrer dans une boucle infinie, le temps de la modification de la feuille lors de l'exécution du code suite à la première modification.
Pour cela deux possibilités : soit la fonction Application.EnableEvents = False qui stoppe les "événementielles" de la feuille, certains diront que c'est "dangereux" du fait d'un plantage de code et alors plus de réaction sur la feuille Excel, sinon un système de variable "interrupteur" qui à le même rôle mais qui ne stoppe pas les "événementielles" mais qui les contourne.
Donc les cellule à surveiller dans mon exemple B4 et G4 :
' avec EnableEvents
Private Sub Worksheet_Change(ByVal Target As Range)
' on arrête la surveillance
Application.EnableEvents = False
' si la modification de la feuille touche B4 et si B4 <>"" alors on efface G4
If Not Intersect(Target, Range("B4")) Is Nothing And Target.Value <> "" Then
' on efface G4
Range("G4") = ""
' si la modification de la feuille touche G4 et si G4 <>"" alors on efface B4
ElseIf Not Intersect(Target, Range("G4")) Is Nothing And Target.Value <> "" Then
' on efface B4
Range("B4") = ""
End If
' on remet la surveillance
Application.EnableEvents = True
End Sub
' Avec Interrupteur
Public Inter As Boolean
Private Sub Worksheet_Change(ByVal Target As Range)
' si la feuille est en cours de modification on sort de la sub
If Inter = True Then Exit Sub
' on va peut-être modifier la feuille, on passe l'inter à True
Inter = True
' si la modification de la feuille touche B4 et si B4 <>"" alors on efface G4
If Not Intersect(Target, Range("B4")) Is Nothing And Target.Value <> "" Then
' on efface G4
Range("G4") = ""
' si la modification de la feuille touche G4 et si G4 <>"" alors on efface B4
ElseIf Not Intersect(Target, Range("G4")) Is Nothing And Target.Value <> "" Then
' on efface B4
Range("B4") = ""
End If
' on a fini de modifier la feuille on passe l'inter à false
Inter = False
End Sub
@ bientôt
LouReeD