Compter des cellules colorées (ou non colorées) selon un critère

Bonjour à tous,

Je suis nouvelle et je me permets de vous demander un peu d aide. Je fais face à 2 problèmes qui je pense peuvent être solutionnés par de la VBA.

1/Comment compter un nombre de cellules selon leur couleur et en même temps selon un critère texte ? C est sur ce point que je bloque. Une sorte de nb.si.ens... Je précise qu il ne s agit pas de MFC pour les couleurs.

2 / y aurait-il une formule qui permettrait de supprimer automatiquement une valeur d'une liste en fonction d'une condition donnée ? 🤔

J espère être claire... Je vais tenter de rajouter des fichiers demain.

Merci d avance pour votre aide

98demo.xlsm (141.62 Ko)

Salut et bienvenue sur le Forum,

Ton fichier fait cruellement défaut

Dans le fichier ci-joint, un exemple de comptage de cellules dans une plage donnée qui ont une certaine couleur de fond et qui contienne une donnée.

Pour joindre un fichier, clique sur l'icône avec le X au-dessus du message que tu écris.

Bonjour,

une proposition avec une fonction personnalisée.

Function nbTexteCoul(modèle As Range, plage As Range) As Long
    Dim datas, coul As Long, txt As String
    Dim lig As Long, col As Long
    coul = [modèle].Interior.Color
    txt = [modèle].Value
    datas = plage.Value
    For lig = 1 To UBound(datas, 1)
        For col = 1 To UBound(datas, 2)
            If datas(lig, col) = txt Then
                nbTexteCoul = nbTexteCoul - (plage(1).Offset(lig - 1, col - 1).Interior.Color = coul)
            End If
        Next col
    Next lig
End Function
47nbtextecoul.xlsm (15.54 Ko)

Faire F9 pour rafraichir si changement de couleur.
Sinon à partir du fichier on peut envisager une macro qui mettra à jour par un bouton
eric

Bonjour

Merci déjà à vous 2, je vais regarder de près ce que vous m'avez proposé.

Voici un exemple du fichier dont il est question. J'avais proposé à mon élève (je ne suis pas prof vba, c'était juste pour l'aider) d'indiquer une lettre pour chaque type de congés ainsi il serait plus aisé de compter les cellules vides selon qu'il s'agit d'une absence le matin ou l'après-midi mais elle ne veut pas cette solution. J'ai créé un index couleur et une fonction Numcouleur mais ça ne prend pas en compte le critère "matin" ou "après-"midi" donc retour à la case départ.

Que veux-tu compter exactement et où souhaites-tu le résultat ?

Donne deux ou trois exemples, s'il-te-plait.

Je veux compter le nombre de présents (cellules non colorées) par demi journée pour chaque jour. Par exemple pour le vendredi 1er février, je veux le résultat en AI8 (combien de présents ce jour là, le matin) et en AI9 (idem mais pour l'après midi).

A défaut d'exemples précis, je continue à tâtonner. Dans le fichier ci-joint, les données en AI8:AO9 sont réactualisées en fonction des modifications des couleurs dans le tableau.

En AM9 par exemple, j'ai deux présences pour l'après-midi du mercredi 5 car l'Agent 4 et l'Agent 7 étaient au boulot.

mais ça ne prend pas en compte le critère "matin" ou "après-"midi"

cette distinction se fait par la sélection de la plage, 1 ligne et non 2.

Mais tu devrais insister pour qu'elle apprenne à bien travailler et utilises un code lettre pour chaque type de congé. C'est bien ainsi qu'il faut faire, utiliser la couleur pour une information, excel n'est pas conçu pour.
La couleur se met ensuite toute seule grâce à des MFC, c'est encore plus simple à ce niveau aussi.
eric

Merci Eriiic, oui merci pour la nbtextcouleur, je la garde précieusement.

Yvouille, je crois que c'est bien ce qu'elle recherche. Je ne comprends pas tout dans le code que tu as écrit, évidemment... Je ne peux pas le copier-coller directement sur l'éditeur VBA de son fichier tel quel, j'imagine. Les cellules "destinataires" des résultats elles sont indiquées dans Cells(8, i + 31) = Compteur_Matin
Cells(9, i + 31) = Compteur_PM

donc si finalement on veut le compteur matin en AM8 et non plus en AI8, qu'est-ce-que je dois changer ? ( je suis vraiment désolée...)

C'est toujours un problème lorsque l'on travaille sur des fichiers qui ne correspondent pas à la réalité

Dans le fichier que tu as présenté, tu souhaites les résultats pour les jours du 1er au 7 février (colonnes AI à AO). J’ai donc passé en revue uniquement les colonnes D à J du tableau de base (For i = 4 To 10).

Après avoir compté en premier le nombre de cellules de la colonne D (i = alors 4) qui correspondent à un Agent ayant travaillé le matin (Cellules D11, D14, D20 et D23), je reporte le nombre de 4 en AI8, soit 31 colonnes plus loin que la colonne D, d’où le + 31 dans l’instruction Cells(8, i + 31) = Compteur_Matin.

A la deuxième boucle de i, i = 5, soit colonne E. Le résultat de cette colonne est reporté dans la colonne 5 + 31 = 36 = colonne AJ. Et ainsi de suite.

Tu demandes : ‘’donc si finalement on veut le compteur matin en AM8 et non plus en AI8, qu'est-ce-que je dois changer ?’’. J’espère que tu as compris qu’il s’agit d’une position relative par rapport à la valeur de la variable i. Si tu veux reporter les données du vendredi 1er février dans la colonne AM – soit quand i vaut 4 - tu dois indiquer : Cells(8, i + 35) = Compteur_Matin afin d’atteindre la 39ème colonne.

Mais du coup où est passé le texte dont tu parlais dans la question, point sur lequel tu disais bloquer ?

Oui en effet Yvouille, je n'ai envoyé qu'un extrait de son classeur pro mais j'ai bien saisi ce que tu m'as expliqué, je te remercie.

Eriic, en fait le texte dont je parlais et qui me bloquait était le critère Matin/ Après-midi (colonne B, 1 ligne sur 2). A partir de plusieurs infos, j'avais tenté d'écrire le code pour un index couleur, en me disant que peut-être les cellules non colorées auraient aussi un code. L'index couleur a fonctionné

Function numCouleur(cellule As Range) As Integer
Application.Volatile
numCouleur = cellule.Interior.ColorIndex
End Function

Puis j'ai voulu trouver une formule pour compter le nombre de cellules rouges, etc. et aussi les non colorées mais je n'obtenais pas la différence Matin/ après-midi. Donc j'ai essayé encore autre chose du genre cette absurdité et je me suis noyée lol
Function nbCouleurs.si.ens(plage1 As Range, cellule1 As Range,plage2 As Range, cellule2 As Range) As Integer

Application.Volatile
Dim chaqueCellule As Range: Dim couleur As Integer
couleur = cellule.Interior.ColorIndex
nbCouleurs = 0

For Each chaqueCellule In plage
If chaqueCellule.Interior.ColorIndex = couleur Then
nbCouleurs = nbCouleurs + 1
End If

Next chaqueCellule

End Function

Je vous remercie tous 2. Je vais classer le sujet.

Pour son 2ème problème (relier les données de 3 classeurs et supprimer une valeur d'un classeur si elle apparait dans le 2ème classeur, etc. je vais lui recommander de se rendre elle-même sur les forum !!!

Ah ok. Du coup ma proposition ne convient pas, elle était prévue pour le texte dans les cellules, en plus de la couleur.
Comme quoi il faut toujours joindre un fichier...
eric

Rechercher des sujets similaires à "compter colorees critere"