Compter nombre de cases d'1 couleur selon couleur case adjacente

Fermé
Julie - 28 mars 2017 à 16:42
JvDo Messages postés 1978 Date d'inscription mercredi 27 juillet 2005 Statut Membre Dernière intervention 28 septembre 2020 - 29 mars 2017 à 14:09
Bonjour,

Je cherche à créer une formule qui me permettrait de compter le nombre de cases roses pour chaque département (représentés par une couleur).

L’idée est de dire :

Pour les cases colonne A (département) de la même couleur que la case D3
COMPTABILISER les cellules roses dans la colonne B
Et écrire la somme de ces cellules (nombre de cellule) dans la case F3

J'ai essayé plusieurs combinaisons mais sans succès.

Ravie de lire vos propositions!

Lien vers le fichier:
https://www.dropbox.com/s/qquoi3aos81qhht/Table%20Example.xlsx?dl=0
A voir également:

3 réponses

Raymond PENTIER Messages postés 58731 Date d'inscription lundi 13 août 2007 Statut Contributeur Dernière intervention 23 novembre 2024 17 245
28 mars 2017 à 17:33
Bonjour.

Les formules ne peuvent pas reconnaître et gérer les couleurs.
Tu as donc le choix entre :
  • Obtenir les couleurs à l'aide de la Mise en forme conditionnelle
  • Ecrire une macro en VBA.

0
Bonjour,

Oui, il s'agit ici de créer une VBA.

J'ai précédemment créé les deux formules suivantes pour d'autres calculs, mais cela ne me permets pas de résoudre mon problème:


Function NbColor(ByRef plage As Range, Couleur As Byte) As Long
Dim c As Range
Dim nb As Long
nb = 0
For Each c In plage
If c.Interior.ColorIndex = Couleur Then
nb = nb + 1
End If
Next c
NbColor = nb
End Function

Function NbColorSameAs(ByRef plage As Range, ByRef Cellule As Range) As Long
NbColorSameAs = NbColor(plage, Cellule.Interior.ColorIndex)
End Function
0
JvDo Messages postés 1978 Date d'inscription mercredi 27 juillet 2005 Statut Membre Dernière intervention 28 septembre 2020 858
Modifié le 29 mars 2017 à 14:14
Bonjour,

Ajuste ton code :
Function NbColor(ByRef plage As Range, Couleur As Byte, Rose As Byte) As Long
    Dim c As Range
    Dim nb As Long
    nb = 0
    For Each c In plage
        If c.Interior.ColorIndex = Couleur And c.Offset(, 1).Interior.ColorIndex = Rose Then
            nb = nb + 1
        End If
    Next c
    NbColor = nb
End Function

Function NbColorSameAs(ByRef plage As Range, ByRef Cellule As Range, ByRef PinkRef As Range) As Long
    NbColorSameAs = NbColor(plage, Cellule.Interior.ColorIndex, PinkRef.Interior.ColorIndex)
End Function

en F3, tu écriras :
=NbColorSameAs($A$1:$A$12;D3;$D$1)


cordialement

edit : en D1, j'ai mis un fond de couleur rose.
0