Mise en forme conditionnelle très particulière

Résolu/Fermé
Cannonride - Modifié par Cannonride le 20/04/2015 à 18:48
 Cannonride - 20 avril 2015 à 22:32
Bonjour,

Dans le cadre de mon travail, je dois standardiser des RAL (couleurs "normalisées") utilisées dans l'entreprise.

Pour se faire, je dois créer un fichier Excel avec la couleur de tous les RAL et trouver une manière de les standardiser.

Ayant libre choix, j'ai choisis de les référencer en fonction des valeurs décimales provenant d'un octet binaire. (le ^ signifie que le nombre d'après est un exposant : type 2²)

2^0
2^1
2^2
2^3
2^4
2^5
2^6
2^7

Les valeurs décimales vont donc de 0 à 255

Par exemple le RAL 1000 qui est un beige vert, a pour taux de couleurs primaire
190 en rouge (cellule D3)
189 en vert (cellule F3)
127 en bleue (cellule G3)

sur la ligne 3, il y a en B3 le nom du RAL, E3 une "fonction gauche" masquée, en H3, le code hexadécimal du RAL masqué lui aussi. et de J3 à L3 c'est les noms du RAL 1000 dans différentes langues.

Toutes les lignes ont les informations pour un sel RAL

Ce que je veux :
Trouver une mise en forme conditionnelle ou autre fonction qui pourrai me permettre de colorer la ligne complète (3, 4, 5, 6, etc...) en fonction des valeurs définies dans D3, 4, 5, 6, etc.. F3, 4, 5, 6, etc... et G3, 4, 5, 6, etc...

C'est à dire que l'on peut paramétrer manuellement les couleurs dans Excel en indiquant les taux de RGB (Red Green Blue) pour créer une couleur.

Je souhaite que la mise en forme colore le fond de ma ligne en prenant les valeurs dans ces 3 cellules. Et vu que chaque ligne a des valeurs différentes dans ces 3 cellules, le RAL change automatiquement.

Mais je ne sais pas comment régler automatiquement la mise en forme pour qu'elle se colore en fonction du contenu de cellules.

Seriez vous disposés à m'aider ?

Bien cordialement.

Antoine RM

Microsoft Office 2010
Lien pour accéder au fichier https://www.cjoint.com/c/EDutbK1XhEz


2 réponses

Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 778
20 avril 2015 à 18:44
Bonjour,

Cela ne peut se faire que par macro VBA, et dans ce cas la mise en forme conditionnelle n'est pas utile, il suffit de colorer directement la ligne.

Mets ton fichier sur https://www.cjoint.com/
et reviens poster le lien
2
Cannonride Messages postés 5 Date d'inscription lundi 20 avril 2015 Statut Membre Dernière intervention 23 octobre 2017
20 avril 2015 à 18:49
Patrice,

Je viens de le faire, j'ai modifié mon premier message avec le lien en bas de page.
J'ai coloré manuellement les 2 premières lignes pour donner l'exemple.
0
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 778
20 avril 2015 à 19:28
Bonjour,

Vu qu'il s'agit de colorer une seule fois les cellules, il n'est utile de créer un fichier avec macro (xlsm).
Copies la macro ci-dessous dans le module de feuille (clic droit sur l'onglet / visualiser le code) exécutes-la, puis effaces-la et enregistre en xlsx

Option Explicit
Sub couleur()
Dim p As Range  'plage
Dim c As Range  'cellule
Dim r As Byte   'rouge
Dim v As Byte   'vert
Dim b As Byte   'bleu

  Set p = Worksheets("Feuil1").Range("D3:D215")
  For Each c In p.Cells
    r = Val(c.Value)
    v = Val(c.Offset(0, 2).Value)
    b = Val(c.Offset(0, 3).Value)
    c.Offset(0, -2).Resize(1, 14).Interior.Color = RGB(r, v, b)
  Next c

End Sub

1
C'est tout simplement Gé-NIAL !!
Merci, vraiment, merci beaucoup Patrice !! :)

Je vais analyser la maccro, ça m'intéresse le VBA.

Je vois que tu déclare tes variables au début.
Ensuite tu paramètre la plage, puis les celulles.
"v = Val(c.Offset(0, 2).Value)"
"b = Val(c.Offset(0, 3).Value)"
Les offset c'est pour décaler de 2 et 3 colonnes ?
Le début de la dernière ligne est flou pour moi par contre.
C'est tip top ! Tu m'as fait gagné un temps fou !
0
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 778
20 avril 2015 à 20:40
Quelques explications :
-
For Each c In p.Cells
= pour chaque cellule de la plage p (c-à-d. D3:D215)
-
c.Offset(0, 2).Value
donne la valeur de la cellule située en décalant c de 0 lignes et 2 colonnes.
Rappel : cette valeur est une chaine.
- la fonction Val() permet de convertir cette valeur en nombre.
Pour la ligne :
-
c.Offset(0, -2).Resize(1, 14).Interior.Color = RGB(r, v, b)

Avec
= RGB(r, v, b)
on défini la value RVB
de la couleur de fond
.interior.color

de la plage comprenant 1 ligne et 14 colonnes
.Resize(1, 14)
qui
commence dans la cellule située à 2 colonnes à gauche
.Offset(0, -2)
de la cellule en D

Si tu te lances dans le VBA un excellent cours ici :
https://bidou.developpez.com/article/VBA/

Cordialement
Patrice
0
Cannonride > Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023
20 avril 2015 à 22:32
Super, je vais m'instruire.
Explication très claire. Tu as parfaitement répondu à mes questions. Et plus encore.
Merci Beaucoup Patrice !
Bien cordialement.
0