Couleur de cellules
Bonsoir,
je reviens vers vous pour une autre requête.
je souhaiterais qu'a chaque entrée dans un tableau, que pour un même mot les lignes soient de la meme couleur. et que pour chaque mot different, la couleur change automatiquement. Vous allez me dire de le faire avec une mise en forme conditionnelle, mais est ce possible sans connaitre les mots à l'avance?
Merci par avance.
Cordialement.
mbbp a écrit :Bonsoir le forum,
Une règle par mot :
et si le mot n'est pas connu? je me demande si c'est possible de le faire automatiquement, comme un scan des mots dans la colonne par exemple
Bonsoir,
comme ça vite fait :
un code VBA qui "calcul" le mot, ce qui donne une valeur, à cette valeur égal une couleur.
Il est vrai que même valeur = même couleur.
L'avantage : pas besoin de connaître le mot, c'est la valeur que représente ce mot qui est utilisé pour choisir la couleur.
@ bientôt
LouReeD
LouReeD a écrit :Bonsoir,
comme ça vite fait :
un code VBA qui "calcul" le mot, ce qui donne une valeur, à cette valeur égal une couleur.
Il est vrai que même valeur = même couleur.
L'avantage : pas besoin de connaître le mot, c'est la valeur que représente ce mot qui est utilisé pour choisir la couleur.
@ bientôt
LouReeD
oui c'est dans ce style que j'aimerais mais le vba, comment dire, c'est pas ma tasse de thé
Mais la demande est une MFC pour toute la ligne.
Une autre proposition : la couleur de la ligne change avec un mot différent du précédent.
Deux couleurs utilisées.
mbbp a écrit :Mais la demande est une MFC pour toute la ligne.
Une autre proposition : la couleur de la ligne change avec un mot différent du précédent.
Deux couleurs utilisées.
je viens de tester ton fichier, mais en rajoutant par exemple "frite", rien ne se passe....
Toutes les cellules du tableau reçoivent un fond bleu.
Cela permet de n'avoir à définir q'une seule règle (ici : fond vert)
En F6:F30 il y a une formule de calcul : il faut la tirer vers le bas.
mbbp a écrit :Toutes les cellules du tableau reçoivent un fond bleu.
Cela permet de n'avoir à définir q'une seule règle (ici : fond vert)
En F6:F30 il y a une formule de calcul : il faut la tirer vers le bas.
ok, j'avais pas vu la colonne f, mais j'ai un soucis (encore, pour un meme mot, la couleur peut etre different dans votre exemple
elsabio1977 a écrit :ok, j'avais pas vu la colonne f, mais j'ai un soucis (encore, pour un meme mot, la couleur peut etre different dans votre exemple
Oui, ce qui est mis en exergue : c'est le changement de mot.
mbbp a écrit :elsabio1977 a écrit :ok, j'avais pas vu la colonne f, mais j'ai un soucis (encore, pour un meme mot, la couleur peut etre different dans votre exemple
Oui, ce qui est mis en exergue : c'est le changement de mot.
c'est gentil certes, mais comme dis dans le post de départ, je souhaiterais que pour un meme mot, la couleur soit identique, et differente avec des mots differents
elsabio1977 a écrit :je souhaiterais que pour un meme mot, la couleur soit identique, et differente avec des mots differents
Sans VBA cela me semble difficile à réaliser.
mbbp a écrit :elsabio1977 a écrit :je souhaiterais que pour un meme mot, la couleur soit identique, et differente avec des mots differents
Sans VBA cela me semble difficile à réaliser.
malheureusement je n'y connais pas grand chose en vba
Voilà un petit fichier :
reste à "trouver" une formule afin d'avoir une palette de couleur qui soit correcte.
Pour ce qui marche :
un même mot avec la même casse = la même couleur.
Pour ce qui ne va pas :
la palette de couleur par formule.
Le principe : chaque lettre du mot est "transformée" en valeur numérique ASCII puis est multiplié par 100 et sa position dans le mot.
La somme de tout ceci nous donne la valeur de la couleur du mot.
La colonne surveillée pour les mots est la colonne A de la feuille "Test"
La mise en couleur va de la colonne B à la colonne H.
Mais il reste pas la formule à mettre au point
@ bientôt
LouReeD
Pour remplacer la formule de la couleur, on peut imaginer un tirage aléatoire de la valeur de la couleur.
Comme on a le choix entre plus d'1 million de couleur depuis Excel 2007...
Le tout devra être mis en mémoire dans une feuille et un tableau VBA afin d'attribuer une nouvelle couleur par tirage au sort pour un nouveau mot.
Si le mot existe dans le tableau alors on prend la couleur correspondante.
Mais là c'est une autre histoire...
@ bientôt
LouReeD
Bonsoir,
Bonsoir,
je reviens vers vous pour une autre requête.
je souhaiterais qu'a chaque entrée dans un tableau, que pour un même mot les lignes soient de la meme couleur. et que pour chaque mot different, la couleur change automatiquement. Vous allez me dire de le faire avec une mise en forme conditionnelle, mais est ce possible sans connaitre les mots à l'avance?
En fait la demande n'est pas une MFC, il suggère qu'on lui propose une MFC, hors sans connaître le nombre de mot et les mots la MFC n'est pas possible. Seul VBA peut le faire, et VBA "fera" la MFC.
@ bientôt
LouReeD
Bonjour à tous et Alfonso !!
Je reprenais l'idée de LouReed (
J'ai suivi une voie plus simple loin des ThemeColor, Pattern et autre TintAndShade... sachant que les couleurs disponibles peuvent toutes être définies par une valeur RGB... (discussion à revoir plus tard).
Contrairement à mes habitudes, j'ai utilisé ColorIndex (dont je professe habituellement qu'il faut l'abandonner au profit de Color en définissant une valeur RGB) car la définition d'une succession de couleur a utiliser en nombre suffisant nécessite une étude sur un algorithme de variation permettant de coder les couleurs utilisées à partir d'un index de 1 à x... ce qui prend du temps. Mais qui devrait pouvoir être fait ultérieurement.
Le système que je propose repose sur :
1) Une plage nommée (Plage) délimitant la plage affectée par la coloration des lignes, en l'occurrence ici je l'ai définie par : B1:E40.
2) Le mot commandant la coloration se trouve se trouve en première colonne de Plage.
3) Une évènementielle Change (de même que LouReed) qui réagit aux changements affectant cette première colonne de Plage.
Lors d'un changement la procédure recompose l'ensemble des couleurs sur la plage. L'utilisation d'un dico dont la clé est le mot en première colonne et la valeur un index incrémenté pour définir la couleur. En l'absence de mot, la ligne n'est pas colorée ou est décolorée.
Private Sub Worksheet_Change(ByVal Target As Range)
Dim d As Object, i%, c%
If Not Intersect(Target, [Plage].Columns(1)) Is Nothing Then
Set d = CreateObject("Scripting.Dictionary")
c = 2
With [Plage]
For i = 1 To .Rows.Count
If .Cells(i, 1) <> "" Then
If d.exists(.Cells(i, 1).Value) Then
.Rows(i).Interior.ColorIndex = d(.Cells(i, 1).Value)
Else
c = c + 1: d(.Cells(i, 1).Value) = c
.Rows(i).Interior.ColorIndex = c
End If
Else
.Rows(i).Interior.ColorIndex = xlColorIndexNone
End If
Next i
End With
End If
End SubIci j'ai utilisé l'index affecté comme valeur de ColorIndex, à partir de 3 (pour éliminer le blanc et le noir), mais je pense qu'il convient de se servir de cet index pour définir une valeur de couleur dans l'espace RGB, car ColorIndex demeure trop limité et on atteindra vite des couleurs trop sombres...
Cordialement.
Bonjour MFerrand !
C'est exactement qu'est ce que je voulais faire....
Après l'idée d'un rnd sur 16 000 000 couleur, j'étais partis sur 3 rnd sur 256 valeurs afin de créer des valeurs RGB...
Bref votre code professionnel avec un dico pour être certain qu'il n'y est pas de doublon de couleur... Enfin si j'ai bien compris....
Il m'en reste des choses à apprendre !
@ bientôt
LouReeD
Salut LouReed,
Pas de complexe d'infériorité !
Pas le temps de poursuivre dans l'immédiat (quelques contraintes...)
J'ai étalonné une feuille avec 756 couleurs, en vue d'ensuite réduire à un éventail plus limité. Résultat pas encore satisfaisant pour faire un choix... mais là on est dans un domaine esthétique et la perception des couleurs est aussi en partie subjective...
A+
MFerrand a écrit :Bonjour à tous et Alfonso !!
Je reprenais l'idée de LouReed (
) avant d'avoir vu la façon dont il l'avait mise en pratique... J'ai suivi une voie plus simple loin des ThemeColor, Pattern et autre TintAndShade... sachant que les couleurs disponibles peuvent toutes être définies par une valeur RGB... (discussion à revoir plus tard).
Contrairement à mes habitudes, j'ai utilisé ColorIndex (dont je professe habituellement qu'il faut l'abandonner au profit de Color en définissant une valeur RGB) car la définition d'une succession de couleur a utiliser en nombre suffisant nécessite une étude sur un algorithme de variation permettant de coder les couleurs utilisées à partir d'un index de 1 à x... ce qui prend du temps. Mais qui devrait pouvoir être fait ultérieurement.
Le système que je propose repose sur :
1) Une plage nommée (Plage) délimitant la plage affectée par la coloration des lignes, en l'occurrence ici je l'ai définie par : B1:E40.
2) Le mot commandant la coloration se trouve se trouve en première colonne de Plage.
3) Une évènementielle Change (de même que LouReed) qui réagit aux changements affectant cette première colonne de Plage.
Lors d'un changement la procédure recompose l'ensemble des couleurs sur la plage. L'utilisation d'un dico dont la clé est le mot en première colonne et la valeur un index incrémenté pour définir la couleur. En l'absence de mot, la ligne n'est pas colorée ou est décolorée.
Private Sub Worksheet_Change(ByVal Target As Range) Dim d As Object, i%, c% If Not Intersect(Target, [Plage].Columns(1)) Is Nothing Then Set d = CreateObject("Scripting.Dictionary") c = 2 With [Plage] For i = 1 To .Rows.Count If .Cells(i, 1) <> "" Then If d.exists(.Cells(i, 1).Value) Then .Rows(i).Interior.ColorIndex = d(.Cells(i, 1).Value) Else c = c + 1: d(.Cells(i, 1).Value) = c .Rows(i).Interior.ColorIndex = c End If Else .Rows(i).Interior.ColorIndex = xlColorIndexNone End If Next i End With End If End SubIci j'ai utilisé l'index affecté comme valeur de ColorIndex, à partir de 3 (pour éliminer le blanc et le noir), mais je pense qu'il convient de se servir de cet index pour définir une valeur de couleur dans l'espace RGB, car ColorIndex demeure trop limité et on atteindra vite des couleurs trop sombres...
Cordialement.
Merci MFerrand, c'est exactement ce que je souhaitais
Il faut vraiment que je prenne des cours de vba pour me faciliter la vie et éviter d'embeter les autres..........
Je remercie tout ceux qui ont essayé de m'aider malgré mes explications un peu tordues parfois
MFerrand, le forum bonsoir,
en fait je comprend mieux le fonctionnement :
la première couleur est la rouge, si sur le fichier on ajoute un mot au dessus de la liste, c'est ce mot qui passe rouge, et la suite des couleurs est "décalée" vers le haut, par contre à chaque mot identique, on trouve la même couleur.
Mon idée, était d'avoir un tableau "mot-couleur" afin que quelque soit l'endroit où le mot se trouve, il reste avec sa couleur d'origine.
Si fritte est écrit et que la macro lui attribue le bleu, alors le bleu serait pour frite et seulement frite sans passer au vert si un nouveau est entré au dessus ou à droite ou ailleurs...
Je continue donc de travailler dans la direction de mon idée
@ bientôt
LouReeD
