Comptage cellule de couleurs en vba

Résolu
Bonjour à tous,

Je cherche une macro vba (comptage de cellule ) qui permette de faire ressortir la couleur majoritaire d'un ensemble de cellules.

Ex : si dans les cellules C5 à L5 j'ai 4 cellules vertes et 3 cellules bleues et 1 rouge le résultat doit être vert.

Autre question est il possible d'exclure de ce type de calcul une des couleur ?

Merci par avance pour vos idées et conseils :-)

Configuration: Windows / Firefox 78.0

3 réponses

  1. Bonjour,

    Merci pour ton aide.

    Comme convenu, voici le lien vers le fichier https://www.cjoint.com/c/JGykzf2XKhO.

    Cordialement
    0
    1. Contributeur
      je ne vois rien dans ton fichier qui permette de mieux comprendre ta demande.
      la fonction proposée te retourne la couleur la plus présente dans un ensemble de cellules.
      0
    2. @yg_beBonjour,

      Désolée de vous solliciter de nouveau.

      Comme je l'indiquais je ne maîtrise pas du tout VBA.

      Pouvez-vous m'indiquer comment intégrer la macro communiquée par ccm81 dans mon fichier cela me rendrait grand service.

      Cordialement
      0
    3. Contributeur
      @Dautomneavant tout, il serait utile que tu expliques précisément ce que tu veux obtenir.
      "faire ressortir la couleur" et "le résultat doit être vert", cela ne veut rien dire.
      essaie d'être précis et concret.
      "la macro communiquée par ccm81": c'est quoi et où?
      prend du temps pour réfléchir et bien expliquer, peut-être en montrant un exemple du résultat attendu.
      0
    4. @yg_bePour faire simple peux-tu juste m'indiquer où je dois coller le code que m'a communiqué ccm81 pour que je puisse le tester. Je n'arrive pas à le faire fonctionner quand je le colle à ma macro n°18.

      Function ccc() As Long
      Dim rg As Range, cl As Range, colors As Scripting.Dictionary, col As Long, maxnb As Long, colmax As Long, koul
      Set rg = Range("c5:l5")
      Set colors = New Scripting.Dictionary
      For Each cl In rg
      col = cl.Interior.Color
      Select Case col
      Case vbWhite, 8421504:
      Case Else:
      If colors.Exists(col) Then
      colors(col) = colors(col) + 1
      Else
      Call colors.Add(col, 1)
      End If

      End Select
      Next cl
      colmax = 0
      maxnb = 0
      For Each koul In colors.keys
      If colors(koul) > maxnb Then
      maxnb = colors(koul)
      colmax = koul
      End If
      Next koul
      ccc = colmax
      End Function

      Merci par avance :-)
      0
  2. Bonjour à tous les deux

    Pas très clair !
    Peux tu envoyer un bout de fichier sur cjoint.com et joindre le lien obtenu à ton prochain message. N'oublies pas d'y ajouter des explications et des exemples de résultat attendu
    1) Tu vas dans https://www.cjoint.com/
    2) Tu cliques sur [Parcourir] pour sélectionner ton fichier
    3) Tu descends en bas de la page pour cliquer sur [Créer le lien Cjoint]
    4) Au bout de quelques secondes la deuxième page s'affiche, avec le lien
    en bleu souligné ; tu le sélectionnes et tu fais "Copier"
    5) Tu reviens dans ta discussion sur CCM, et dans ton message de réponse tu fais "Coller".

    Cdlmnt
    0
    1. Contributeur
      bonjour,
      en général, une macro se crée, elle ne se trouve pas.
      0
      1. Contributeur
        un exemple, en excluant le blanc et le gris:
        Function ccc() As Long
        Dim rg As Range, cl As Range, colors As Scripting.Dictionary, col As Long, maxnb As Long, colmax As Long, koul
        Set rg = Range("c5:l5")
        Set colors = New Scripting.Dictionary
        For Each cl In rg
            col = cl.Interior.Color
            Select Case col
                Case vbWhite, 8421504:
                Case Else:
                    If colors.Exists(col) Then
                        colors(col) = colors(col) + 1
                    Else
                        Call colors.Add(col, 1)
                    End If
                        
            End Select
        Next cl
        colmax = 0
        maxnb = 0
        For Each koul In colors.keys
            If colors(koul) > maxnb Then
                maxnb = colors(koul)
                colmax = koul
            End If
        Next koul
        ccc = colmax
        End Function
        0