Page 1 sur 1

[Résolu] MFC échelle de couleur sur format texte

MessagePublié: 11 Mai 2020 12:13
par shari
bonjour à tous, j'ai une plage de cellules dans laquelle on trouve du contenu au format texte puisqu'il s'agit d'une concaténation d'autres valeurs. Elles apparaissent donc ainsi 84(12) par exemple.
Or, je souhaiterais y appliquer une MFC type "échelle de couleur". Ça n'est évidemment pas possible puisqu'il s'agit de format texte, mais j'aurais souhaité pouvoir reproduire le résultat de la MFC appliquée sur les cellules dont sont extraites les données.
Au cas ou ce ne serait pas clair, un p'tit fichier joint.
Merci d'avance aux contributeurs

Re: MFC échelle de couleur depuis autres cellules

MessagePublié: 11 Mai 2020 17:42
par Jeff
Bonjour,

Je n’utilise pas LibO, mais tu devrais (re?)lire la FAQ sur le formatage en échelle de couleur :
https://wiki.documentfoundation.org/Faq/Calc/142/fr

Le dernier exemple (donc sur la dernière illustration) montre que l’on peut indexer les valeur min, max et centile sur d’autre cellules.

A +

Re: MFC échelle de couleur depuis autres cellules

MessagePublié: 11 Mai 2020 18:06
par shari
bonsoir, et merci pour cette redirection vers l'aide en ligne.
Cependant, dans l'exemple, est simplement illustré le fait qu'on peut modifier les valeurs d'étalonnage de l'échelle avec des valeurs extraites ailleurs. Mais ça ne permet pas de créer une échelle de couleurs dans des cellules "textes".

Re: MFC échelle de couleur depuis autres cellules

MessagePublié: 11 Mai 2020 19:57
par jeanmimi
Bonjour,
Comme le formatage conditionnel Echelle de couleur ne fonctionne pas sur des textes, la solution va sans doute aller vers une Macro.
Celle-ci devra identifier la couleur de chacune des cellules de la colonne E (code RGB) puis coller cette valeur de couleur dans l'arrière-plan de la cellule en vis à vis de la colonne G, et cela jusqu'à la dernière cellule de la plage de données.
S'il n'y a pas de meilleure solution, tu devras reposter ta demande dans la section Macro du forum.

Re: MFC échelle de couleur depuis autres cellules

MessagePublié: 11 Mai 2020 21:11
par Jean-Louis Cadeillan
Bonsoir,
Je n'ai pas réussi, dans la MFC Échelle de couleurs, même en utilisant formule en lieu et place de Min et de Max. La formule est là pour aller chercher des valeurs seuils ailleurs que dans la plage visée, mais ces seuils doivent être utilisés par rapport aux valeurs numériques de la plage visée, donc ça ne résout pas le problème.
On peut contourner en utilisant des styles, nommés 1 à 14 en utilisant les mêmes couleurs que dans la MFC Échelle de couleurs et en utilisant la formule de MFC suivante :
Code : Tout sélectionner   AgrandirRéduire
STYLE(GAUCHE(G6;TROUVE("(";G6)-1))
si on veut être indépendant des données de la colonne E ou bien
Code : Tout sélectionner   AgrandirRéduire
STYLE(E6)
sinon. Mais bon, cette solution n'est pas satisfaisante dans la mesure où elle crée une palette figée et non dynamique, contrairement à la MFC Échelle de couleurs.
Le wiki donne la méthode de calcul de cette échelle de couleur : il manque juste une fonction du style COLORIER (Cellule;R;V;B) et ça y a pas (j'ai retrouvé de plus ancienne tentatives, mais plus compatibles avec LibO). Pas vu d'extension non plus.
Cordialement,
Jean-Louis

Re: MFC échelle de couleur depuis autres cellules

MessagePublié: 14 Mai 2020 00:39
par OOotremer971
Bonjour à tous,

Une éventuelle solution dans le fichier joint :
Format1.png

Le seul moyen que j'ai trouvé est de redonner à la cellule son caractère numérique pour que le formatage conditionnel s'applique, tout en conservant l'affichage souhaité en utilisant les formats personnalisés :
Format.png
Format.png (6.29 Kio) Consulté 629 fois


Évidemment définir manuellement autant de format personnalisé que de valeur différentes contenues en colonne D est fastidieux et inenvisageable. Si l'idée est retenue, il faudra avoir recours à une macro pour automatiser la tâche et poursuivre en section macro comme le recommande les règles du forum.

A+

et le fichier pour tester :

Re: MFC échelle de couleur depuis autres cellules

MessagePublié: 14 Mai 2020 05:09
par shari
Merci OOotremer971,
cette solution me parait tout à fait viable, et répondre parfaitement au problème que je rencontre.
Je vais donc poster dans la section Macro pour développer celle ci.

Encore merci à tous les contributeurs qui se sont penchés sur cette question.

Re: MFC échelle de couleur depuis autres cellules

MessagePublié: 14 Mai 2020 08:45
par Jeff
OOotremer971 a écrit:Le seul moyen que j'ai trouvé est de redonner à la cellule son caractère numérique

Dans ce cas, la présence d'une virgule précédant les parenthèses serait envisageable ? :

Capture du 2020-05-14 10-54-21.png
Mise à jour capture-écran à 10h55

Re: MFC échelle de couleur depuis autres cellules

MessagePublié: 14 Mai 2020 11:54
par OOotremer971
Bonjour,
Jeff a écrit:Dans ce cas, la présence d'une virgule précédant les parenthèses serait envisageable ? :

Effectivement ce serait bien d'avoir l'avis de l’intéressé cela permettrait de se passer de macro du coup.

A+

Re: MFC échelle de couleur depuis autres cellules

MessagePublié: 14 Mai 2020 19:11
par OOotremer971
Re,

Finalement Jeff c'est un chef :lol: (ça rime...) en poussant un peu son raisonnement, plus de virgule, pas besoin de macro juste une légère différence de rang de l'unité à la centaine avec une simple formule :
Code : Tout sélectionner   AgrandirRéduire
=CNUM((C6*CHOISIR(NBCAR(D6)+1;0;10;100;1000))+D6&T(STYLE("Special")))

Shari.png

et un style personnalisé appliqué par formule avec la fonction STYLE() :
FormatShari.png
FormatShari.png (5.52 Kio) Consulté 563 fois


et le fichier pour tester :

A+

 Ajout : si la colonne D devait contenir des valeurs de l'ordre de l'unité ou de la centaine, il faudrait créer d'autres style perso pour adapter la position des parenthèses et utiliser la fonction CHOISIR() pour appliquer le bon 

Re: MFC échelle de couleur depuis autres cellules

MessagePublié: 15 Mai 2020 05:37
par shari
Terriblement efficace, et de plus, je n'ai pas à "réappliquer" une nouvelle MFC à chaque réactualisation.
Les valeurs d'une des colonnes sont des décimales, mais une simple formule arrondi permet de zapper le souci, car je n'ai pas besoin d'avoir une valeur précise.

Un immense merci à tous les contributeurs pour leur aide précieuse et leur imagination débordante!

Re: [Résolu] MFC échelle de couleur depuis autres cellules

MessagePublié: 15 Mai 2020 08:14
par Jeff
OOotremer971 a écrit: Jeff c'est un chef
Alors qu’avec OOotremer ça devient super (pour les rimes, je ne suis pas JJ Goldman, mais j’ai réussi à caser ça dans un alexandrin :mrgreen: )

Chapeau :super:

Re: [Résolu] MFC échelle de couleur depuis autres cellules

MessagePublié: 20 Mai 2020 07:12
par shari
bonjour à tous,
je reviens sur ce fil car en fait, la mise en forme ne réagit pas comme on pourrait l'espérer. Si on met des nombres qui comprennent soit moins soit plus de deux chiffres dans la colonne D, la formule et le style font en sorte de systématiquement affichés deux chiffres entre les parenthèses, ce qui n'a évidemment aucun sens puisque, pour se faire, soit le dernier chiffre de la colonne C est "prélevé" pour être mis entre les parenthèses, soit le premier chiffre de la colonne D est rajoutée au dernier de la colonne C.
Dans tous les cas, le résultat affiché en colonne H n'a plus ni queue ni tête..
Comme je ne comprends pas l'architecture et le fonctionnement du style "spécial", je suis incapable d'avancer seul pour résoudre ce souci.
Merci d'avance

Re: [Résolu] MFC échelle de couleur depuis autres cellules

MessagePublié: 20 Mai 2020 11:25
par OOotremer971
Bonjour,

La solution fait appel à trois styles personnalisés pour gérer différemment le cas des unité, dizaine et centaine de la colonne D :
Special1 :
Code : Tout sélectionner   AgrandirRéduire
0(0)

Special2 :
Code : Tout sélectionner   AgrandirRéduire
0(00)

Special3 :
Code : Tout sélectionner   AgrandirRéduire
0(000)


et une nouvelle formule pour sélectionner le bon style en rapport avec le nombre de caractère contenu colonne D :
Code : Tout sélectionner   AgrandirRéduire
=CNUM((C6*CHOISIR(NBCAR(D6)+1;1;10;100;1000))+D6&SI(NBCAR(D6)=1;T(STYLE("Special1"));SI(NBCAR(D6)=2;T(STYLE("Special2"));SI(NBCAR(D6)=3;T(STYLE("Special3"))))))


Mais pour moi cette solution n'est pas réellement adaptée pour faire ressortir une échelle de couleur cohérente comme si elle avait été indexée sur les valeurs de la colonne C puisque ce sont les valeurs de la colonne D qui sont considérées pour la créer comme si elle n'avait pas de parenthèses. On peut donc se retrouver avec des écarts allant de la dizaine au dizaine de millier :?

A+

 Ajout : A mon avis la solution par macro est plus pertinente. 

Re: MFC échelle de couleur depuis autres cellules

MessagePublié: 20 Mai 2020 12:47
par shari
Merci OOotremeer j'ai bien conscience de te solliciter tant et plus.
Je te rejoins sur le fait que cette solution ne fournit plus une échelle de couleur pertinente et qu'il me faudrait donc insister sur la macro. Cela étant, la solution par macro présente d'autres inconvénients de mise en oeuvre.
Avant de gratter vers la macro, je voudrais finir de tenter de comprendre les différents éléments de cette solution et notamment cette histoire de format défini par l'utilisateur. Je n'arrive pas à comprendre ou ni comment leur donner un "nom" type spécial 1, spécial 2, etc.
Car, si l'échelle de couleur n'est plus pertinente, en revanche l'information présentée ainsi est très claire et parlante ainsi.
Merci d'avance.

Re: MFC échelle de couleur depuis autres cellules

MessagePublié: 20 Mai 2020 21:24
par OOotremer971
shari a écrit:Je n'arrive pas à comprendre ou ni comment leur donner un "nom" type spécial 1, spécial 2, etc.

Il faut afficher le volet latéral (Ctrl+F5) et cliquer sur la lettre A avec le pinceau pour ouvrir le styliste :
Styliste.png
Styliste.png (7.14 Kio) Consulté 475 fois

Styliste2.png

clic droit au milieu du panneau puis==>Nouveau
Styliste3.png


à partir de là tu peux nommer ton nouveau style et paramétrer tous les attributs qui t’intéressent

A+

Re: MFC échelle de couleur depuis autres cellules

MessagePublié: 22 Mai 2020 13:05
par shari
bonjour à tous, je tente d'avancer à petit pas:
Le souci majeur de cette solution est qu'elle rend l'échelle de couleurs non pertinente en "bouleversant", les ordres de grandeurs. J'ai imaginé une solution qui rétablit ces ordres de grandeurs en multipliant les nombres de la colonne C par 1000 000. De cette manière l'addition des nombres de la colonne D ne vient plus modifier l'échelle de couleurs.
Code : Tout sélectionner   AgrandirRéduire
=CNUM((C6*1000000+D6)


En compliquant un peu le problème, j'ai ajouté une troisième colonne de nombres, et les "intègre" dans mon résultat final en leur appliquant un facteur 1/10 ou 1/100 de manière à ce qu'ils apparaissent après la virgule.
Code : Tout sélectionner   AgrandirRéduire
=CNUM((C6*1000000+D6+E6*CHOISIR(NBCAR(E6)+1;0,1;0,1;0,01;0,001)))


L'idée est ensuite de créer un style qui m'affiche "proprement" le résultat du calcul.
Code : Tout sélectionner   AgrandirRéduire
=CNUM((C6*1000000+D6+E6*CHOISIR(NBCAR(E6)+1;0,1;0,1;0,01;0,001))&SI(NBCAR(E6)=2;T(STYLE("test2"));T(STYLE("test1"))))

Et c'est là ou j'en suis, je n'arrive pas à créer un style qui me ferait "disparaitre" les 0 en trop.

De même, je souhaiterais faire "disparaitre" la virgule dans la présentation du résultat.

Je cherche en vain sur le net, mais j'ai l'impression que ces styles personnalisés ne font pas recette, ou alors c'est moi qui ne sait pas bien chercher.

Re: MFC échelle de couleur depuis autres cellules

MessagePublié: 22 Mai 2020 20:33
par OOotremer971
Bonjour,

Tu montres un exemple du visuel attendu :
shari_1.png
shari_1.png (4.88 Kio) Consulté 439 fois

est-ce que tu peux montrer celui attendu lorsqu'il y a des zéros
shari_2.png
shari_2.png (9.97 Kio) Consulté 439 fois

et préciser si les deux colonnes de droite (D,E) peuvent contenir des valeurs de l'ordre de la dizaine dans les deux colonnes en même temps sur la même ligne ?

Merci

 Ajout : Un dernier point à éclaircir, combien de valeur maximum ta colonne est susceptible de contenir ; j'ai peut-être une autre solution plus souple. 

Re: MFC échelle de couleur depuis autres cellules

MessagePublié: 22 Mai 2020 21:50
par shari
Bonsoir, j'ai rajouté le résultat attendu en cas de 0 dans la colonne E. Il ne peut pas y en avoir dans la colonne D.
On peut parfaitement avoir des nombres a deux chiffres dans la colonne E, et des nombres à 3 chiffres dans la colonne D. Et il est également possible que ces événements arrivent simultanément.

Re: MFC échelle de couleur depuis autres cellules

MessagePublié: 22 Mai 2020 22:44
par OOotremer971
C'est pas le bon fichier

Re: MFC échelle de couleur depuis autres cellules

MessagePublié: 23 Mai 2020 06:40
par shari
Le voici, mais je ne comprends pas poruquoi l'autre n'est pas bon. J'avais gardé le même nom mais ajouté le visuel et modifié légèrement une ou deux choses.

Re: MFC échelle de couleur depuis autres cellules

MessagePublié: 23 Mai 2020 11:15
par OOotremer971
Bonjour,
shari a écrit:mais je ne comprends pas poruquoi l'autre n'est pas bon. J'avais gardé le même nom mais ajouté le visuel et modifié légèrement une ou deux choses

Effectivement, c'est moi qui déconne. J'ai vu le tableau du visuel attendu à moitié vide sans voir que tu avais ajouté une ligne avec zéro et des centaines en colonne D. Désolé.

Cela ne m'a pas empêché d'avancer vers une solution qui respecte les ordres de grandeurs sur des cellule au format texte. J'ai créé une échelle de couleur graduée de 1 à 100 (que tu peux supprimer du fichier car elle ne sert plus à rien) à partir de laquelle j'ai créé une centaine de styles nommés shari_1,2,3 etc (par macro). A partir de là, on concatène les valeurs comme tu le faisais initialement et on applique un style basé sur le rang des valeurs de la colonne A (anciennement C). Je te laisse décortiquer :
Code : Tout sélectionner   AgrandirRéduire
=A1&"("&B1&"--"&C1&")"&T(STYLE("shari_"&ENT(RANG(A1;$A$1:$A$14;1)*(100/MAX(RANG($A$1:$A$14;$A$1:$A$14;1))))))

shari_1.png


Attention : il s'agit d'une formule matricielle. Il faut la valider en maintenant enfoncées les touches Ctrl+Maj lors de l"appui sur le touche Entrée. Pour recopier la formule vers le bas avec la poignée de recopie il faut aussi maintenir la touche Ctrl enfoncée.

A+

 Ajout : Par contre la règle de calcul n'est pas bonne car elle est basée sur le rang des valeurs de la colonne A alors qu'elle devrait tenir compte du pourcentage d'écart entre deux valeurs. Je reviendrai dessus ce week-end. 

Re: MFC échelle de couleur depuis autres cellules

MessagePublié: 23 Mai 2020 12:36
par shari
Je m'incline! Terriblement ingénieux, et hyper efficace!
Un immense merci pour tout le travail, le suivi, la pédagogie et la patience.
J'espère pouvoir adapter tout ça sans trop de difficultés sur mon fichier principal. Après quelques essais infructueux, ça semble fonctionner correctement :roll:
Je craignais pour le "transfert" des styles, car vraiment ce langage macro sur LO est incompréhensible pour moi, mais le déplacement/copiage de la feuill1 résout le souci!
Encore bravo et surtout merci!

Nb: là, je m'arrache les cheveux avec des cellules "protégées" alors que j'ai tout déprotégé, que la feuille n'est plus protégée non plus, c'est à n'y rien comprendre, mais je vais fouiller, et éventuellement ouvrir un nouveau fil si besoin!

Re: MFC échelle de couleur depuis autres cellules

MessagePublié: 24 Mai 2020 00:09
par OOotremer971
Bonjour,

Je crois que j'ai enfin trouvé une logique qui fonctionne avec précision. Ci dessous le formatage obtenu par formatage conditionnel (colonne A) et celui obtenu par formule (colonne B). Je ne parviens pas à voir la différence :
shari_1.png
shari_1.png (13.65 Kio) Consulté 361 fois


Encore une fois je te laisse décortiquer. La formule gère d'une façon les valeurs supérieures ou égales à la moyenne des valeurs de la colonne A puisque c'est elle qui fixe la couleur jaune :
Code : Tout sélectionner   AgrandirRéduire
(100-((MAX($A$1:$A$14)-A1)*(50/(MAX($A$1:$A$14)-MOYENNE($A$1:$A$14))))))

et d'une autre celles qui sont inférieures :
Code : Tout sélectionner   AgrandirRéduire
(1+(A1-MIN($A$1:$A$14))*(50/(MOYENNE($A$1:$A$14)-MIN($A$1:$A$14)))))


les séquences :
Code : Tout sélectionner   AgrandirRéduire
(A1>=MOYENNE($A$1:$A$14))*

et
Code : Tout sélectionner   AgrandirRéduire
(A1<MOYENNE($A$1:$A$14))*

renvoient une valeur booléenne 1 ou 0 qui évite l'imbrication de SI() pour traiter de part et d'autre de la moyenne.
Code : Tout sélectionner   AgrandirRéduire
=A1&"("&B1&"--"&C1&")"&T(STYLE("shari_"&ARRONDI((A1>=MOYENNE($A$1:$A$14))*(100-((MAX($A$1:$A$14)-A1)*(50/(MAX($A$1:$A$14)-MOYENNE($A$1:$A$14))))))+ARRONDI((A1<MOYENNE($A$1:$A$14))*(1+(A1-MIN($A$1:$A$14))*(50/(MOYENNE($A$1:$A$14)-MIN($A$1:$A$14)))))))

shari_2.png


A+

Re: MFC échelle de couleur depuis autres cellules

MessagePublié: 24 Mai 2020 06:50
par shari
Tu m'as fait épuisé mon stock de superlatifs!
Bon, effectivement, en comparant les styles obtenus par l'une ou l'autre des deux formules, on constate que la toute dernière mouture "colle" plus à l'échelle MFC et surtout qu'elle est plus équilibrée, notamment dans sa gestion des valeurs identiques.
Je suis donc plus que satisfait du résultat obtenu et peux classer en "Résolu" ce sujet.

Encore une fois, un immense merci pour la qualité du travail et bravo pour les trésors d'ingéniosité déployés!