Cherche aide sur passage de cases en couleur selon valeur

Bonjour,

Je débute dans la création de macro et j'essaie de monter une macro avec bouton qui me permettrait de passer en couleur une case en fonction de la valeur de la case du dessus.

Actuellement voici le code que j'ai pu rentrer mais j'ai encore beaucoup de colonne à faire et sur de nombreuses lignes.

J'aurai aimé savoir s'il y avait un moyen plus rapide et moins redondant d'écrire ce code.

Sub Couleur()

'Couleur colonne B
If Range("B11") > Range("B10") Then
Range("B11").Font.Color = RGB(0, 176, 80)
End If

If Range("B11") < Range("B10") Then
Range("B11").Font.Color = RGB(255, 0, 0)
End If

'Couleur colonne C
If Range("C11") > Range("C10") Then
Range("C11").Font.Color = RGB(0, 176, 80)
End If

If Range("C11") < Range("C10") Then
Range("C11").Font.Color = RGB(255, 0, 0)
End If

'Couleur colonne D
If Range("D11") > Range("D10") Then
Range("D11").Font.Color = RGB(0, 176, 80)
End If

If Range("D11") < Range("D10") Then
Range("D11").Font.Color = RGB(255, 0, 0)
End If

'Couleur colonne I
If Range("I11") > Range("I10") Then
Range("D11").Font.Color = RGB(0, 176, 80)
End If

If Range("I11") < Range("I10") Then
Range("I11").Font.Color = RGB(255, 0, 0)
End If

'Couleur colonne J
If Range("J11") > Range("J10") Then
Range("J11").Font.Color = RGB(0, 176, 80)
End If

If Range("J11") < Range("J10") Then
Range("J11").Font.Color = RGB(255, 0, 0)
End If

'Couleur colonne K
If Range("K11") > Range("K10") Then
Range("K11").Font.Color = RGB(0, 176, 80)
End If

If Range("K11") < Range("K10") Then
Range("K11").Font.Color = RGB(255, 0, 0)
End If

'Couleur colonne L
If Range("L11") > Range("L10") Then
Range("L11").Font.Color = RGB(0, 176, 80)
End If

If Range("L11") < Range("L10") Then
Range("L11").Font.Color = RGB(255, 0, 0)
End If

End Sub
image

Bonjour,

Pourquoi ne pas utiliser de mise en forme conditionnelle avec formule pour faire ça?

Aussi je vois que dans le code c'est la couleur de police qui est modifié, est-ce bien le but recherché?

Ces questions mises de côté, voici une version compactée du code:

Sub Couleur()
Dim couleurSup As Long, couleurInf As Long
Dim Cel As Range

couleurSup = RGB(0, 176, 80)
couleurInf= RGB(255, 0, 0)

Application.ScreenUpdating = False

For Each Cel In Range("B11", "L11").Cells
    If Cel > Cel.Offset(-1, 0) Then
        Cel.Font.Color = couleurSup
    ElseIf Cel < Cel.Offset(-1, 0) Then
        Cel.Font.Color = couleurInf
    End If
Next Cel

Application.ScreenUpdating = True
End Sub

Bonjour,

Merci pour votre retour.

C'est effectivement bien le but recherché. Le but étant d'afficher en rouge des pertes et en vert des profits par rapport à la case du dessus.

Effectivement j'aurais pu faire une mise en forme conditionnelle, mais je souhaitais écrire un début de code seul.

C'est super ça marche parfaitement.

J'ai ducoup élargie la macro jusqu'à Y11.

J'aimerai également appliquer ce code aux lignes dessous. A mon petit niveau je partirai pour recopier le code en changeant juste les numéros de ligne mais je suppose qu'il y a un moyen plus simple de le faire ?

Merci d'avance

Bonjour FemtoLoki et

Juste une petite recommandation,
utiliser VBA pour faire des choses qu'Excel sait faire naturellement, n'est jamais une bonne solution

Ceci dit, bonne journée.

Bonjour BrunoM45,

Merci de la recommandation, j'en prend bonne note.

Bonne journée à toi aussi

Hello,

Connais tu les mises en forme conditionnelles ?

Ça permettrait de répondre à ton sujet sans VBA et pour toutes les lignes.

Si tu ne connais pas ce sera avec plaisir de te faire découvrir cette option. Si tu connais, alors utilise les

@+

Bonjour,

Oui les mises en formes conditionnelles sont plus adaptées pour faire ça.

Pour VBA, il faut changer cette ligne:

For Each Cel In Range("B11", "L11").Cells

par:

For Each Cel In Range("B11", "Y20").Cells

Pour faire ça pour la plage B11:Y20 par exemple.

Ou alors modifier la procédure de cette façon:

Sub Couleur(Plage as Range)
Dim couleurSup As Long, couleurInf As Long
Dim Cel As Range

couleurSup = RGB(0, 176, 80)
couleurInf= RGB(255, 0, 0)

Application.ScreenUpdating = False

For Each Cel In Plage.Cells
    If Cel > Cel.Offset(-1, 0) Then
        Cel.Font.Color = couleurSup
    ElseIf Cel < Cel.Offset(-1, 0) Then
        Cel.Font.Color = couleurInf
    End If
Next Cel

Application.ScreenUpdating = True
End Sub

Et l'appeler comme ça:

Sub test()
Couleur Range("B11", "Y20")
Couleur Range("B30", "J50")
End Sub

Merci beaucoup,

Je connais bien les mises en forme conditionnelle mais je souhaitais aussi commencer un peu le VBA.

Rechercher des sujets similaires à "cherche aide passage cases couleur valeur"