Supprimer contenue cellule quand autre cellule a du contenue (vice-versa)

Bonjour !

J'ai une petit problème dans une programmation. J'ai en fait deux listes déroulantes (une par cellule) et je voudrais que quand un choix est sélectionné dans l'une, l'autre cellule se vide. Je sais vider une cellule quand le contenue d'une autre cellule change, mais la ça ma pose problème. Petite clarification :

Quand Cellule1 <> " " alors Cellule2 = " " (Quand je fais un choix dans la liste déroulante de la cellule1 alors la cellule2 se vide)

Mais quand Cellule2 <> " " alors Cellule1 = " " (Quand je fais un choix dans la liste déroulante de la cellule2 alors la cellule1 se vide)

D'avance merci pour votre aide.

Bonne journée,

Paul

Bonjour, un fichier exemple avec le type de liste déroulantes que vous utilisez serait bienvenu.

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

Merci LouReeD pour ta contribution !

Cela fonctionne parfaitement pour moi. J'ai du mal avec ça, je connais uniquement les variables de base et non pas tout ce qui se cache derrière Excel.

En tout cas merci,

Bonne soirée !

Bonsoir,

merci pour ce retour et vos remerciements !

@ bientôt

LouReeD

Rechercher des sujets similaires à "supprimer contenue quand vice versa"