Conditionner le coloriage des lignes (boucle)

Résolu/Fermé
davidbecks - 25 mars 2009 à 16:39
 davidbecks - 25 mars 2009 à 18:59
Bonjour,

Je souhaiterais éxécuter une boucle pour l'application suivante. ça "marche" pour A1, mais je voudrais le faire en boucle pour la i ème cellule de la colonne A.
Idéalement, chaque changement de la cellule de la colonne A provoque le changement de couleur de ligne (pas besoin de refaire tourner la macro pour activer la bonne couleur). Merci de votre aide pour cette macro somme toute facile...pour les expérimentés !

Sub color()
If Range("A1") = "P" Then
Rows("1:1").Select
Selection.Interior.ColorIndex = 38
End If
If Range("A1") = "G" Then
Rows("1:1").Select
Selection.Interior.ColorIndex = 37
End If
If Range("A1") = "A" Then
Rows("1:1").Select
Selection.Interior.ColorIndex = 6
End If
End Sub

4 réponses

Polux31 Messages postés 6917 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 1 novembre 2016 1 204
25 mars 2009 à 17:02
Bonjour,

Peut être en faisant comme ça:

Sub color() 
Dim plage As Range
Dim cl

Set plage = Range("A:A")
For each cl in plage
   If cl.Value = "P" Then 
      cl.Interior.ColorIndex = 38 
   End If 
   If cl.Value = "G" Then 
      cl.Interior.ColorIndex = 37 
   End If 
   If cl.Value = "A" Then 
      cl.Interior.ColorIndex = 6 
   End If 
Next cl

End Sub


;o)
0
Merci Polux !

Cependant, je souhaiterais colorier le row correspondant en entier, comment faire SVP ?
De plus, les lettres P, G, A, correspondent à 3 colonnes différentes. peut on les nommer cl1, cl2 et cl3 ?

If Range("B1") = "P" Then
Rows("1:1").Select
Selection.Interior.ColorIndex = 38
End If
If Range("C1") = "G" Then
Rows("1:1").Select
Selection.Interior.ColorIndex = 37
End If
If Range("A1") = "A" Then
Rows("1:1").Select
Selection.Interior.ColorIndex = 6
End If

Merci beaucoup !!

Davidbecks
0
Polux31 Messages postés 6917 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 1 novembre 2016 1 204
25 mars 2009 à 18:51
Une fois de plus un problème mal exposé ... ça devient lassant et pénible ... pourquoi ne pas tout dire dès le début. J'ai vraiment l'impression d'avoir perdu mon temps.

Il suffit de définir la plage autrement, c'est tout. Dans mon exemple on ne teste que la colonne A, si tu modifies le Set plage = Range("A:A") par Set plage = Range("A:Z"), le teste se fera sur toutes les cellules de la colonne A à la colonne Z en passant par la colonne B, C etc ....

Sub color() 
Dim plage As Range
Dim cl

Set plage = Range("A:Z")
For Each cl In plage
   If cl.Value = "P" Then
      Rows(cl.Row).Interior.ColorIndex = 38
   End If
   If cl.Value = "G" Then
      Rows(cl.Row).Interior.ColorIndex = 37
   End If
   If cl.Value = "A" Then
      Rows(cl.Row).Interior.ColorIndex = 6
   End If
Next cl

End Sub


Voilà.

On aurait pu gagner du temps ...

;o)
0
Merci !

je débute, donc mes questions sont un peu débiles et mal posées. désolé.

cdlt
0