Analyse de conditions dans un Tableau

@taz, je vous souhaite aussi une bonne 2024.

je suppose qu’il y a un ordre dans les couleurs et que bleu > vert > jaune > orange > rouge. C’est pourquoi j’ai déplacé la colonne jaune. Maintenant la fonction personnalisée contrôle les segments de gauche (colonne F) à droite (colonne J).
Si vous commencez avec des décimaux, tout dépend de votre séparateur décimal, mon excel fonctionne avec la virgule comme séparateur décimal, donc c’est « 5,01à10,01 » au lieu de "5.01à10.01"par exemple, IMPORTANT !!!
Puis on commence de gauche à droite
bleu si taux réel >11 = sans discussion, bleu
vert si taux réel dans le segment « 5à10 » donc 5 <= taux réel <= 10 , aussi sans discussion
jaune si taux réel dans le segment « 10à11 » donc 10 <= taux réel <= 11. Ici, on peut discuter pour les valeurs 10 et 11. Si le taux réel = 10, la fonction a déjà choisi pour « vert » et n’arrive plus à ce segment. Pour le valeur 11, comme bleu était « >11 » et ne pas « >=11 », le 11 « exact » n’était compris dans le segment bleu, donc le couleur sera jaune.
etc;
Avec les décimaux, cela est dangeureux et inutile je pense!
Supposons vert est « 10à11 » et jaune est « 11,01à12 », les valeurs entre 11 et 11,01 ne seront pas jaune !!!

Comme dit dans mon message précédent, ma mfc avait inclus une mauvaise cellule pour le vert, d’où ma question sur les décimales, donc même avec les chiffres que tu avais mis ça fonctionne, j’avais compris le principe de comparaison du taux réel colonne K par rapport à l’objectif colonne C, ce qui m’intriguait au début était de savoir comment tu gérais les messages d’alerte avant de voir le tableau en colonne AA:AB.
Ce qui m’intrigue encore est la création de la fonction personnalisée, puisque pour la comparaison, on utilise des chiffres colonne K et C et dans certains des paramètres il y a du texte et des symboles < ou >

@taz067,
dans la fonction, je contrôle le début de la cellule pour voir s’il y a un >=, >, <=, < ou =. Dans ces cas, on compare le taux avec le chiffre après cela.
Autrement, si on a une construction xxàyy, on le sépare et récupère le xx et le yy

Function CC(valeur, Limites As Range, Messages As Range, Objectif As Range)
     Dim X(3)
     If valeur = "" Then X(0) = 6: X(1) = "NULL": GoTo FIN
     For i = 1 To Limites.Columns.Count
          Set c = Limites.Cells(1, i)
          If c.Value Like "<=*" Then If valeur <= CDbl(Mid(c.Value, 2)) Then X(0) = i: GoTo FIN
          If c.Value Like "<*" Then If valeur < CDbl(Mid(c.Value, 2)) Then X(0) = i: GoTo FIN
          If c.Value Like ">=*" Then If valeur >= CDbl(Mid(c.Value, 2)) Then X(0) = i: GoTo FIN
          If c.Value Like ">*" Then If valeur > CDbl(Mid(c.Value, 2)) Then X(0) = i:  GoTo FIN
          If c.Value Like "=*" Then If valeur = CDbl(Mid(c.Value, 2)) Then X(0) = i:  GoTo FIN
          If c.Value Like "*#à#*" Then
               sp = Split(c.Value, "à")
   Debug.Print CDbl(sp(0)), valeur, CDbl(sp(1))
               
               If CDbl(sp(0)) <= valeur And valeur <= CDbl(sp(1)) Then X(0) = i: GoTo FIN
          End If
     Next

FIN:
     X(1) = c.Value
     Select Case X(0)
          Case 0: X(2) = Messages.Cells(X(0), 1).Value: X(3) = Messages.Cells(X(0), 2).Value
          Case 1: X(2) = Messages.Cells(X(0), 1).Value: X(3) = Messages.Cells(X(0), 2).Value
          Case 2: X(2) = Messages.Cells(X(0), 1).Value: X(3) = Messages.Cells(X(0), 2).Value
          Case 3: X(2) = Messages.Cells(X(0), 1).Value: X(3) = Messages.Cells(X(0), 2).Value
          Case 4: X(2) = Messages.Cells(X(0), 1).Value: X(3) = Messages.Cells(X(0), 2).Value
          Case 5: X(2) = Messages.Cells(X(0), 1).Value: X(3) = Messages.Cells(X(0), 2).Value
          Case Else: X(2) = "Problème": X(3) = "problème"
     End Select
     If InStr(1, X(3), "#") > 0 Then X(3) = Replace(X(3), "#", IIf(Objectif.Value > valeur.Value, "inférieur", "supérieur"))

     CC = X
End Function

Pour des raisons esthétiques, on pouvait encore faire quelque changements dans la fonction pourque le contenu des cellules serait « 10 à 11 » au lieu de « 10à11 » (plus lisible).

Ah ok, je n’avais pas capté que c’était via une macro, je n’avais pas vu le format de fichier xlsm
en tout cas merci pour les explications
passe une bonne journée encore

merci.
Il y a un inconvénient, cette fonction personnalisée ne fonctionne pas dans un tableau structuré et provoque un erreur « #OVERLOOP! » (en français ???). C’est pourquoi les colonnes Q:T ne sont pas dans ces 2 tableaux.
Si je refais la macro ou demande le résulta d’une manière différente, cela pourrait fonctionner dans un tableau.

Après le résultat de comment il est demandé restera à voir avec @atlas
ou de comment il pense l’intégré à son tableau original, mais je pense que le masquage des colonnes, même du tableau structuré restera la plus simple,

bon, j’ai supprimé des colonnes et des MFCs pour simplifier tout.
la plage A1:M7 est un tableau structuré, les données à partir de la ligne 8 ne le sont pas.
On demande maintenant 2 fois par ligne pour calculer, parce qu’on utilise « index » dans les formules des colonnes L et M. Comme ce n’est que pour 30 lignes, cela n’est pas vraiment un problème, mais autrement et on choisit pour ne pas utiliser des TS, on peut encore simplifier la fonction et la feuille.
Mais le gain est minimal.
EvaluationTauxDepensesCouleurMessage_v005.xlsm (32,5 Ko)
PS. la ligne 2, j’avais commencé à modifier les segments de « 5à10 » à « 5 à 10 » (lisibilité)

petit faute dans le fichier précédent et on peut cacher la colonne L
EvaluationTauxDepensesCouleurMessage_v005.xlsm (33,2 Ko)

Pour alléger, j’avais aussi supprimé toutes mes mfc pour ne laisser que celle en liaison avec la fonction cc
par contre, je ne sais pas si dans son tableau original @atlas pourras supprimer des colonnes, ce sera à lui de voir

1 « J'aime »

Bonsoir Cow18, taz,

Il semble qu’il y ait eu deس discussions pour parvenir à un bon résultat, merci à vous deux pour votre implication…

En ce qui concerne la nouvelle fonction CC, elle donne des résultats satisfaisants.

J’ai quelques interrogations à ce sujet.

Pourquoi les conditions de vérification ont-elles été modifiées et remplacées par la forme suivante : de x à z au lieu des conditions comme « > 10 && <= 11 »?

« x à y » signifie que la valeur à comparer se situe entre >= x et <= y, et cette condition ne concerne que la couleur verte.

La couleur jaune représente une tolérance de +1% par rapport à la borne supérieure Max%, tandis que la couleur orange représente -1% par rapport à la borne inférieure Min%.

Quant à la couleur bleue, elle est totalement supérieure à la borne Max% (pour les catégories Épargnes, Investissements, Dons) et totalement inférieure à la borne Min% pour toutes les autres catégories, sauf celles où la borne Min% = 0.

En ce qui concerne la couleur rouge, elle est totalement inférieure à la borne Min% pour les catégories Épargnes, Investissements, Dons, et totalement supérieure à la borne Max% pour toutes les autres catégories.

Merci d’avance.

cette discussion me fatigue tellement que je l’ai même laissée un instant.
La construction « xx à yy » est plus facile à manipuler dans la fonction. Elle n’a qu’à séparer en 2 sur le « à ». On utilise que des integers ici ou on a aussi des décimaux ?
On compare les segments de gauche à droite. Si le segment précédent est de "10 à 11, donc . « > 10 && <= 11 » et le suivant est « > 11 && <= 12 », cela fonctionne avec « 11 à 12 » parce qu’avec la valeur « 11 », la fonction a déjà décidé d’utiliser le premier segment.
Y-a-t-il une ligne où les MFCs ou les commentaires ne sont pas comme il faut ?

Si les limites pour jaune sont plus ou moins 1%, on n’a qu’à traduire cela en chiffres.
C’est frustrant que quelque chose s’applique à une ligne et pas à une autre

bon, à vérifier, la ligne 11 par exemple
Vous pouvez mettre les 4 possibilités cad. par exemple
soit « 5 à 10 », soit « >5 à 10 », soit « 5 à <10 », soit « >5 à <10 »
EvaluationTauxDepensesCouleurMessage_v005.xlsm (32,2 Ko)

1 « J'aime »

Bonjour,

Je vais tester, merci.

Bonjour Cow18, taz, le forum,

Les premiers essais se sont avérés concluants.

Cependant, comment la fonction CC parvient-elle à différencier et à interpréter les expressions suivantes : 5à10, 10à11 et 4à5, malgré leur similitude dans la forme mais pas dans le traitement ?

Traitement attendu :

4à5 se traduit par : ET(valeur>=4;valeur<5)

5à10 se traduit par : ET(valeur>=5;valeur<=10)

10à11 se traduit par : ET(valeur>10;valeur<=11)

Merci.

Cow18 l’a pourtant expliqué

un autre exemple avec les segments en chevauchement
image

bleu sera >5 && < 10
vert sera >=4 && <=5 et <=10 && <=11 (parce que bleu a déjà pris la partie en chevauchement)
jaune sera >3 && <4 et >11 && <=12 (parce que bleu et vert …)
orange sera >=2 && <=3 et >12 && <13 (sorry ce doit être <13 au lieu de >13 dans l’image)
rouge sera <=0 && <2 et >=13 && <=100

Bonsoir,

La couleur verte est toujours attribuée à la fourchette recommandée, c’est-à-dire entre le Min% et le Max%.
Dans mon classeur Excel joint, j’ai présenté les différents traitements appliqués aux taux de dépenses par catégorie.
Actuellement, les conditions appliquées sont basées sur mes recherches, mais elles pourront être modifiées ultérieurement pour s’adapter à l’évolution du suivi budgétaire.

Merci.

IllustationEvaluationTauxDepenses.xlsx (17,9 Ko)

vous pouvez utiliser des formules dans la colonne G pour les verts, par exemple
la formule de G2 =B2 & " à " & C2
et l’étendre vers le bas
pareil pour les autres couleurs

qu’est-ce qu’il y a de si difficile dans cette façon d’écrire par rapport à votre façon d’écrire. C’est identique !
Au lieu de " && ", on a " à " et quand il n’y a rien en face, c’est « >= » ou « <= ».
Puis on a le problème quand le min et/ou le max changent, mais on peut mettre cela dans des formules.
ce n’est pas vouloir/pouvoir comprendre ???
Je vous donne une solution et vous devez l’adapter et l’appliquer

Bonjour Cow18,

Je n’ai pas réussi à l’adapter car la fonction se réinitialise lorsque la valeur est égale à « >=5à<=10 », comme le montre l’image ci-dessous :