Colorer une ligne suivant valeur VBA EXCEL

Résolu/Fermé
tito23 Messages postés 305 Date d'inscription mardi 10 août 2010 Statut Membre Dernière intervention 16 janvier 2013 - 23 mai 2012 à 11:27
tito23 Messages postés 305 Date d'inscription mardi 10 août 2010 Statut Membre Dernière intervention 16 janvier 2013 - 23 mai 2012 à 12:46
Bonjour,

Je voudrais colorer une ligne ou bien un ensemble de cellules d'une ligne suivant la valeur d'une cellule d'un colonne, j'ai fait ceci
Private Sub colorer()
Dim i As Integer
Dim plage As Range
Set plage = Range(Cells(lig, 2), Cells(lig, 5))
i = 6
While Cells(5, i) <> ""
Select Case Range("E" & i)
    Case Is = "Sandbox"
        plage.Interior.ColorIndex = 19 'Jaune pâle pour "En attente"
     Case Is = "Delivery"
        plage.Interior.ColorIndex = 27 'Jaune foncé pour "Déclinée"
    Case Is = "Factory"
      plage.Interior.ColorIndex = 3 'Rouge pour "Perdue"
    Case Else
        plage.Interior.ColorIndex = -4142 ' enlève la couleur
End Select

i = i + 1

Wend


End Sub

Lorsque je clique sur "exécuter", j'ai l'erreur d'exécution 1004 'Erreur définie par l'application ou par l'objet',

Et merci d'avance


A voir également:

3 réponses

lermite222 Messages postés 8702 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
Modifié par lermite222 le 23/05/2012 à 12:25
Bonjour,
Un peu optimiser..
Private Sub colorer() 
Dim lig As Long, N As Integer 
    With Sheets("Feuil1") 
        For lig = 6 To .Range("E6").End(xlDown).Row 
            Select Case .Range("E" & lig) 
                Case Is = "Sandbox": N = 19 'Jaune pâle pour "En attente" 
                Case Is = "Delivery": N = 27 'Jaune foncé pour "Déclinée" 
                Case Is = "Factory": N = 3 'Rouge pour "Perdue" 
                Case Else: N = -4142 ' enlève la couleur 
            End Select 
            .Range(Cells(lig, 2), Cells(lig, 5)).Interior.ColorIndex = N 
        Next lig 
    End With 
End Sub

A+
Si tu te cognes à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
NOTE : Je ne répond pas aux MP pour les questions techniques.
1
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
23 mai 2012 à 11:31
Bonjour

pas de valeur donnée à la variable "lig"
0
tito23 Messages postés 305 Date d'inscription mardi 10 août 2010 Statut Membre Dernière intervention 16 janvier 2013 4
23 mai 2012 à 11:44
Merci de ta réponse, j'ai fait comme ceci, pas d'erreur mais pas de coloration pour les lignes
Private Sub colorer()
ThisWorkbook.Activate
Dim i As Integer
Dim plage As Range
Dim lig As Byte
With Sheets("Feuil1")

i = 6
While Cells(5, i) <> ""
lig = Cells(5, i).Row
Set plage = .Range(Cells(lig, 2), Cells(lig, 5))
Select Case .Range("E" & i)
    Case Is = "Sandbox"
        plage.Interior.ColorIndex = 19 'Jaune pâle pour "En attente"
     Case Is = "Delivery"
        plage.Interior.ColorIndex = 27 'Jaune foncé pour "Déclinée"
    Case Is = "Factory"
      plage.Interior.ColorIndex = 3 'Rouge pour "Perdue"
    Case Else
        plage.Interior.ColorIndex = -4142 ' enlève la couleur
End Select

i = i + 1

Wend
End With
End Sub
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
23 mai 2012 à 11:54
actuellement tu inplémentes les colonnes et non les lignes?
While Cells(5, i) <> ""
tu t'arretes à la 1° colonne vide à partir de la col E
0
tito23 Messages postés 305 Date d'inscription mardi 10 août 2010 Statut Membre Dernière intervention 16 janvier 2013 4
23 mai 2012 à 12:00
Cells(5,i) c'est pas la cellule qui est à la colonne E et la ligne i?
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
23 mai 2012 à 12:05
non
la syntaxe est cells(ligne,colonne)

si c'est ton erreur tu n'as pas besoin d'une double définition "i" et "lig" garde en 1 seule
0
tito23 Messages postés 305 Date d'inscription mardi 10 août 2010 Statut Membre Dernière intervention 16 janvier 2013 4
Modifié par tito23 le 23/05/2012 à 12:47
Merci pour ton aide, le problème est résolu, j'ai comme ça
Sub Worksheet_Change(ByVal Target As Range) 

Dim i As Integer 
Dim plage As Range 
Dim lig As Byte 
With Sheets("Feuil1") 

i = 6 
While i < 50  'Cells(5, i) <> "" And 
lig = i 
Set plage = .Range(Cells(lig, 2), Cells(lig, 5)) 
Select Case .Range("E" & i).Value 
    Case Is = "Sandbox" 
        plage.Interior.ColorIndex = 19 'Jaune pâle pour "En attente" 
     Case Is = "Delivery" 
        plage.Interior.ColorIndex = 27 'Jaune foncé pour "Déclinée" 
    Case Is = "Factory" 
      plage.Interior.ColorIndex = 3 'Rouge pour "Perdue" 
    Case Else 
        plage.Interior.ColorIndex = -4142 ' enlève la couleur 
End Select 

i = i + 1 

Wend 
End With 
End sub

Merci de changer le problème en résolu quand vous trouvez une solution
0