Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Mise en forme Cond.

13 réponses
Avatar
Michel69
Bonjour à toutes et à tous,
Excel 2003 : Pourriez-vous m'aider ?
Comment, en VBA, colorer une ligne (col A à BE) en fonction d'un critère se
trouvant en col AN.
ex : si de an3:an500 j'ai les mots "défavorable", je souhaiterais colorer
les lignes crorrespondantes en marron (40). Puis-je programmer plusieurs
conditions dans le même code (WorksheetSelection_Change ?).
Merci pour tout
Michel69

3 réponses

1 2
Avatar
Daniel.C
Ou peut-être :

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim c As Range

Worksheets("Feuil2").Columns("A:bz").AutoFit

If Not Intersect([be3:be500], Target) Is Nothing Then
Application.EnableEvents = False
For Each c In Intersect([be3:be500], Target)
Select Case LCase(c.Value)
Case Is = "défavorable"
Range(Cells(c.Row, "A"), Cells(c.Row, "BG")). _
Interior.ColorIndex = 40

Case Is = "très défavorable"
Range(Cells(c.Row, "A"), Cells(c.Row, "BG")). _
Interior.ColorIndex = 40

Case Is = "favorable", "très favorable"
Range(Cells(c.Row, "A"), Cells(c.Row, "BG")). _
Interior.ColorIndex = 34

Case Else
Range(Cells(c.Row, "A"), Cells(c.Row, "BG")). _
Interior.ColorIndex = xlNone
End Select
Next c
Application.EnableEvents = True


ElseIf Not Intersect([an3:an500], Target) Is Nothing Then
Application.EnableEvents = False
For Each c In Intersect([an3:an500], Target)
If c.Value <> "" Then _
Range(Cells(c.Row, "A"), Cells(c.Row, "BG")). _
Interior.ColorIndex = 4

Next c
End If
Application.EnableEvents = True

End Sub

Daniel

La procédure suivante fonctionne très bien !

Sauf que, comme c'est une procédure événementielle, celle-ci
s'active seulement au moment où tu sélectionnes une cellule
des plages mentionnées et selon les conditions posées, elle
colore ou non la ligne. Pour ce faire, il faut que le texte y soit
déjà.

Si tu désires que la couleur se modifie dès la modification du
contenu du texte, tu dois retenir plutôt l'événement
"Private Sub Worksheet_Change(ByVal Target As Range)"
Pour ce faire, tu n'as qu'à modifier la ligne de déclaration
de la procédure... le reste ne change pas.

'--------------------------------------------------------
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim c As Range

Worksheets("Feuil2").Columns("A:bz").AutoFit

If Intersect([be3:be500], Target) Is Nothing Then Exit Sub
Application.EnableEvents = False
For Each c In Intersect([be3:be500], Target)
Select Case LCase(c.Value)
Case Is = "défavorable"
Range(Cells(c.Row, "A"), Cells(c.Row, "BG")). _
Interior.ColorIndex = 40

Case Is = "très défavorable"
Range(Cells(c.Row, "A"), Cells(c.Row, "BG")). _
Interior.ColorIndex = 40

Case Is = "favorable", "très favorable"
Range(Cells(c.Row, "A"), Cells(c.Row, "BG")). _
Interior.ColorIndex = 34

Case Else
Range(Cells(c.Row, "A"), Cells(c.Row, "BG")). _
Interior.ColorIndex = xlNone
End Select
Next c
Application.EnableEvents = True


If Intersect([an3:an500], Target) Is Nothing Then Exit Sub
Application.EnableEvents = False
For Each c In Intersect([an3:an500], Target)
If c.Value <> "" Then _
Range(Cells(c.Row, "A"), Cells(c.Row, "BG")). _
Interior.ColorIndex = 4

Next c
Application.EnableEvents = True

End Sub
'--------------------------------------------------------


Avatar
MichDenis
Concernant les diverses conditions, je fais confiance au demandeur
je suppose que personne ne sait mieux que lui ce qu'il veut !
Je propose seulement une façon de faire ... ;-)
Avatar
Daniel.C
Oui, ton code n'est pas en cause, je soulignais que s'il veut que la
macro agisse quanf il sélectionne une cellule de la plage an3:an500, il
ne peut pas mettre en tête :
If Intersect([be3:be500], Target) Is Nothing Then Exit Sub
Daniel

Concernant les diverses conditions, je fais confiance au demandeur
je suppose que personne ne sait mieux que lui ce qu'il veut !
Je propose seulement une façon de faire ... ;-)


1 2