Formule identifiant la couleur d'une cellule et renvoyant une valeur

Bonjour à tous,

Je cherche une formule permettant d'identifier la couleur d'une cellule.

L'idée est de retourner l'information "KO" pour toute cellule grisée en "Sheet 1" du fichier ci-joint, et l'information "OK" pour toute cellule blanche en "Sheet 1" du fichier ci-joint.

Exemple :

  • Ma cellule C3 en "Sheet 1" est grisée, alors ma cellule C3 en "Sheet 2" affiche résultat "KO".
  • Ma cellule C4 en "Sheet 1" est blanche, alors ma cellule C3 en "Sheet 2" affiche le résultat "OK"

S'il n'existe pas de formule, quel doit être le code VBA ?

Merci d'avance pour vos réponses

111fichier-test.xlsx (10.93 Ko)

Bonjour,

Il n'existe pas de fonction permettant de tester une couleur ... on peut donc en créer une. Voir le fichier joint.

Pourquoi ai-je le sentiment que la demande va être un soupçon plus compliquée que ce qui est posé ?

Merci pour ta réponse. Cela semble fonctionner.

J'ai seulement 3 points à clarifier :

1. Comment as tu fais pour créer une formule en VBA ? Je débute en macro et je n'ai jamais fais de formule. Je ne parviens pas à voir le code nécessaire dans le module pour faire apparaitre ta formule.

2. J'ai vu que ta formule prend seulement en compte la couleure grise. Comment est-ce que je peux ajouter une autre couleur ?

3. Mon 3eme point est lié au 2eme. Est-il possible de faire couleur vs blanc/No fill.

En effet, j'ai vu que pour une cellule blanche ou sans remplissage le message "OK" apparaît. Est-il possible de faire apparaître le message "KO" si la case est colorée ?

Merci d'avance

Bonsoir,

Je me disais aussi que ça avait l'air trop simple

Une fonction personnalisée se trouvera toujours dans un module standard. Si le classeur est ouvert, appuie sur Alt+F11. Dans l'explorateur de projet (à gauche) tu devrais voir un "Module1" ... c'est là que tu trouveras le code.

Si ce que tu veux vérifier, c'est que les cellules sont colorées, quelle que soit la couleur (y compris blanc) tu peux tester cette adaptation au code:

Function testCoul(cellule As Range)
Application.Volatile
testCoul = "OK"
If cellule.Interior.ColorIndex <> xlNone Then testCoul = "KO"
End Function

Attention: le fait de modifier une couleur ne déclenche pas un événement qui peut être intercepté par programmation. Il faudra, après avoir modifié une ou plusieurs couleurs de remplissage, appuyer sur la touche F9

Bonjour,

Merci pour ta réponse. Ton deuxième code fonctionne bien.

Seulement je souhaite que le test couleur renvoit :

  • le message "OK" lorsque la cellule est blanche ou sans remplissage
  • le message "KO" lorsque la cellule est colorée (excepté la couleur blanche)

J'ai donc essayé d'adapter ton premier code comme suit :

Function testCoul(cellule As Range) testCoul = "KO" If cellule.Interior.Color = RGB(255, 255, 255) Then testCoul = "OK" If Cell.Interior.ColorIndex = xlNone Then testCoul = "OK" End Function

Le code RGB (255, 255, 255) correspond à la couleur blanche et le color index = xlNone correspond à une cellule sans remplissage.

Cependant, la formule "testcoul" me renvoit une erreur #VALUE!

Est-ce que tu sais d'où vient l'erreur ?

Et peut être qu'il y a une manière plus simple de résoudre mon problème.

Encore merci d'avance

Petite rectification,

J'ai trouvé le code qui semble de fonctionner pour ce que je souhaite faire, à savoir :

  • "OK" lorsque la cellule est blanche ou sans remplissage
  • "KO" si la cellule est colorée (sauf si la cellule est blanche)

Function testCoul(cellule As Range) testCoul = "KO" If cellule.Interior.Color = RGB(255, 255, 255) Then testCoul = "OK" End Function

Maintenant mon problème est sur la mise à jour automatique de la formule lorsqu'il y a une modification de la couleur qui je pense fait appel à la fameuse touche F9.

En revanche rien ne se passe lorsque j'appuie sur la touche et je suis obligé de mettre à jour cellule par cellule.

J'ai également essayer dans l'onglet data => Refresh all mais rien ne se passe.

Du coup comment est-ce que tu procèdes pour mettre à jour l'ensemble des formules ?

  • via la touche F9 ?
  • Ou peut être via une macro ?

Bonjour,

À tester:

Function testCoul(cellule As Range)
Application.Volatile
testCoul = "KO"
If cellule.Interior.ColorIndex = 2 Or cellule.Interior.ColorIndex = xlNone Then testCoul = "OK"
End Function

C'est Application.volatile qui fait que la fonction se recalcule (notamment lors de l'appui sur F9)

Dans ton dernier bout de code, tu ne testes que le blanc !?

PS: utilise les balises code pour insérer du code dans un message: bouton </>

Bonjour,

Sinon si tu préfères avoir la main sur la couleur :

Function CouleurRemplissage(cellule As Range)
Application.Volatile 'recalcule la fonction automatiquement
If cellule.Cells.Count > 1 Then 'si on a plus d'une cellule
    CouleurRemplissage = CVErr(xlErrValue) 'on renvoie une erreur
Else
    CouleurRemplissage = cellule.Interior.Color 'on renvoie la couleur de remplissage
End If
End Function

Cette fonction te renvoie la valeur de la couleur que tu peux ensuite tester, tu peux du coup faire des tests du genre: SI(CouleurRemplissage(C5) = CouleurRemplissage(C6),"ok","ko"

Bonjour

Et un multipost de plus, un...

Et comme déjà dit ailleurs : quel est l'intérêt de colorer la cellule puis d'y mettre une fonction alors qu'on peut faire l'inverse, saisir une valeur et mettre en couleur par MFC, sans VBA, et surtout sans Volatile qui fait ramer Excel... inutilement puisque si pas de calcul (cas du simple changement de couleur) cela ne se met pas à jour tout seul...

Rechercher des sujets similaires à "formule identifiant couleur renvoyant valeur"