Nombre de cellules contenant une certaine couleur

Anonyme
2020-05-17T14:31:33+00:00

Bonjour,

J'ai un tableau de saisies, qui colore les cellules en fonction de MFC.

Je voudrais connaître le nombre de cellules en fonction des couleurs, mais les fonctions classiques NB_SI_COULEUR et NO_COULEUR ne fonctionnent pas...

Auriez-vous une idée, à part utiliser les arguments de la MFC ?

Merci

Thierry

Microsoft 365 et Office | Excel | Pour la maison | Windows

Question verrouillée. Cette question a été migrée à partir de la Communauté Support Microsoft. Vous pouvez voter pour indiquer si elle est utile, mais vous ne pouvez pas ajouter de commentaires ou de réponses ni suivre la question.

0 commentaires Aucun commentaire

Réponse acceptée par l’auteur de la question

DanielCo 107.7K Points de réputation
2020-05-17T18:56:21+00:00

1- ça ne fonctionne que quand les cellules avec MFC et la fonction sont dans la même feuille

Tu voudrais une fonction qui fonctionne sur plusieurs feuilles ? Donne un exemple de ce qui ne fonctionne pas

2- la mise à jour n'est pas automatique quand je modifie le contenu qui agit sur la mise en forme conditionnel de la cellule

Essaie comme ça :

Function NB_COUL_COND(Plage As Range, Coul As Range)

  Dim C As Range, Num As Long

  Application.Volatile

  For Each C In Plage

    NB_COUL_COND = NB_COUL_COND - (CFColorMatches(C) = CFColorMatches(Coul))

  Next C

End Function

Daniel

Cette réponse a-t-elle été utile ?

0 commentaires Aucun commentaire

Réponse acceptée par l’auteur de la question

DanielCo 107.7K Points de réputation
2020-05-17T16:27:14+00:00

Bonjour,

Copié de stackoverflow.com, que je remercie. La fonction NB_COUL_COND a deux paramètres :

  • Plage : la plage de cellules à utiliser.
  • Coul : la cellule contenant la MFC à compter.

Par exemple :

=NB_COUL_COND(A1:A11;A2)

Les fonctions CFColorMatches et DFColor sont utilisées par la fonction principale.

Function NB_COUL_COND(Plage As Range, Coul As Range)

  Dim C As Range, Num As Long

  For Each C In Plage

    NB_COUL_COND = NB_COUL_COND - (CFColorMatches(C) = CFColorMatches(Coul))

  Next C

End Function

Function CFColorMatches(rng As Range)

    CFColorMatches = (rng.Parent.Evaluate("DFColor(""" & rng.Address & """)"))

End Function

Public Function DFColor(addr)

    DFColor = Range(addr).DisplayFormat.Interior.Color

End Function

Cordialement.

Daniel

Cette réponse a-t-elle été utile ?

0 commentaires Aucun commentaire

4 réponses supplémentaires

  1. Anonyme
    2020-05-18T14:36:55+00:00

    1- ça ne fonctionne que quand les cellules avec MFC et la fonction sont dans la même feuille

    Tu voudrais une fonction qui fonctionne sur plusieurs feuilles ? Donne un exemple de ce qui ne fonctionne pas

    2- la mise à jour n'est pas automatique quand je modifie le contenu qui agit sur la mise en forme conditionnel de la cellule

    Essaie comme ça :

    Function NB_COUL_COND(Plage As Range, Coul As Range)

      Dim C As Range, Num As Long

      Application.Volatile

      For Each C In Plage

        NB_COUL_COND = NB_COUL_COND - (CFColorMatches(C) = CFColorMatches(Coul))

      Next C

    End Function

    Daniel

    Bonjour Daniel,

    Pour le point numéro 2 ça fonctionne parfaitement merci.

    Concernant le point 1 :

    J'ai une "Feuil1" sur laquelle on saisit un certain nombre d’informations donc Plage fait référence à cet onglet

    Et sur une "Feuil2" je traite ces données et donc ma formule sur cette feuille est : =NB_COUL_COND('Feuil1'!D5:D517;$B20) avec Coul en B20 de cette "Feuil2"

    Amicalement

    Thierry

    Cette réponse a-t-elle été utile ?

    0 commentaires Aucun commentaire
  2. Anonyme
    2020-05-17T18:33:38+00:00

    Bonjour,

    Copié de stackoverflow.com, que je remercie. La fonction NB_COUL_COND a deux paramètres :

    • Plage : la plage de cellules à utiliser.
    • Coul : la cellule contenant la MFC à compter.

    Par exemple :

    =NB_COUL_COND(A1:A11;A2)

    Les fonctions CFColorMatches et DFColor sont utilisées par la fonction principale.

    Function NB_COUL_COND(Plage As Range, Coul As Range)

      Dim C As Range, Num As Long

      For Each C In Plage

        NB_COUL_COND = NB_COUL_COND - (CFColorMatches(C) = CFColorMatches(Coul))

      Next C

    End Function

    Function CFColorMatches(rng As Range)

        CFColorMatches = (rng.Parent.Evaluate("DFColor(""" & rng.Address & """)"))

    End Function

    Public Function DFColor(addr)

        DFColor = Range(addr).DisplayFormat.Interior.Color

    End Function

    Cordialement.

    Daniel

    Bonjour Daniel,

    Merci pour ta solution et merci aussi à @stackoverflow.com.

    ça permet effectivement de trouver le nombre de cellules en fonction des couleur de MFC, mais j'ai 2 problèmes :

    1- ça ne fonctionne que quand les cellules avec MFC et la fonction sont dans la même feuille

    2- la mise à jour n'est pas automatique quand je modifie le contenu qui agit sur la mise en forme conditionnel de la cellule

    Amicalement 

    Thierry

    Cette réponse a-t-elle été utile ?

    0 commentaires Aucun commentaire
  3. DanielCo 107.7K Points de réputation
    2020-05-17T16:26:56+00:00

    Bonjour,

    Copié de stackoverflow.com, que je remercie. La fonction NB_COUL_COND a deux paramètres :

    • Plage : la plage de cellules à utiliser.
    • Coul : la cellule contenant la MFC à compter.

    Par exemple :

    =NB_COUL_COND(A1:A11;A2)

    Les fonctions CFColorMatches et DFColor sont utilisées par la fonction principale.

    Function NB_COUL_COND(Plage As Range, Coul As Range)

      Dim C As Range, Num As Long

      For Each C In Plage

        NB_COUL_COND = NB_COUL_COND - (CFColorMatches(C) = CFColorMatches(Coul))

      Next C

    End Function

    Function CFColorMatches(rng As Range)

        CFColorMatches = (rng.Parent.Evaluate("DFColor(""" & rng.Address & """)"))

    End Function

    Public Function DFColor(addr)

        DFColor = Range(addr).DisplayFormat.Interior.Color

    End Function

    Cordialement.

    Daniel

    Cette réponse a-t-elle été utile ?

    0 commentaires Aucun commentaire