Compter des cellules avec une mise en forme particulière

flav91

XLDnaute Nouveau
Bonjour, j'ai fait un tour sur les discussions résolues mais j'ai pas trouvé réponse à ma question:

en fait je souhaiterai une formule pour compter le nombre de cellules d'une plage donnée dont la couleur remplissage est vert ou la police rouge par ex...

est-ce possible ça (sans passer par une macro, si possible j'y connais rien en VBA)?

Merci d'avance.
 

jeanpierre

Nous a quitté
Repose en paix
Re : Compter des cellules avec une mise en forme particulière

Bonsoir flav91, bhbh,

Excel est un tableur, un calculateur, l'arithmétique, les mathématiques il connait, mais ce n'est pas une ardoise pour faire de jolies couleurs avec de belles craies.

Seul VBA peut le faire.... Néanmoins, imagines que, si ton fichier doit circuler, et que tes collègues n'aient pas la même appréciation des couleurs... te dit pas le patacaisse....

VBA, sauf une très bonne programmation, c'est du dur de chez dur....

Pourquoi donc compter les couleurs des cellules plutôt que leurs valeurs..... ?

C'est une question à quelqu'un qui n'y connais rien en VBA.

Oui, je sais, chiant, mais pour le bien...

J'avais un prof. qui disait, quand on sait pas, on dit pas, ou alors on apprend....

Ceci dit, pour te demander pourquoi, et éventuellement un fichier très représentatif de ta problèmatique sur lequel travailler... pas un exemple approximatif... sinon on risque de tourner en rond.... (Zippé si possible)

Bonne soirée et à te lire.

Jean-Pierre
 

flav91

XLDnaute Nouveau
Re : Compter des cellules avec une mise en forme particulière

Bonjour à tous et merci pour la rapidité de vos réponses.

Tout d'abord je joints un fichier explicatif de ma démarche, cela sera plus clair sans doute pour vous.

Alors effectivement je n'utilise peut être pas excel pour ses bonnes compétences puisque je veux qu'il compte des cellules sous condition d'une mise en forme particulière, et ça ce n'est pas des maths comme le faisait remarquer très justement jeanpierre....

bref je m'explique, en fait j'essaye de monter un fichier hebdomadaire de répartition des taches entre différents agents.

La première chose que j'ai faite est de monter ma semaine avec l'ensembe des tâches à accomplir pour l'ensemble du service.

Puis avec la fonction NB.SI, j'ai compté le nombre de tâche "X", "Y", etc... sur l'ensemble de la semaine.

Il faut maintenant que je répartisse équitablement les tâches entre les agents, mais chacun n'est pas attribué à une tâche en particulier, cela change tous les jours. Si bien que "Martin" peut faire les tâches "X", "Y" et "Z" le lundi matin, et "Paul" les mêmes tâches "X" et "Z" le mardi après midi.

Alors je voulais attribué une couleur de remplissage de cellules aux tâches effectuées par Martin (bleu par ex), par Paul (jaune)...

Ceci pour voir rapidement la répartition du service.

et dans cette optique, une fois ma semaine planifiée, je voulais demander à excel de compter les cellules en bleu (celles de Martin), etc... pour vérifier que chaque agent à bien le même nombre de tâches à effectuer dans la semaine.

Voilà j'espère avoir été suffisamment clair, sans vous avoir trop ennuyé.

Si quelqu'un a une solution avec macro, je veux bien qu'il m'explique pour pouvoir le faire de nouveau moi même dans un aute fichier par ex (ou une autre condition (police en rouge par ex au lieu de couleur de remplissage en bleu ou jaune....)

Voilà, Merci à tous !
 

Pièces jointes

  • Planing hebdo.xls
    20 KB · Affichages: 128

wilfried_42

XLDnaute Barbatruc
Re : Compter des cellules avec une mise en forme particulière

Bonjour flav, bhbh :), jeanpierre :)

Ton fichier en retour avec une fontion personalisée, par contre je trouve 24 bleues et 18 jaunes donc j'ai peut etre pas tout compris

la fonction se trouve dans le module1 dans VBA (Alt + F11 pour y acceder)

dans la cellule : =Calc_color(plage; cellule de reference ou code couleur au choix)
Dans le fichier, j'ai mis la cellule de reference permetant de changer la couleur de sans modifier la formule

Attention : appliquer une couleur dans une cellule, ne provoque un calcul automatique de la feuille, il faudra appuyer sur F9 pour lancer les calculs
Par contren, applique un format de cellule à l'aide du pinceau, provoque le calcul automatique de la feuille
C'est Excel qui fait cela, je n'en suis pas maitre
 

Pièces jointes

  • Planinghebdo(1).zip
    9.2 KB · Affichages: 130

flav91

XLDnaute Nouveau
Re : Compter des cellules avec une mise en forme particulière

Alors d'abord t'as raison y'a bien 24 bleues et 18 jaunes (comme quoi vérifier avec excel c'est bien lol)

Et avec ton système en appuyant sur F9, ça fonctionne bien (effectivement). Si j'ai bien compris, si au lieu de faire couleur de remplissage je faisais directement couleur de police bleu, les calculs se feraient automatiquement sans avoir besoin d'appuyer sur F9, c'est ça?

Mais par contre, si tu peux me traduire un peu le langage VBA utilisé (je n'arrive pas à le déchifrer, dans le but de le comprendre et de l'appliquer à nouveau seul si besoin):


Public Function calc_color(plage As Range, couleur As Variant) As Long
Dim coul As Integer, cel As Range
Application.Volatile
If TypeName(couleur) = "Range" Then
coul = couleur.Interior.ColorIndex
Else
coul = couleur
End If
calc_color = 0
For Each cel In plage
If cel.Interior.ColorIndex = coul Then calc_color = calc_color + 1
Next
End Function


La Function calc_color, c'est toi toi qui la crée?
et après le reste je le comprends pas vraiment non plus, désolé j'suis prie que novice en VBA!
 

wilfried_42

XLDnaute Barbatruc
Re : Compter des cellules avec une mise en forme particulière

re:

Code:
' Déclaration de la fonctio : le nom : calc_color, et les parametres (plage, couleur)
Public Function calc_color(plage As Range, couleur As Variant) As Long
' Declaration des variables de travail (Coul : Index de la couleur, cel une cellule
   Dim coul As Integer, cel As Range
   Application.Volatile ' Defini un recalcul automatique de la formule
   If TypeName(couleur) = "Range" Then ' Je teste , si le 2eme paramtre fait reference à une cellule
       coul = couleur.Interior.ColorIndex ' Recupere la couleur du fond de la cellule
   Else ' sinon c'est que le 2eme parametre est un code couleur
       coul = couleur ' recupere le 2eme parametre
   End If  ' Fin du test
   calc_color = 0 ' je mets à zero le compteur
   For Each cel In plage ' je vais passer en revue toute les cellules de la plage
       If cel.Interior.ColorIndex = coul Then calc_color = calc_color + 1 ' Si la cellule de la plage est la bonne, j'incremente 
   Next ' je vais voir la prochaine cellule
End Function ' Fin de la fonction

Maintenant, si tu veux tester la couleur des caracteres, au lieu de interior, il faut mettre Font

Une simplification en cas de perte de memoire :
Quand en VBA tu tapes Range, tu mets un point ".", il t'affiche dans une liste deroulante toutes les proprietes et toutes les methodes de l'objet
Tu choisis Font, encore une fois le ".", il t'affiche encore toutes propriété de l'objet et la tu trouves par exemple : Bold, Italic, colorindex, Size et bien d'autres
 

JNP

XLDnaute Barbatruc
Re : Compter des cellules avec une mise en forme particulière

Bonjour le forum, Wilfried :),
Le travail de Wilfried est impeccable. Je proposerais juste 2 petites choses pour simplifier la vie de flav91 :
Une petite fonction pour calculer la valeur de la couleur qui l'intéresse, ce qui lui évitera la cellule de référence, toujours un peu dangereux :
Code:
Public Function Couleur(Cellule As Range)
' Fonction renvoyant la valeur de la couleur d'une cellule
Application.Volatile ' Prévient Excel que la fonction doit être mise à jour en cas de changement
If Cellule.Count <> 1 Then ' Vérifie qu'une seule cellule est sélectionnée
    MsgBox ("Sélectionner une seule cellule !") ' Dans ce cas prévient l'utilisateur
    Couleur = "Erreur" ' Renvoie la valeur Erreur
Else ' Sinon
    Couleur = Cellule.Interior.ColorIndex ' Renvoie la valeur de la couleur
End If ' Fin du test
End Function
Et ensuite, pour éviter le F9 un peu pénible, une procédure à mettre dans le code de la feuille :
Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
' Macro qui oblige le calcul de la feuille à chaque changement de sélection
Calculate ' Equivalent du F9 en VBA
End Sub
Bon WE :cool:
 

flav91

XLDnaute Nouveau
Re : Compter des cellules avec une mise en forme particulière

Merci à tous les deux, j'essaye de suivre mais c'est pas facile...lol

et je dois tot écrire à la suite du style? :

Public Function calc_color(plage As Range, Couleur As Variant) As Long
Dim coul As Integer, cel As Range
Application.Volatile
If TypeName(Couleur) = "Range" Then
coul = Couleur.Interior.ColorIndex
Else
coul = Couleur
End If
calc_color = 0
For Each cel In plage
If cel.Interior.ColorIndex = coul Then calc_color = calc_color + 1
Next
End Function

Public Function Couleur(Cellule As Range)
' Fonction renvoyant la valeur de la couleur d'une cellule
Application.Volatile ' Prévient Excel que la fonction doit être mise à jour en cas de changement
If Cellule.Count <> 1 Then ' Vérifie qu'une seule cellule est sélectionnée
MsgBox ("Sélectionner une seule cellule !") ' Dans ce cas prévient l'utilisateur
Couleur = "Erreur" ' Renvoie la valeur Erreur
Else ' Sinon
Couleur = Cellule.Interior.ColorIndex ' Renvoie la valeur de la couleur
End If ' Fin du test
End Function

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
' Macro qui oblige le calcul de la feuille à chaque changement de sélection
Calculate ' Equivalent du F9 en VBA
End Sub
End Function

Et là c'est censé tout fonctionner comme il faut?

C'est as très facile le langage VBA tout de même
 

JNP

XLDnaute Barbatruc
Re : Compter des cellules avec une mise en forme particulière

Re :),
Les 2 fonctions sont à mettre dans un module :
Alt+F11 pour ouvrir l'éditeur de macro, puis clic-droit sur l'arborescence de ton classeur, Insertion, Module.
Tu peux alors coller tes 2 fonctions qui seront utilisable dans tout ton classeur.
La sub est à mettre dans le module de feuille. Double-clic Feuil1 (Feuil1) dans l'arborescence.
VBA n'est peut-être pas très facile, mais plus tu en feras, plus cela te paraitra clair. D'un autre côté, il est moins compliqué (pour moi) que du C++ par exemple...
Bon WE et n'hésite pas à demander des compléments d'information :cool:
 

Discussions similaires

Statistiques des forums

Discussions
312 429
Messages
2 088 357
Membres
103 826
dernier inscrit
Normand.guillaume@orange.