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

Julie -  
JvDo Messages postés 1924 Date d'inscription   Statut Membre Dernière intervention   -
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

3 réponses

  1. Raymond PENTIER Messages postés 58211 Date d'inscription   Statut Contributeur Dernière intervention   17 480
     
    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
  2. Julie
     
    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
  3. JvDo Messages postés 1924 Date d'inscription   Statut Membre Dernière intervention   859
     
    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