J'ai fait une fonction qui compte le nombre de cellules suivant la couleur de remplissage avec le code suivant :
Code:
Function NbCaseCouleur(Couleur As Range, Plage As Range)
Dim nb As Double
nb = 0
For Each cell In Plage
If cell.Interior.Color = Couleur.Interior.Color Then nb = nb + 1
Next cell
NbCaseCouleur = nb
End Function
Elle marche très bien pour les cellules dont le remplissages est défini manuellement ou par VBA mais elle ne prend pas en compte les couleurs des MFC.
Ce qui est bien dommage c'était précisément mon but, l'utiliser avec des MFC
Une solution à ce problème ?
D'autre par la valeur de cette formule ne se met pas à jour si je change des couleurs (même après Calculer ou F9) ?
1)Les couleurs mise en place par une mefc n'ont pas de code couleur qu'on puisse récupérer même si visuellement on voit la même chose.
2) un changement de format quel qu'il soit ne déclenche en aucun cas un événement interceptable par excel. On peut utiliser dans certains cas des solutions de contournement, en utilisant par exemple les macros XL4 lire.cellule et interpréter la modif sur la cellule contenant cette fonction XL4.
Donc oui, comme te le propose Pierrot, LA solution, c'est de tester la condition utilisée pour la mefc et la réutiliser pour compter le nb de cellules répondant à la condition.
Merci pour ces infos,
Cette fonction avait pour objet d'être utilisé dans la feuille de calcul, et partagée avec mes collègues... elle me semble donc "casse-gueule" en l'état puisquelle ne prend pas en compte des cellules qui sont visuellement en couleur. Quand à entrer les condition de la MFC dans le code, cela me ferait perdre le caractère générique de la fonction. Je vais donc tenter la solution de Misange.
Merci pour le "Application.volatile" dont j'avais oublié l'existence !
"la solution de Misange"... Je crois qu'on s'est mal compris : je te préconise exactement la même chose que ce que Pierrot t'a dit : utiliser les conditions appliquées pour ta mefc pour compter les couleurs.
Cela dit tu n'es pas obligé d'utiliser une fonction pour cela.
Si tu mets en rouge toutes les cellules =2, un simple nb.si suffira
Le application volatile ne sera pas utile ici car encore une fois un changement de couleur n'induit pas d'événement capturé par excel dans une macro. Avec ou sans ta fonction ne verra pas de changement de couleur, appliquée par mefc ou manuellement, même combat.