Evènement si modification d'une cellule

Bonjour à tous,

J'aimerais remplacer un fichier qui utilise beaucoup (trop) de mise en formes conditionnelles par un évènement VBA avec la métode Worksheet_Change(ByVal Target As Range).

Il s'agit de colorier une cellule de telle ou telle couleur suivant son contenu (très basique donc).

Je teste le code suivant ... :

Private Sub Worksheet_Change(ByVal Target As Range)

Dim nb_ligne%
nb_ligne = Range("A" & Rows.Count).End(xlUp).Row

If Target.Address <> Range(Cells(12, 20), Cells(nb_ligne, 20)) Then Exit Sub

Dim i%
    For i = 12 To nb_ligne

        If Cells(i, 20) = "A revoir" Then 'A revoir : orange
            Cells(i, 20).Interior.Color = RGB(255, 180, 0)

        ElseIf Cells(i, 20) = "A valider" Then 'A valider : bleu
            Cells(i, 20).Interior.Color = RGB(96, 160, 255)

        ElseIf Cells(i, 20) = "Validé" Then 'Validé : gris
            Cells(i, 20).Interior.Color = RGB(160, 160, 160)

        ElseIf Cells(i, 20) = "Livré" Then 'Livré : vert pale
            Cells(i, 20).Interior.Color = RGB(0, 210, 95)

        End If
    Next i

End Sub

.... mais aucun message d'erreur à la modification de la cellule dans la zone cible, et encore moins un coloriage en conséquence...

Pourriez-vous m'aider à déterminer ce qui bloque svp ?

merci !

Bonjour

Essaie plutôt ceci

Private Sub Worksheet_Change(ByVal Target As Range)
Dim nb_ligne As Integer

nb_ligne = Range("A" & Rows.Count).End(xlUp).Row

If Not Intersect(Target, Range(Cells(12, 20), Cells(nb_ligne, 20))) Is Nothing Then
Dim i As Integer
For i = 12 To nb_ligne
    Select Case Target
        Case Is = "A revoir": Target.Interior.Color = RGB(255, 180, 0)
        Case Is = "A valider": Target.Interior.Color = RGB(96, 160, 255)
        Case Is = "Validé": Target.Interior.Color = RGB(160, 160, 160)
        Case Is = "Livré": Target.Interior.Color = RGB(0, 210, 95)
    End Select
Next i
End If
End Sub

Si ok, clique sur le v vert à coté du bouton EDITER lors de ta réponse afin de cloturer le fil

Cordialement

Super merci.

J'aurais deux demandes en plus :

Je ne comprends pourquoi mon

If Target.Address <> Range(Cells(12, 20), Cells(nb_ligne, 20)) Then Exit Sub

ne déclenchait pas l'évènement ?

Et j'aimerais en plus de colorier la cellule cible changeant de valeur, colorier une autre cellule. J'ai essayé de rajouter quelques instructions à ton code mais ça colorie seulement les cellules de la colonne T en noir...

Private Sub Worksheet_Change(ByVal Target As Range)
Dim nb_ligne As Integer

nb_ligne = Range("A" & Rows.Count).End(xlUp).Row

If Not Intersect(Target, Range(Cells(12, 20), Cells(nb_ligne, 20))) Is Nothing Then
Dim i As Integer
For i = 12 To nb_ligne
    Select Case Target
        Case Is = "A revoir": Target.Interior.Color = RGB(255, 180, 0) & Cells(i, 7).Interior.Color = RGB(255, 180, 0)
        Case Is = "A valider": Target.Interior.Color = RGB(96, 160, 255) & Cells(i, 7).Interior.Color = RGB(96, 160, 255)
        Case Is = "Validé": Target.Interior.Color = RGB(160, 160, 160) & Cells(i, 7).Interior.Color = RGB(160, 160, 160)
        Case Is = "Livré": Target.Interior.Color = RGB(0, 210, 95) & Cells(i, 7).Interior.Color = RGB(0, 210, 95)
    End Select
Next i
End If
End Sub

Comment combiner les deux ? D'avance merci ...

re

If Target.Address <> Range(Cells(12, 20), Cells(nb_ligne, 20)) Then Exit Sub

Ne fonctionne pas car il faut mettre l'instruction Address --> Range(Cells(12, 20), Cells(nb_ligne, 20)) .address

Sinon pour le code en relisant, je ne pense pas qu'il faut une boucle sur la couleur s'applique uniquement au changement d'une cellule. Code à essayer :

Private Sub Worksheet_Change(ByVal Target As Range)

If Not Intersect(Target, Range(Cells(12, 20), Cells(Range("A" & Rows.Count).End(xlUp).Row, 20))) Is Nothing Then
Dim i As Integer

    Select Case Target
        Case Is = "A revoir": Target.Interior.Color = RGB(255, 180, 0): Cells(Target.Row, 7).Interior.Color = RGB(255, 180, 0)
        Case Is = "A valider": Target.Interior.Color = RGB(96, 160, 255): Cells(Target.Row, 7).Interior.Color = RGB(96, 160, 255)
        Case Is = "Validé": Target.Interior.Color = RGB(160, 160, 160): Cells(Target.Row, 7).Interior.Color = RGB(160, 160, 160)
        Case Is = "Livré": Target.Interior.Color = RGB(0, 210, 95): Cells(Target.Row, 7).Interior.Color = RGB(0, 210, 95)
    End Select

End If
End Sub

Cordialement

Génial, ça marche au poil... Merci pour l'éclaircissement de la méthode Select Case

Rechercher des sujets similaires à "evenement modification"