Colorier une case à partir de données RGB

Bonjour,

J'ai vu que quelcun a créé la fonction NO_COULEUR_RGB qui permet d'extraire le code couleur RGB d'une case coloriée.

Existe-t-il une fonction inverse ? Qui permette de colorier une case à partir d'un code RGB donné par des résultas recueillis !!!

Je voudrais créer un petit tableau excel me permettant de simuler une couleur à partir de 3 nombres saisis dans 3 cases, correspondants au code RGB.

Exemple ci-joint

59couleur-rgb.xlsx (9.58 Ko)

Cordialement,

Si vous voulez mettre la couleur RVB dans le rectangle, rien n'est plus simple si les valeurs sont comprises entre 0 et 255.

89couleur-rgb.xlsm (14.62 Ko)

Si vous voulez traiter des nombre supérieurs à 255, il va falloir les ramener à la plage 0-255.

37couleur-rgb2.xlsm (15.70 Ko)

10-452-1125 vont donner 2-102-255.

Arf... Microsoft bloque l'exécution des macros car elles ne sont pas approuvées...

Je ne peux pas tester tes innovations...

Comment on débloque ça ?

Existe-t-il une solution par formules plutôt que Macro ? Car ce sera difficilement exportable sinon

Bonjour,

Arf... Microsoft bloque l'exécution des macros car elles ne sont pas approuvées...

Comment on débloque ça ?

https://www.excel-pratique.com/fr/astuces_vba/debloquer-les-macros

la macro fonctionne bien.

Maintenant est-il possible de l'obtenir sous forme de formule ?

De type =COLORCELL.RGB(R ; G ; B) et la case se colore avec les données entrées ?

Cordialement

... ou plutôt du type :

=COLORCELL.RGB( R ; G ; B ; "contenu de la cellule")

Le "contenu de la cellule" étant ce qui devait se trouver dans cette cellule initialement, outre sa coloration (une formule, un résultat, un texte, etc...)

Bonsoir Blublu7by7, Le Fil,

Passer plutôt par un code évènementiel pour ta récente demande.

Les lignes ci-dessous sont à placer dans la partie code d'une feuille. Faire clic droit sur le nom de la feuille puis choisir code dans la fenêtre qui s'ouvre.

Private Sub Worksheet_Change(ByVal Target As Range)
On Error GoTo ErrStr
'Note: changer ww (bien que + rapide) par rgb si préférence (mais remplacer ,2 par ,3). Le séparateur ; peut être aussi différent (exemple par /)
If Left(Target.Text, 2) = "ww" Then
Application.EnableEvents = False
TS = Split(Target, ";")
Target.Interior.Color = RGB(TS(1), TS(2), TS(3))
Target = TS(4)
End If
ErrStr:
Application.EnableEvents = True
End Sub

Sur n'importe quelque cellule par exemple inscrire ww;100;200;150;Test

Afin de ressortir cela

image

Merci pour la solution, mais je ne sais pas utiliser les VBA... Il se trouve que je n'ai jamais apprit.

Je ne comprends donc pas le truc "evenementiel", ni comment l'imbriquer dans mon tableau, ni comment l'utilser d'ailleurs... Et je me demande aussi si la saisie d'une telle case pourra intéragir avec le reste du formulaire (en rapport au résultat contenu dans la cellule par exemple).

Je sais que certaines fonctions inexistantes dans EXCEL ont été créées avec le VBA mais j'ignore comment on fais et le language de saisie qui s'y rapporte.

Je sais juste que j'en ai testé quelques unes qui fonctionnaient comme des formules EXCEL courantes, en le appelant avec =NOMFORMULE(pim;poum;pam)

Et a force de bidouiller j'ai apprit à les récuperer et les ramener dans mes formulaires (commande importer / exporter).

Mais mes compétences en VBA s'arrêtent là

Peux-tu m'éclairer un peu plus sur la manière d'inclure cette programmation dans mon formulaire et l'exploiter ?

Merci d'avance

Bonjour, pour trois nombres donc trois couleurs autant utiliser l'option de "Mise en forme conditionnelle" fournit par excel.

Comment ?

Je ne vois pas comment colorier une case d'une couleur composée de données RGB contenues dans 3 autres cases à l'aide des Mises en forme conditionnelles.

Peux-tu m'expliquer ta solution ?

Cordialement

Bonjour Blublu7by7, Le Fil,

En retour le fichier pour que tu puisses tester. Il suffit d'écrire tel qu'indiqué, sans signe =.

36coloremots.xlsm (15.57 Ko)

Note: Ne pas oublier de débloquer le fichier par le biais des propriétés afin d'accepter les macros.

mmmmh... Alors... Ca fonctionne... Mais... Ca ne me permet pas de faire ce que je veux faire.

Je m'explique :

Enfait je veux créer un testeur dans mon formulaire qui vas afficher la couleur obtenue en saisissant manuellement les 3 couleurs RGB dans 3 cases distinctes.

Pourquoi ? Car j'ai une correspondance à effectuer séparément sur chaque donnée RGB (transformées en un numéros compris entre 0.0000000000 et 1.0000000000) + encore un autre traitement qui aboutis à un contenu dans la cellule "test" elle-même (une donnée numérique ou valeur texte à afficher)

Enfait les données RGB doivent rester des données séparées et accessibles séparément

J'ai pensé que colorier le fond de la case serait un bon moyen de visualiser tout de suite le résultat de la couleur assez simplement

J'ai besoin que la case "test" se colorie de manière dynamique, de cette manière, quand je modifie l'une des données RBG, ma case se recolore instantanément avec la bonne couleur et je vois si j'ai le bon résultat ou si je m'approche.

Or, lorsque je fait la saisie selon ta méthode, avec la macro évènementielle directement dans la case, je perds les données RGB dont j'ai besoin.

La case prends bien la couleur souhaitée mais, si je dois remodifier une seule donnée, ça ne fonctionne plus

Voila pourquoi je cherche une solution imitant une formule de tableau excel du type =COLORCELL.RGB( R ; G ; B ; "contenu de la cellule")

Avec quelques sécurités basiques comme par exemple, toute donnée non numérique serait interprétée comme un 0, toute donnée <0 serait ramenée à 0, toute donnée >255 serait ramenée à 255, etc... Ca pourrais devenir une formule simple à utiliser partout.

L'avantage énorme d'une telle formule (si elle existait) c'est qu'elle pourrait prendre en compte, à la fois des valeurs contenues dans d'autres cases, et à la fois des valeurs écrites manuellement dedans (à l'instar de ta méthode évènementielle)... Le top quoi !!! Le beurre et l'argent du beurre !!!

Avec une telle formule je pourrait visualiser la couleur obtenue dans le fond de ma case tout en exploitant mes données RGB séparément

C'est dommage que cette formule n'existe pas nativement dans Excel d'ailleurs, elle me parait tellement basique pour du travail d'affichage... Pourquoi personne n'y a encore jamais pensé chez Microsoft?

Je l'aurais bien vue imbriquée dans la formule =TEXTE() d'ailleurs.

Bref, merci pour tes efforts en tout cas, et si tu connais une solution qui puisse aller dans le sens de ce que je veux réaliser, je reste à ton écoute.

Pour le moment le premier fichier excel qui m'a été proposé par OptimiX est le plus approchant de ce que je cherche à faire, juste il est figé aux cases indiquées et mes connaissances en VBA sont trop limitées pour arriver à l'adapter à mon vrai formulaire

Cordialement,

Bonjour,

Existe-t-il une fonction inverse ? Qui permette de colorier une case à partir d'un code RGB donné par des résultas recueillis !!!

Peut-être de cette façon!! avec un code vba

24couleur-rgb1.xlsm (14.61 Ko)

Slts

Oui ta solution marche boss_68, elle est très similaire à celle de OptimusX qui a posté au tout début.

Ca fonctionne très bien, sauf que...

Comme j'ai dit auparavant, je ne m'y connais pas en VBA, je ne sais donc pas comment adapter cette VBA à mon vrai formulaire.

Pour le moment les solutions que vous me fournissez sont limitées aux cases A1 - B3 de ma feuille d'exemple et je ne sais pas comment transformer la VBA en ce que je souhaite car je ne m'y connais pas en programmation de VBA

Je cherchait une solution plus proche d'une formule excel exploitable partout dans mon formulaire définitif, du genre :

=COLORCELL.RGB.INTERIOR( R ; G ; B ; "contenu de la cellule")

Avec quelques sécurités basiques comme par exemple, toute donnée non numérique serait interprétée comme un 0, toute donnée <0 serait ramenée à 0, toute donnée >255 serait ramenée à 255, etc... Ca pourrais devenir une formule simple à utiliser partout.

En tout cas, sur ma feuille exemple, ce que vous me fournissez marche très bien.

Bonsoir Blublu7by7, Le Fil,

Je cherchait une solution plus proche d'une formule excel exploitable partout dans mon formulaire définitif, du genre :

=COLORCELL.RGB.INTERIOR( R ; G ; B ; "contenu de la cellule")

J'ai modifié le principe du fichier présenté fin juillet en l'adaptant à ta dernière demande. Donc en gardant la forme de fonction réutilisable.

Note: Ne pas oublier de débloquer le fichier par le biais des propriétés afin d'accepter les macros

46functioncolor.xlsm (17.78 Ko)

Ah hé bien là !!!!

Franchement chapeau, c'est EXACTEMENT ce que je voulais !!!

J'en reviens pas que la VBA soit si courte en plus... Il faudra vraiment que j'apprenne à créer des VBA c'est tellement puissant.

Bravo en tout cas, c'est très efficace et puissant ce que tu a créé, je vais m'en servir.

Encore merci pour ton temps.

Une toute dernière question, si dans le code de ta VBA je change la syntaxe du xyz en COLOR_RGB, juste comme ça dans l'écriture, sans changer rien d'autre, ça fonctionnera quand même avec ma syntaxe ? Ou un des paramètres est lié à cette syntaxe et si je change ca vas merder ?

Cordialement,

Heuuuuu... parcontre je n'arrive pas a l'exporter ta VBA.

Ni a l'intégrer à mon formulaire du coup...

Ah ben non finalement, il y a une erreur quelque part.

Quand on donne 3 références issues de 3 cellules différentes la couleur est erronée

Apparemment ça concerne qu'une seule des 3 références

En plus quand on change une des références la formule ne se réactualise pas, il faut cliquer dans la cellule et faire ENTREE, je ne sais pas si elle peut se mettre à jour seule de manière dynamique

Ci-joint ton fichier avec l'exemple du blanc qui sort jaune

Bonjour Blublu7by7, Le Fil,

il y a une erreur quelque part.

En effet sur la version transmise il y a une ligne (copiée) que j'ai oubliée de corriger. C'est pour cela que la valeur du milieu, G (Green) est incorrecte.

Je poste les 3 lignes de code concernées, inscrites dans la partie Feuille du fichier du 12 août.

'Traitement selon valeur directe ou indirecte par référence à d'autres cellules
If Asc(Rv) < 65 Then R = CInt(Rv) Else R = Range(Rv)
If Asc(Gv) < 65 Then G = CInt(Gv) Else G = Range(Gv) ' Modifier cette ligne car il était inscris B en version antérieure au lieu de G
If Asc(Bv) < 65 Then B = CInt(Bv) Else B = Range(Bv)

Donc modifier la ligne valorisant la couleur verte en remplaçant le B par G.

Suite,

En plus quand on change une des références la formule ne se réactualise pas, il faut cliquer dans la cellule et faire ENTREE, je ne sais pas si elle peut se mettre à jour seule de manière dynamique

Une fonction s'actualise à partir du moment où on y fait appel en modifiant l'un de ses paramètres, c'est logique.

Maintenant il est aussi possible de rajouter du code VBA pour que l'ensemble soit recalculé si des références indirectes sont modifiés.

Mais attention cela ralentira la feuille de calcul s'il existe trop de fonctions.

Rechercher des sujets similaires à "colorier case partir donnees rgb"