Mis en forme VBA

Bonjour,

Je chercher un moyen de changer la couleur d'une cellule en fonction de la valeur d'une autre.

J'ai commencé à travailler sur cette fonction :

Sub Colorcells()
 Dim cel As Range

    For Each cek In Range("B1:B44")
    If cel.Value = "OFFRE" Then Cells("A1:A41").Interior.Color = RGB(255, 0, 0)
    ElseIf cel.Value = "PERDU" Then Cells("A1:A41").Interior.Color = RGB(255, 255, 0)
    ElseIf cel.Value = "SIGNE" Then Cells("A1:A41").Interior.Color = RGB(146, 208, 80)
    Else: cel.Interior.ColorIndex = xlColorIndexNone

End Sub

Mais malheureusement ça ne donne pas les résultat escompté, à savoir, Si les cellules du range ("B4:B41") ont pour valeur "OFFRE" alors les cellules du range ("A4:A41") seront jaunes...

En vous remerciant par avance pour votre aide,

Bonjour,

2 problèmes

-for each cek au lieu de cel

-si vous appliquez la couleur à toute la plage, seule la dernière cellule répondant aux conditions, verra sa condition s'appliquer à toutes les autres.

Sub Colorcells()
    Dim cel As Range
    Dim DerLig As Long
    DerLig = Range("B" & Rows.Count).End(xlUp).Row
    For Each cel In Range("B4:B" & DerLig)
        If cel.Value = "OFFRE" Then
            cel.Offset(0, -1).Interior.Color = RGB(255, 0, 0)
        ElseIf cel.Value = "PERDU" Then
            cel.Offset(0, -1).Interior.Color = RGB(255, 255, 0)
        ElseIf cel.Value = "SIGNE" Then
            cel.Offset(0, -1).Interior.Color = RGB(146, 208, 80)
        Else: cel.Interior.ColorIndex = xlColorIndexNone
        End If
    Next
End Sub

Cdlt

Bonjour,

Merci pour votre retour, en effet j'avais vu le "ces" juste après avoir envoyé mon message...

J'ai repris votre code :

Sub Colorcells()
    Dim cel As Range
    Dim DerLig As Long
    DerLig = Range("B" & Rows.Count).End(xlUp).Row
    For Each cel In Range("B4:B" & DerLig)
        If cel.Value = "OFFRE" Then
            cel.Offset(0, -1).Interior.Color = RGB(255, 0, 0)
        ElseIf cel.Value = "PERDU" Then
            cel.Offset(0, -1).Interior.Color = RGB(255, 255, 0)
        ElseIf cel.Value = "SIGNE" Then
            cel.Offset(0, -1).Interior.Color = RGB(146, 208, 80)
        Else: cel.Interior.ColorIndex = xlColorIndexNone
        End If
    Next
End Sub

Toutefois, ça n'affecte pas les cellules en "A" ... Pourtant si j'ai bien compris c'est le but du cel.Offset

Toutefois, ça n'affecte pas les cellules en "A" ... Pourtant si j'ai bien compris c'est le but du cel.Offset
Bien sûr que si, effacez les couleurs de la colonne A et relancez la macro, pour voir

Autant Pour moi, il faut lancer le script ...
Est-ce qu'il y aurait un moyen pour que ça se fasse de façon automatique à chaque changement de valeur dans B ?

Copiez ce code dans le module de la feuille 3

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim cel As Range
    Dim DerLig As Long
    On Error GoTo Sortie
    Application.EnableEvents = False
    DerLig = Range("B" & Rows.Count).End(xlUp).Row

    If Not Intersect(Target, Range("B4:B" & DerLig)) Is Nothing Then
        For Each cel In Range("B4:B" & DerLig)
            If cel.Value = "OFFRE" Then
                cel.Offset(0, -1).Interior.Color = RGB(255, 0, 0)
            ElseIf cel.Value = "PERDU" Then
                cel.Offset(0, -1).Interior.Color = RGB(255, 255, 0)
            ElseIf cel.Value = "SIGNE" Then
                cel.Offset(0, -1).Interior.Color = RGB(146, 208, 80)
            Else: cel.Interior.ColorIndex = xlColorIndexNone
            End If
        Next
    End If
Sortie:
    Application.EnableEvents = True
End Sub

Merci beaucoup !

Rechercher des sujets similaires à "mis forme vba"