web-dev-qa-db-fra.com

Utiliser la couleur de la cellule comme condition dans l'instruction if (fonction)

J'essaye de faire en sorte qu'une cellule remplisse une fonction basée sur la couleur très claire d'une cellule.

Voici la fonction que j'ai actuellement:

=IF(A6.Interior.ColorIndex=6,IF(ROUNDDOWN(IF(M6<3,0,IF(M6<5,1,IF(M6<10,3,(M6/5)+2))),0)=0,0,ROUNDDOWN(IF(M6<3,0,IF(M6<5,1,IF(M6<10,2,(M6/5)+2))),0)),IF(ROUNDDOWN(IF(M6<7,0,IF(M6<10,1,M6/5)),0)=0,0,ROUNDDOWN(IF(M6<7,0,IF(M6<10,1,M6/5)),0)))

Pour que vous n'ayez pas à lire tout cela, voici un exemple plus simple.

=IF(A6.Interior.ColorIndex=6,"True","False")

Tout ce qui lui revient est #NAME? . Est-il possible de faire cela comme une fonction dans une cellule ou est-ce que VBA est absolument nécessaire?

Merci,

Jordan

11
1337Atreyu

Vous ne pouvez pas utiliser VBA (Interior.ColorIndex) dans une formule, raison pour laquelle vous recevez l'erreur.

Il n'est pas possible de faire cela sans VBA.

Function YellowIt(rng As Range) As Boolean
    If rng.Interior.ColorIndex = 6 Then
        YellowIt = True
    Else
        YellowIt = False
    End If
End Function

Cependant, je ne le recommande pas: ce n'est pas la façon dont les fonctions VBA définies par l'utilisateur (UDF) sont destinées à être utilisées. Ils doivent refléter le comportement des fonctions Excel, qui ne peuvent pas lire le formatage des couleurs d'une cellule. (Cette fonction pourrait ne pas fonctionner dans une version ultérieure d'Excel.)

Il vaut bien mieux que vous fondiez une formule sur la condition originale (décision) qui rend la cellule jaune en premier lieu. Vous pouvez également exécuter une procédure Sub pour renseigner les valeurs True ou False (bien que ces valeurs ne soient bien entendu plus liées au formatage de la cellule d'origine).

6
Andy G

Je ne crois pas qu'il y ait un moyen d'obtenir la couleur d'une cellule à partir d'une formule. Le plus proche que vous puissiez obtenir est la formule CELL, mais (du moins à partir d'Excel 2003), elle ne renvoie pas la couleur de la cellule.

Ce serait assez facile à implémenter avec VBA:

Public Function myColor(r As Range) As Integer
    myColor = r.Interior.ColorIndex
End Function

Puis dans la feuille de travail:

=mycolor(A1)
3
Joe

Bien que cela ne réponde pas directement à votre question, vous pouvez trier vos données en fonction de la couleur de la cellule dans Excel (ce qui facilite la tâche pour étiqueter tous les enregistrements avec une couleur particulière de la même manière et donc de conditionner cette étiquette).

Pour ce faire, dans Excel 2010, accédez à Données -> Trier -> Trier sur "Couleur de la cellule".

2
Nick M

La seule solution facile que j’ai appliquée consiste à recréer la condition principale qui utilise les faits saillants comme condition IF et à l’utiliser dans la formule IF. Quelque chose comme ça. En fonction de la condition de surbrillance, la formule changera mais je pense que cela devrait être recréé (par exemple, surbrillance supérieure à 20).

=IF(B3>20,(B3)," ")
0
emirjonb

J'ai eu un problème similaire dans lequel je devais uniquement afficher une valeur provenant d'une autre cellule Excel si la police était noire. J'ai créé cette fonction: `Option Explicit

Fonction blackFont (r As Range) As Boolean Si r.Font.Color = 0 Alors blackFont = True Autre blackFont = False Fin si

Fonction de fin `

J'ai dans ma cellule cette formule: =IF(blackFont(Y51),Y51," ")

Cela a bien fonctionné pour moi de tester une police noire et d'afficher la valeur dans la cellule Y51 si elle avait une police noire.

0
Greg Barth