Voici une macro écrite hier pour répondre exactement au même problème. L'avantage de cette fonction est qu'elle peut être appelée directement dans une cellule et que, d'autre part, elle peut être utilisée dans une formule matricielle, pour travailler sur toute une plage.
Partant de cet exemple, il est facile de l'adapter pour compter les couleurs des cellules, les attributs du texte etc. Pour l'utiliser, il suffit de copier le code ci-dessous dans un module VBA.
exemple d'application dans une feuille
=SOMME(SI(couleurtexte(B2:L2;3)=VRAI;B2:L2;0))
(formule matricielle, à valider par Ctrl-Maj-Entrée) cette formule additionne les valeurs des cellules écrites en rouge (3 = rouge ici) dans la plage B2:L2
Option Explicit
'Ti 23-04-03
'noir = 1
'marron = 53
'vert olive = 52
'vert foncé = 51
'bleu-vert foncé = 49
'bleu foncé = 11
'indigo = 55
'gris 80% = 56
'rouge foncé = 9
'orange = 46
'marron clair = 12
'vert = 10
'bleu-vert = 14
'bleu = 5
'bleu-gris 47
'gris-50% = 16
'rouge = 3
'orange clair = 45
'citron vert = 43
'vert marin = 50
'vert d'eau = 42
'bleu clair = 41
'violet = 13
'gris-40% = 48
'rose = 7
'jaune d'or = 44
'jaune = 6
'vert brillant = 4
'turquoise = 8
'bleu ciel = 33
'prune = 54
'gris-25% = 15
'rose saumon = 38
'brun = 40
'jaune clair = 36
'vert clair = 35
'turquoise clair = 34
'bleu moyen = 37
'lavande = 39
'blanc = 2
'aucune couleur = -4142
Function CouleurTexte(Plage As Range, IndexCouleur As Integer)
Dim Cel As Range, Tableau, Lgn As Long, Col As Long
With Plage
ReDim Tableau(1 To .Rows.Count, 1 To .Columns.Count)
For Lgn = 1 To UBound(Tableau)
For Col = 1 To UBound(Tableau, 2)
Tableau(Lgn, Col) = .Cells(Lgn, Col).Font.ColorIndex = IndexCouleur
Next Col
Next Lgn
End With
CouleurTexte = Tableau
End Function