Effacer contenu cellule suivant valeur d'une autre

Bonjour,

Je cherche à faire une macro qui efface le contenu d'une cellule en fonction de la valeur d'une autre cellule de la même ligne.

Exemple :

Ma colonne H contient que des valeurs Vrai ou Faux.

Ma colonne C est celle que je modifie à la main, je lui donne une valeur numérique.

Ma colonne F est celle que je veux pouvoir effacer si la cellule de H est vraie.

La colonne H est vraie que si C >= D.

J'avais réussi avec la fonction Offset seulement lorsque j'entre manuellement une valeur dans la colonne F, une valeur de ma colonne I est effacée.

Voici ce que j'avais testé :

If Target.Value > Cells(Target.Row, "D") Then Target.Offset(0, 3).ClearContents

Je ne sais pas comment "Target" la cellule en colonne F qui correspond à la ligne que je modifie.

Merci pour votre aide.

Bonjour,

Testes ceci :

Private Sub Worksheet_Change(ByVal Target As Range)

    If Target.Column <> 3 Then Exit Sub
    If Target.Count > 1 Then Exit Sub

    If Target.Value > Target.Offset(, 1).Value Then Target.Offset(, 3).ClearContents

End Sub

Bonjour Theze,

Merci ça fonctionne en effet.

Mais je voulais savoir, n'est-il pas possible de "cibler" directement la colonne F ? Plutôt que de faire Target + 3 colonnes ?

Je demande ça pour de simples raisons de "maintenabilité", que si le fichier Excel venait à changer et que des colonnes soient rajoutées il n'y ait pas de problème avec ma macro.

Re,

Testes :

'ça :
If Target.Value > Target.Offset(, 1).Value Then Range("F" & Target.Row).ClearContents
'ou encore ça :
If Target.Value > Target.Offset(, 1).Value Then Cells(Target.Row, 6).ClearContents

Re,

Edit :

J'avais mal testé ce que tu m'avais donné. Cela fonctionne, merci !

Edit2: Que représentent les lignes :

    If Target.Column <> 3 Then Exit Sub
    If Target.Count > 1 Then Exit Sub

Bonjour,

Le code qui suit ces lignes ne doit être exécuté que si la modification est faite en colonne C :

If Target.Column <> 3 Then Exit Sub

et que la cellule modifiée est seule (Target peut être une plage si tu vides plusieurs cellules en une seule fois) :

If Target.Count > 1 Then Exit Sub

Très bien, merci.

Et si j'ai une autre macro qui est appelée dans Worksheet_Change ça ne risque pas de faire n'importe quoi ?

Exemple ci-dessous :

Private Sub Worksheet_Change(ByVal Target As Range)
    If [N6] = 1 Then Exit Sub
    If Not Intersect(Target, Range("C2:C200")) Is Nothing And Target.Value < Cells(Target.Row, "D") And IsEmpty(Cells(Target.Row, "F")) Then
    'Changer la range C selon le nombre de lignes du tableau
        Call SendEmail
    End If
    If Target.Column <> 3 Then Exit Sub
    If Target.Count > 1 Then Exit Sub
    If Target.Value >= Cells(Target.Row, "D") Then Range("F" & Target.Row).ClearContents
End Sub

Bonjour,

Je le verrais de cette façon peut être :

Private Sub Worksheet_Change(ByVal Target As Range)

    If [N6] = 1 Then Exit Sub
    If Target.Count > 1 Then Exit Sub

    If Not Intersect(Target, Range("C2:C200")) Is Nothing Then

        'gèle les événements afin d'éviter le rappel du à la suppression de la valeur en F
        Application.EnableEvents = False

        If Target.Value >= Cells(Target.Row, "D") Then Range("F" & Target.Row).ClearContents

        If Target.Value < Cells(Target.Row, "D") And Cells(Target.Row, "F") = "" Then
        'Changer la range C selon le nombre de lignes du tableau
            Call SendEmail
        End If

    End If

    'rétabli
    Application.EnableEvents = True

End Sub

Cela change quelque chose ?

J'ai testé et les deux codes agissent pareil, après le tien est mieux structuré et plus beau.

Non, ça ne change rien mais il n'est pas utile à mon sens de tester deux fois la même chose :

If Not Intersect(Target, Range("C2:C200")) Is Nothing...

et :

If Target.Column <> 3 Then Exit Sub

Je vois, merci !

Rechercher des sujets similaires à "effacer contenu suivant valeur"