Problème de mise en forme conditionnelle comparant deux valeurs

Bonjour,

J'ai un problème de mise en forme conditionnelle sur Excel. Je veux mettre en place un jeu de quatre icônes sur la ligne du haut en fonction de la valeur contenue sur la ligne du dessous :

- flèche verte vert le haut si la valeur est supérieure à 1,02 fois celle du bas

- flèche jaune diagonale vers le haut si la valeur est supérieure à celle du bas mais moins que 1,02 fois

- trait jaune horizontal si la valeur est égale à celle du bas

- flèche rouge vers le bas si la valeur est inférieure à celle du bas

Voilà le code VBA que j'ai :

Sub MFC(Rng)

    Application.CutCopyMode = False
    Rng.FormatConditions.Delete
    Rng.FormatConditions.AddIconSetCondition
    Rng.FormatConditions(1).SetFirstPriority
    With Rng.FormatConditions(1)
        .ReverseOrder = False
        .ShowIconOnly = False
        .IconSet = ActiveWorkbook.IconSets(xl4Arrows)
    End With
    Rng.FormatConditions(1).IconCriteria(1).Icon = xlIconRedDownArrow
    With Rng.FormatConditions(1).IconCriteria(2)
        .Type = xlConditionValueFormula
        .Value = "=" & Rng.Offset(1, 0).Address
        .Operator = 7
        .Icon = xlIconYellowDash
    End With
    With Rng.FormatConditions(1).IconCriteria(3)
        .Type = xlConditionValueFormula
        .Value = "=" & Rng.Offset(1, 0).Address
        .Operator = 5
        .Icon = xlIconYellowUpInclineArrow
    End With
    With Rng.FormatConditions(1).IconCriteria(4)
        .Type = xlConditionValueFormula
        .Value = "=1.02*" & Rng.Offset(1, 0).Address
        .Operator = 5
        .Icon = xlIconGreenUpArrow
    End With

End Sub

Cela fonctionne très bien sauf lorsque j'ai une valeur négative qui est égale à celle du bas. La mise en forme me met systématiquement une flèche verte vers le haut à la place du trait jaune horizontal.

J'ai aussi essayé en appliquant manuellement cette mise en forme avec les mêmes critères et le problème est le même.

Savez-vous pourquoi ?

Merci d'avance,

Nathyouss

Bonjour Nathyouss

Est-ce que .Value = "=1.02*" & Rng.Offset(1, 0).Address ne devrait pas
être .Value = ">1.02*" & Rng.Offset(1, 0).Address
(changement de = en >)

Bonjour Green SoftS,

De ce que j'ai compris, ce n'est pas possible. .Value correspond à la valeur qui va être prise pour comparer la valeur dans la case où la mise en forme s'applique. Derrière .Value = , je dois mettre soit une valeur, soit une formule que j'introduis avec "=".

La gestion de l'opérateur se fait avec .Operator. Et, seuls les opérateurs 5 (>) et 7 (>=) sont disponibles pour ma condition.

J'ai essayé de forcer en mettant d'autres valeurs derrière .Operator (notamment 3 (=)) ou en mettant directement les bons opérateurs dans .Value mais ça me renvoie une erreur à chaque fois.

Je viens d'ailleurs de vérifier et la mise en forme me met une flèche verte vers le haut dès qu'une valeur négative est comparée à une autre valeur négative : qu'elle soit inférieure, supérieure ou égale à l'autre.

Bonjour Nathyouss

Juste une question, pourquoi tu passes par VBA "directement" ?
As-tu essayé tes conditions, par l'éditeur de MFC avant de tenter de l'encoder ?

Au passage... Ce serait plus simple...

Je passe par VBA parce que cette mise en forme fait partie d'une macro que j'utilise pour importer et exporter des données.

Comme je l'ai dit dans mon premier message, j'ai aussi essayé d'appliquer la mise en forme à la main pour voir si cela venait de mon code mais le problème persiste donc ça doit être autre chose (j'ai d'ailleurs utilisé l'outil d'enregistrement de macro en appliquant la mise en forme à la main et j'ai obtenu un code similaire à ce que j'avais fait).

Voilà un fichier en exemple. En D1, je devrais avoir une flèche jaune diagonale. En G1, une flèche rouge. Et en K1, un trait jaune. Mais, j'ai des flèches vertes partout.

9classeur1.xlsx (9.42 Ko)

Bonjour Nathyouss,

Vous voulez mais faut-il avoir une bonne MFC aussi, non...

image

A+

Bonjour BrunoM45,

Je ne comprends pas votre réponse ...

Re,

Si je regarde votre MFC

Flèche verte vers le haut, si valeur de D1 est > à 1,02 * D2 = -330825
D1 valant -324338 est bien supérieur à -330825

Vous ne pouvez donc pas avoir comme vous le "voulez" une flèche jaune diagonale,
à moins d'avoir une autre valeur en D1 ou change la formule

Est-ce plus clair ainsi !?

A+

Mais pourtant, cela fonctionne pour la case B1 qui m'affiche bien une flèche jaune et la formule est la même. Idem pour I1 qui affiche une flèche rouge et pas G1 alors qu'elle devrait aussi. Mon problème est que la mise en forme conditionnelle fonctionne quand elle compare deux valeurs positive ou une valeur positive et une valeur négative mais pas quand elle compare deux valeurs négatives. Et je ne comprends pas pourquoi ...

Re,

Une MFC est d'une logique implacable

image

Oui ok, je vois le problème je crois !

Bonjour Nathyouss, le fil

@BrunoM45

Bien vu... Pertinence et efficacité !

Rechercher des sujets similaires à "probleme mise forme conditionnelle comparant deux valeurs"