Excel calculer par couleur de remplissage [Résolu/Fermé]

Signaler
-
 Cob -
Bonjour,
Je voudrais sur un planning de personnel excel pouvoir calculer le nombre de cellule remplie par telle ou telle couleur (rouge, verte, orange etc ....)

ce qui me donnerais:

si entre les cellules B4:B18 il y a par exemple: 1 cellule rouge ; 3 cellules verte, ma cellule B20 qui est la cellule qui me donnera le résultat "avec votre aide", me donnera comme SOMME = 4

J'espère être assez clair,

8 réponses

Bonjour,
Une idée, vous coller cette fonction dans le Module1 (ouvrir l’éditeur VBA : touche Alt+F11)
Function NumCoulCel(C As Object)
Application.Volatile True
NumCoulCel = Abs(C.Interior.ColorIndex)
End Function
En C4 la formule : =numcoulcel(B4) (vous trouve le numéro de la couleur de remplissage)
Tirer la formule vers le bas.
Ensuite vous comptez avec =NB.SI(C4:C18;3) pour rouge et =NB.SI(C4:C18;14)
15
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 61028 internautes nous ont dit merci ce mois-ci

Messages postés
17231
Date d'inscription
dimanche 17 février 2008
Statut
Contributeur
Dernière intervention
21 septembre 2020
4 247
Salut,

Une petite fonction personnalisée à coller dans un module
Ensuite Insertion/Fonction/Sélectionner Personnalisé/Sélectionner CompteCelluleCouleur
Dans Plage_à_Contrôler saisir les références de la plage
Dans Cellule_de_référence saisir la cellule qui coloré qui servira d’index couleur (personnellement je me sers de la cellule dans la quelle je saisi la fonction)
Il suffit de coloriser la cellule de référence pour avoir le compte.

Function CompteCelluleCouleur(Plage_à_Contrôler As Object, Cellule_de_référence As Range) As Integer
Application.Volatile True
CompteCelluleCouleur = 0
MaCoul = Cellule_de_référence.Interior.ColorIndex
For Each cell In Plage_à_Contrôler
If cell.Interior.ColorIndex = MaCoul Then CompteCelluleCouleur = CompteCelluleCouleur + 1
Next cell
End Function

Pour activer la fonction clic sur F9
Ou mettre dans les propriétés de la feuille ce code si A1 est et reste vide ou changer la référence

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
[A1] = ""
End Sub

A+
Mike-31

Un problème sans solution est un problème mal posé  (Einstein)
Messages postés
17231
Date d'inscription
dimanche 17 février 2008
Statut
Contributeur
Dernière intervention
21 septembre 2020
4 247
Bonjour,

l'idéal aurait été d'ouvrir ta propre discussion, récupère ton fichier, pour compter des couleurs manuelles, il faut passer par du VBA.
Pour cela il faut aller dans le Visual Basicv d'Excel, clic droit sur l'onglet de feuille et Visualiser le code ou combiner la touche Alr et la touche de fonction F11
créer un module (Insertion/Module) dans lequel on colle ce code

Function sommecouleur(Plage_à_contrôler, Modèle As Range)
Dim c As Range
Dim montotal As Double
Application.Volatile True
For Each c In Plage_à_contrôler
If c.Interior.ColorIndex = Modèle.Interior.ColorIndex Then
montotal = montotal + 1
End If
Next
sommecouleur = montotal
End Function

pour accélérer le calcul dans les propriétés de la feuille du Visual j'ai collé ce code

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Calculate
End Sub


ensuite sur la feuille de calcul j'appelle la fonction dans ton fichier en cellule FC5 (Formules/Fonction/Personnalisé/sélectionner Sommecouleur

comme tes cellules vont par 4, j'ai divisé le résultat par 4

Un classeur contenant des codes VBA doit être enregistré sous l'extension XLS ou XLSM

https://www.cjoint.com/c/DDds0s4g0KS
Messages postés
7
Date d'inscription
mercredi 4 décembre 2013
Statut
Membre
Dernière intervention
3 avril 2014

UN IMMENSE MERCI! C'est exactement ce qu'il me fallait!

Vous ne pouvez pas imaginer à quel point vous m'avez rendu service!

MERCI MERCI MERCI et de ma collègue aussi!
Merci Mike! Exactement ce que je cherchais!
Bonjour,
Une idée, vous coller cette fonction dans le Module1 (ouvrir l’éditeur VBA : touche Alt+F11)

Function NumCoulCel(C As Object)
Application.Volatile True
NumCoulCel = Abs(C.Interior.ColorIndex)
End Function


En C4 la formule : =numcoulcel(C4) (vous trouve le numéro de la couleur de remplissage)
Tirer la formule vers le bas.

Ensuite vous comptez avec =NB.SI(C4:C18;3) pour rouge et =NB.SI(C4:C18;14)
Messages postés
17231
Date d'inscription
dimanche 17 février 2008
Statut
Contributeur
Dernière intervention
21 septembre 2020
4 247
Salut,

Ca dépend de la façon de la colorisation des cellules, si tu passes par une mise en forme conditionnelle, il est possible d'intégrer dans la formule la prise en compte de cette mise en forme conditionnelle

si nombre de couleurs est supérieur à 3 conditionnelles + une

si tu as quelques notions en VBA, avec un petit code


A+
Mike-31

Un problème sans solution est un problème mal posé  (Einstein)
Messages postés
17231
Date d'inscription
dimanche 17 février 2008
Statut
Contributeur
Dernière intervention
21 septembre 2020
4 247
Re,

J'ai repris la discussion et revu ma fonction pour totaliser toutes les couleurs

Function CompteCellulesCouleur(Plage_à_Contrôler As Object) As Integer
Application.Volatile True
CompteCellulesCouleur = 0
For Each Cell In Plage_à_Contrôler
If Cell.Interior.ColorIndex <> xlNone Then CompteCellulesCouleur = CompteCellulesCouleur + 1
Next Cell
End Function

A+
Mike-31

Un problème sans solution est un problème mal posé  (Einstein)
salut mike
j'avais aussi besoin d'une telle formule, merci bcp

par contre, je constate que le code vba va bien, mais ce que j'aurai voulu faire
c'est d'avoir le total des toutes les cellules jaune, et celui des rouges, etc...

est-ce que tu peux m'aider, dois-je juste complèter la macro que tu as faite
ou s'agit-il d'un autre code.

je te remercie d'avance pour tes infos

à bientôt
Messages postés
17231
Date d'inscription
dimanche 17 février 2008
Statut
Contributeur
Dernière intervention
21 septembre 2020
4 247 > xx1234
Salut XX1234,

Tu aurais dû ouvrir ta propre discussion.

Mais pour te répondre, le code est légérement différent, colles le code ci-dessous dans un module et Insertion/Fonction/Personnalisé Dans plage à contrôler détermines la plage et dans Modèle fais référence à une cellule contenant la couleur, elle peut être la cellule qui contient le compteur.
Comme toute fonction, pour actualiser la mise à jour du compteur après colorisation d'une cellule clic sur la touche F9 ou complèter le code. Je serais de retour dans la soirée

Function sommecouleur(Plage_à_contrôler, Modèle As Range)
Dim c As Range
Dim montotal As Double
Application.Volatile True
For Each c In Plage_à_contrôler
If c.Interior.ColorIndex = Modèle.Interior.ColorIndex Then
montotal = montotal + 1
End If
Next
sommecouleur = montotal
End Function
Messages postés
1
Date d'inscription
mardi 27 octobre 2015
Statut
Membre
Dernière intervention
27 octobre 2015

Bonjour Mike,

Je voulais vérifier une chose sur le code que vous avez donnée.

D'après ce que j'ai compris dans la condition vous vérifier que la couleur de fond de chaque cellule est différente de "non rempli" donc qu'il y ai une couleur.

Moi je cherche à compter les cellules non vide qui n'ont pas de couleur donc est ce que si je remplace "<>" par "=" ça va fonctionner (j'ai déjà essayer et je reste à 0)

Cordialement
Messages postés
1
Date d'inscription
lundi 28 septembre 2009
Statut
Membre
Dernière intervention
29 septembre 2009

Alors là je suis épaté par votre réactivité, je vais essayé tout ca de ce pas , mais je vous remercie d'ors et déjà ;)
Je vous tiens au courant.
Merci
Messages postés
7
Date d'inscription
mercredi 4 décembre 2013
Statut
Membre
Dernière intervention
3 avril 2014

Bonjour,

Je vois ce sujet qui date certes mais qui m'intéresse beaucoup. Malheureusement je suis pas très calée en Excel! Je voudrais aussi avoir un total en fonction de la couleur des cellules. J'ai essayé ce que vous dites mais rien n'y fait ça marche pas... Ma cellule de référence est FA1. Après à chaque vacation mise je veux savoir en colonne EX le nombre d'heure par agent car je dois pas dépasser le nombre qui est dans la colonne EY.

Si vous pouvez m'aider mille mercis si vous pouvez pas merci d'avoir au moins lu!

https://www.cjoint.com/?DDdstXJyywP

Margot