Comptage cellules de couleur avec une valeur en fonction de la valeur d'une autre cellule

fichier_test.xlsx (9,8 Ko)
Bonjour à tous !

Je souhaiterais bénéficier de vos lumières et savoir s’il existe une macro qui permette de comptabiliser le nombre de cellules des colonnes B et D du fichier joint :

  • avec la valeur 2 (en colonnes B et D donc)
    ET
  • ayant en face la valeur 0 COLOREE EN JAUNE (dans les colonnes C et E), donc comptage avec une condition.

Affichage de ce résultat en G1 (donc 3 pour le cas qui nous occupe)

TOUT COMME :

le nombre de cellules qui ont la valeur 3 en colonnes B et D avec en face, COLOREES EN VERT (colonnes C et E) la valeur 1.
Affichage de ce résultat en G2 (donc 2 pour le cas exposé).

Je connais la macro qui permet de compter les cellules avec une certaine valeur ET une certaine couleur, soit celle qui suit, mais j’ai beau chercher la manière de rajouter une condition à cela, je n’y parviens pas. Peut-être fais-je fausse route…

Espérant avoir été clair.
Merci d’avance pour votre aide.

Function NbColorText(ByRef Plage As Range, ByRef Couleur As Byte, text As String) As Long
Dim c As Range
Dim nb As Long
nb = 0
For Each c In Plage
If c.Interior.ColorIndex = Couleur And c.Value = text Then
nb = nb + 1
End If
Next c
NbColorText = nb
End Function

Function NbColorAndTextSameAs(ByRef Plage As Range, ByRef Cellule As Range) As Long
NbColorAndTextSameAs = NbColorText(Plage, Cellule.Interior.ColorIndex, Cellule.Value)
End Function

Bonjour,
Avec une fonction personnalisée
fichier_test.xlsm (17,2 Ko)

Bonjour Mimimathy,

Je vous remercie beaucoup, tant pour la célérité de votre réponse que pour la solution proposée.
Permettez-moi d’être élogieux : c’est précis, clair et cela répond à mes attentes ! Bravo !

Pour être tout à fait complet peut-être, j’ai essayé la formule : =CountColorNonVide($C$2:$C$21;G1;>9).

Je vais appliquer votre formule aux valeurs de 0 à 9 (dans un fichier autre que celui soumis car vous aurez sans doute compris que ‹ fichier_test.xlsm › est un extrait de tableur. Passé ‹ 9 ›, comme les valeurs (ex. 12, 15, 23…) sont sensiblement plus rares je voudrais saisir >9
mais dès que le signe > est introduit dans la formule que vous avez établie cela ne fonctionne pas/plus. Quelque chose à modifier dans la macro peut-être ?
Encore merci pour vos lumières si vous avez une solution.

Hello
si je décode correctement la formule, tu demandes à compter les valeurs supérieures à 9

Re,
Teste, la fonction compte toutes les valeurs au dessus ou égale à 10
fichier_test.xlsm (17,4 Ko)

Hello Taz067,
oui ; la solution vient d’être apportée par Mimimathy avec une modification de la macro.
Merci

Re Mimimathy,

Ca me semble parfait une nouvelle fois. Merci !

Bonjour,

La solution est donc en application et donne satisfaction pour ce qui concerne les résultats de comptage attendus.

Cela dit, je me suis rendu compte que toute macro qui permettait de « compter des cellules colorisées » génèrait un temps de traitement parfois colossal…
A titre d’exemple, le fichier dans lequel j’ai mis en place la macro (env. 8 Mo) s’ouvrait en à peu près 10 secondes ; depuis la mise en place de la macro on dépasse la minute et, plus problématique, n’importe quelle opération, n’importe quelle modification de cellule génère un traitement particulièrement long (ex. : vous voulez remplacer le chiffre 3 par le chiffre 7 dans n’importe quelle cellule et cela va prendre plusieurs dizaines de secondes !).

Il est à noter que ce fichier comporte beaucoup d’autres macro(s), pas spécialement « énergivores » mais celle qui solutionne la question initialement posée ralentit considérablement le fonctionnement du fichier. Il semblerait qu’elle « occupe » toute l’activité du fichier alors que « seulement » un certain nombre de cellules sont concernées.

Ce fichier comporte une vingtaine de feuilles, disons, pour simplifier, numérotées de 1 à 20. La 20ème comporte tous les résultats de comptage des feuilles 1 à 19 (exemple : pour compter toutes les cellules de couleur jaune dans la feuille 5 j’ai : =CountColorNonVide(‹ 5 ›!$C$21:$HW$200;$A$14;0).
(14 étant donc une cellule jaune que l’on retrouve en feuille 20).

Dans ce fichier, la formule =CountColorNonVide(‹ 5 ›!$C$21:$HW$200;$A$14;0) est adaptée (reproduite/répétée) environ 50 fois pour effectuer le comptage du nombre de cellules de couleur jaune, verte, bleue… présentes dans les feuilles 1 à 19.
Notons que ces cellules colorisées présentes dans les feuilles 1 à 19 sont présentes dans la zone A21 : HW150 (très concrètement moins d’un millier de cellules, PAR FEUILLE DE 1 à 19 à « contrôler pour la macro ») et non pas sur l’intégralité de la feuille. Peut-être serait-ce une piste pour limiter la zone de comptage de la macro qui a été trouvée ?

A vous lire,

Merci d’avance pour votre aide.

Bonjour,
Peut-être qu’en sachant sur quel principe les couleurs sont attribuées, il y aurait une solution par MFC.

essai.xlsm (16,8 Ko)

Bonjour,

Ci-joint un un extrait du fichier, simplifié à l’extrême, sans macros, juste pour exposer la problématique.

  • En feuille 5 ou 14 on note des suites de nombres dans des colonnes avec une bordure.
  • (pour être complet) : de nouvelles données sont régulièrement ajoutées (dans les colonnes A,C,E,G,I,K,M) par insertion depuis le haut (insertion / décaler les cellules vers le bas)
  • Selon les données qui figurent dans les colonnes A,C,E,G,I,K,M je colore MANUELLEMENT en jaune ou en vert le nombre 0 ou le nombre 1 selon les critères qui suivent :
  • si le nombre qui précède dans la colonne avec bordure est le même : 0 coloré jaune (exemple : feuille 5, B7 est coloré en jaune car en A7 on a 3 ET une valeur identique en A8 AUSSI.
    Autre exemple pour un 0 coloré en jaune : toujours feuille 5 : 0 coloré jaune en J3 car en I3 ET juste en dessous en I4 on a la même valeur, soit 1
    Toujours pour illustrer, en revanche, toujours feuille 5, le 0 ne sera pas coloré en jaune en F11 car pas de valeur identique en E11 et E12.

  • pour ce qui concerne les cellules colorées en vert, ayant la valeur 1, le principe de « lecture » est le même. Exemple, feuille 5 : en D19 on a 1 coloré en vert car on a une valeur supérieure à 8 (C19) juste en dessous en C20, soit 9, avant qu’on ne retrouve la valeur 8 (en C21).
    Même situation, toujours feuille 5 : 1 coloré en vert en F4 car la valeur 5 s’intercale en E5 avant qu’on ne retrouve la valeur 4 (en E6).
    Vous aurez sans doute compris que, pour ces deux exemples de cellules colorées en vert, si on avait eu la valeur 8 en C20 on aurait eu 0 coloré en jaune en D19
    ET
    si on avait eu la valeur 4 en E5 on aurait eu une cellule colorée 0 jaune en F4

Espérant avoir été clair… :grinning:

Merci de m’avoir lu et… merci d’avance pour vos lumières éventuelles une nouvelle fois !

Ce sujet a été automatiquement fermé après 30 jours. Aucune réponse n’est permise dorénavant.