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 SubSi 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 Subne 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 SubComment combiner les deux ? D'avance merci ...
re
If Target.Address <> Range(Cells(12, 20), Cells(nb_ligne, 20)) Then Exit SubNe 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 SubCordialement
Génial, ça marche au poil... Merci pour l'éclaircissement de la méthode Select Case