Mise en forme conditionelle - VBA

Bonjour à tous

Je suis actuellement coincé et j'aurai aimé un peu d'aide

j'ai une plage de cellule : range (cells(7,m),cells(7,x)) qui contient des chiffres en pourcentage.

j'aimerai avoir comme condition si cellule > 5% ou cellule <-5% alors mettre la couleur de police en rouge.

Merci de votre aide

Bonjour,

Tu n'as pas de besoin de programmer la MFC par VBA

capture d ecran 423
6mfc.xlsx (9.63 Ko)

coucou steelson ,

merci mais j'ai besoin de l'integrer dans ma vba car ma plage dans laquelle je veut affecter la MFC est dans une boucle. donc plusieurs zones à modifier la MFC.

Dans ce cas, exemple en B4

    Range("B4").Activate
    Selection.FormatConditions.Add Type:=xlExpression, Formula1:= _
        "=OU(B4<-0,05;B4>0,05)"
    Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
    With Selection.FormatConditions(1).Font
        .Bold = False
        .Italic = False
        .Color = -16776961
        .TintAndShade = 0
    End With
    Selection.FormatConditions(1).StopIfTrue = False

mais je ne comprends pas bien cette demande car ta macro sait où placer le résultat ? sauf si tu ouvres un nouvel onglet ou un nouveau fichier

Coucou

merci j'ai essaye ce code la mais ca fonctionne pas tout est rouge

'Range(Cells(m, 7), Cells(x, 7)).Activate
    Range(Cells(m, 7), Cells(x, 7)).FormatConditions.Add Type:=xlExpression, Formula1:="=OU(B5<-0,05;B5>0,05)"
    Range(Cells(m, 7), Cells(x, 7)).FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
    With Range(Cells(m, 7), Cells(x, 7)).FormatConditions(1).Font
        .Bold = False
        .Italic = False
        .Color = -16776961
        .TintAndShade = 0
    End With
    Selection.FormatConditions(1).StopIfTrue = False
capture

Peux-tu joindre un bout de fichier ?

Adapte cette formule à ton cas =OU(B5<-0,05;B5>0,05) B5 doit être la cellule la plus en haut et à gauche de ta zone

L'exemple ci-dessus était pour B4

Dans ce cas, exemple en B4

Bonjour Steelson,

Tu as bien raison, j'ai remplacé par la cellule la plus a gauche en haut de ma plage (G5) et ça marche ! Mais seulement pour le premier tableau...

Chose que je comprend tout a fait par ce que je suis dans une boucle qui crée à chaque tour un tableau avec des valeurs. Les tableaux sont à la suite mais du coup la cellule la plus en haut à gauche de la plage n'est plus "G5" mais "Gm" en réalité. j'ai donc essayé de remplacer "G5" par "cells(m,7)" mais ça ne fonctionne pas.

Si tu as une autre idée pour rendre "Formula1:="=OU( G5<-0,05;G5>0,05)" dynamique ce serait super.

 Range(Cells(m, 7), Cells(x, 7)).FormatConditions.Add Type:=xlExpression, Formula1:="=OU( G5<-0,05;G5>0,05)"
    Range(Cells(m, 7), Cells(x, 7)).FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
    With Range(Cells(m, 7), Cells(x, 7)).FormatConditions(1).Font
        .Bold = False
        .Italic = False
        .Color = -16776961
        .TintAndShade = 0
    End With
    Selection.FormatConditions(1).StopIfTrue = False

Si tu as besoin de plus d'info dis le moi et je te l'envoi.

Merci d'avance.

Bien sûr on peux rendre la formule dynamique facilement.

Pour aller plus loin, joins un bout de fichier ...

Je ne comprends pas ce qui ne fonctionne pas dans ton fichier.

Pour rendre dynamique la formule, tu peux mettre :

    Range(Cells(m, 7), Cells(x, 7)).FormatConditions.Add Type:=xlExpression, Formula1:="=OU(G" & m & "<-0,05;G" & m & ">0,05)"

avec m<x

et mettre pour éviter les erreurs

    Range(Cells(m, 7), Cells(x, 7)).FormatConditions.Add Type:=xlExpression, Formula1:="=OU(G" & m & "<-0,05;G" & m & ">0,05)"
    On Error Resume Next
    Range(Cells(m, 7), Cells(x, 7)).FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
    On Error GoTo 0

J'ai essayé mais il y a un message d'erreur :

Erreur d'execution "9" l'indice n'appartient pas à la selection.

 Range(Cells(m, 7), Cells(x, 7)).FormatConditions.Add Type:=xlExpression, Formula1:="=OU(G" & m & "<-0,05;G" & m & ">0,05)"
    On Error Resume Next
    Range(Cells(m, 7), Cells(x, 7)).FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
    On Error GoTo 0
    With Range(Cells(m, 7), Cells(x, 7)).FormatConditions(1).Font
        .Bold = False
        .Italic = False
        .Color = -16776961
        .TintAndShade = 0
    End With
    Selection.FormatConditions(1).StopIfTrue = False

J'ai essayé mais il y a un message d'erreur :

Erreur d'execution "9" l'indice n'appartient pas à la selection.

sur quelle ligne ?

sur la derniere ligne

Selection.FormatConditions(1).StopIfTrue = False

Ok j'ai compris il y avait un soucis car avant d’exécuter la macro j’étais sur une cellule , la sélection était donc faussé.

du coup petite modif sur mon code sur la dernière ligne. j'ai remplacer sélection par ma plage directement.

Merci beaucoup steelson pour ton aide.

 Range(Cells(m, 7), Cells(x, 7)).FormatConditions.Add Type:=xlExpression, Formula1:="=OU(G" & m & "<-0,05;G" & m & ">0,05)"
    On Error Resume Next
    Range(Cells(m, 7), Cells(x, 7)).FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
    On Error GoTo 0
    With Range(Cells(m, 7), Cells(x, 7)).FormatConditions(1).Font
        .Bold = False
        .Italic = False
        .Color = -16776961
        .TintAndShade = 0
    End With
    Range(Cells(m, 7), Cells(x, 7)).FormatConditions(1).StopIfTrue = False
Rechercher des sujets similaires à "mise forme conditionelle vba"