Calcul multi-critère couleurs et valeurs de cellules

BOILEAU

XLDnaute Junior
Bonjour,
Je suis dans la panade !!!! je tourne en rond, je décide donc de rechercher de l'aide. Je suis sous la dernière version d'Excel (V 16.24), sous Mac et j'ai installé le complément Pack de fonction XLP.

Dans une feuille Excel, j'ai une plage de données (D78:BM78) dans laquelle les cellules possède une information écrite BS ou MS ou HS.
J'ai une autre plage de données (D86:BM87) dans laquelle certaines cellules sont colorées en bleue.

Je souhaiterai obtenir dans une cellule de mon tableau le résultat suivant : Pour chaque cellule MS, compter le nombre de cellule bleue.
De même dans une autre cellule : Pour chaque cellule BS, compter le nombre de cellule bleue et dans une troisième cellule : Pour chaque cellule HS, compter le nombre de cellule bleue.

J'espère que quelqu'un pourra m'aider sur ce sujet.

restant à votre disposition.

Un grand merci d'avance.

Frédéric
 

BOILEAU

XLDnaute Junior
Bonjour,
Merci de votre réponse et je la comprend.
Voici donc mon fichier. Le problème se situe sur le mois d'avril (c'est un mois pris au hasard). Ce sera la même chose pour chacun des mois de l'année. J'ai mis des points d'interrogations en rouge pour situer où doivent se trouver les valeurs recherchées.
Merci énormément pour votre aide.
Bien cordialement,
Frédéric
 

Victor21

XLDnaute Barbatruc
Bonjour, BOILEAU.
Le sujet (comptage de cellules couleur) a été traité de nombreuses fois sur XLD. N'hésitez pas à utiliser l'outil de recherche avec les mots-clé "compte, couleur"
Cet exemple devrait pouvoir vous aider.
Edit : Cependant la différenciation en fonction des saisons et des opérateurs rend l'exercice plus complexe, et la seule fonction de l'exemple ne suffira probablement pas.
Souhaitons qu'un VBAiste passe par ce fil...
 
Dernière édition:

job75

XLDnaute Barbatruc
Bonjour BOILEAU, Patrick,

On peut utiliser cette fonction VBA :
VB:
Function CompteTextCouleur(PlageText As Range, ref As String, PlageCouleur As Range) As Integer
Application.Volatile
Dim i%
For i = 1 To PlageText.Count Step 2
    If CStr(PlageText(i)) = ref And PlageCouleur(i + 1).Interior.ColorIndex <> xlNone Then CompteTextCouleur = CompteTextCouleur + 1
Next
End Function
Voir la formule en BS80 à copier à droite et en dessous.

Fichier .xlsm joint.

A+
 

ThomasR

XLDnaute Occasionnel
Bonjour,

Je pense qu'il faut mettre un test sur la couleur bleu, car là il compte combien de fois la valeur est en couleur.

Autre point, il ne compte que les cellules avec une couleur de base (colorindex) et non les couleurs de type thème.

Cordialement,
Thomas
 

BOILEAU

XLDnaute Junior
Re...
Je me suis emballé un peu vite. Tout marche comme je le souhaitais, sauf que si je mets une couleur différente de la bleue dans une cellule il l'a compte. C'est bête -:)
Si une solution existe, je suis preneur.
Je renvois le fichier pour exemple.
Merci de votre aide et pardon pour mon enthousiasme prématuré.
Bonne soirée.
Frédéric
 

ThomasR

XLDnaute Occasionnel
Je pense qu'il faut enrichir la fonction en lui passant en paramètre une cellule bleue afin qu'il la compare.comme ça si dans le futur tu souhaites géré plusieurs couleurs le code sera fonctionnel.
Et quite à passer une cellule autant géré une plage comme ça tu pourras lui dire vert et bleu par exemple.
Si personne pour le faire je peux m'y coller mais demain.
Idem regarde mon précédent message car j'avais déjà identifié ton problème de compteur mais aussi le type de couleur (base vs thème)
 

BOILEAU

XLDnaute Junior
Bonsoir ThomasR
Merci pour votre réponse. Malheureusement, je ne suis pas assez expert pour réussir tout seul. J'accepte avec plaisir votre proposition et je peux attendre le temps qu'il faudra.
Un grand merci pour votre aide.
Cordialement
Frédéric
 

ThomasR

XLDnaute Occasionnel
Hello,

Rapidement
VB:
Function nbTextColor(plages As Range, text As String, myColor As Range) As Long
    Dim result As Long, r As Range
'pour que la fonction se recalcule automatiquement
    Application.Volatile
'boucle sur la plage
    For Each r In plages
'test la présence du texte insensible à la casse
        If UCase(r.Value) Like "*" & UCase(text) & "*" Then
'test la couleur
            If r.Interior.ColorIndex = myColor.Interior.ColorIndex Then
'incrémente le resutat
                result = result + 1
            End If
        End If
    Next
    nbTextColor = result
End Function
 

Pièces jointes

  • nbTextColor.xlsm
    14.7 KB · Affichages: 16

ThomasR

XLDnaute Occasionnel
oups, j'ai pas compris le besoin :'(

de ce fait je te préconise de reprendre la macro initial de Job75 et d'y ajouter un test sur le colorie
Code:
Function CompteTextCouleur(PlageText As Range, ref As String, PlageCouleur As Range, myColor As Range) As Integer
Application.Volatile
Dim i%
For i = 1 To PlageText.Count Step 2
    If CStr(PlageText(i)) = ref And PlageCouleur(i + 1).Interior.ColorIndex = myColor.Interior.ColorIndex Then CompteTextCouleur = CompteTextCouleur + 1
Next
End Function
 
Dernière édition:

Discussions similaires

Réponses
15
Affichages
418
Réponses
46
Affichages
871

Statistiques des forums

Discussions
312 248
Messages
2 086 593
Membres
103 248
dernier inscrit
Happycat