Compter cellules colorées par une mise en forme conditionnelle

Bonjour les amis,

J'ai besoin d'un coup de main dans une macro qui permet de compter le nombre de cellules colorées par une mise en forme conditionnelle.

Je veux créer une fonction qui me renvoie un nombre entier, et non une routine car je veux pouvoir utiliser le résultat comme argument d'entrée dans une autre formule.

J'ai rédigé cette fonction mais elle me renvoie #VALEUR

Function COMPTER_VERT(rng As Range) As Double
 Dim ColorCount As Long
 ColorCount = 0

    For Each Cell In rng
       If Cell.DisplayFormat.Interior.Color = RGB(177, 200, 0) Then
           ColorCount = ColorCount - (Cell.Interior.Color <> RGB(177, 200, 0))
       End If
    Next
    COMPTER_VERT = ColorCount
End Function

En revanche, la routine suivante fonctionne comme je veux dans une plage où il y a une MEFC sur la couleur de fond de cellule :

Sub COMPTER_VERT_2 (rng As Range)
 Dim ColorCount As Long
 ColorCount = 0
   On Error GoTo 0

    For Each Cell In rng
       If Cell.DisplayFormat.Interior.Color = RGB(177, 200, 0) Then
           ColorCount = ColorCount - (Cell.Interior.Color <> RGB(177, 200, 0))
       End If
    Next

MsgBox "Le nombre de cellules colorées " & rng.Address(0, 0) & " est" & ColorCount
End Sub

Sub TESTER()
    COMPTER_VERT_2 (ActiveSheet.Range("E9:E1000"))
End Sub

Quelqu'un peut il m'aider à comprendre pourquoi et m'aider à trouver une Function qui marche svp ?

Merci

Rouday

Bonjour,

hé hé, j'ai eu aussi un cas où la fonction ne marchait pas quand elle était appelée dans une cellule, mais elle fonctionnait si appelée dans une sub !!! mystère, mystère

dans le cas d'une MFC, ne peux-tu pas te baser plutôt sur les conditions qui font que la cellule est verte ?

Bonjour,

malheureusement DisplayFormat ne fonctionne pas dans une fonction.

Décomposer pour avoir la couleur finale est parfois assez fastidieux.

Dans ce cas tu peux tricher un peu en lançant ton sub DisplayFormat par un événement pour mettre à jour ta cellule (activation de la feuille, une sélection de cellule, etc) en précisant le modop pour l'utilisateur.

Mais si les conditions sont simples et que tu n'as pas de multiples MFC qui se succèdent il faut faire comme Steelson l'indique.

eric

Merci pour vos réponses rapides !

Donc, encore aujourd'hui, il y a des propriétés que l'on peut appeler dans une routine mais pas dans une fonction... c'est dommage !

Du coup, je récupère le fichier de mon prédécesseur et il y a une quinzaine de colonnes avec une MEFC différente pour chacune, sachant que le résultat est le même à chaque fois : on colorie la cellule.

Donc solution 1 : faire une feuille annexe de traitement qui permettra de calculer.

Solution 2 : lancer une macro événementielle lorsqu'on active la feuille de calcul concernée en utilisant la routine qui fonctionne.

A tester et à valider la plus rapide et efficace des 2 solutions

Dans ce cas tu peux tricher un peu en lançant ton sub DisplayFormat par un événement pour mettre à jour ta cellule (activation de la feuille, une sélection de cellule, etc)

Oui, merci eriiiiiiiic, cela va aussi m'aider dans mon cas, je n'y vais pas pensé ! super = un p'tit cœur

Rechercher des sujets similaires à "compter colorees mise forme conditionnelle"