Comptage cellule de couleurs en vba

Résolu
Dautomne Messages postés 21 Statut Membre -  
yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   -
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. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 588
     
    bonjour,
    en général, une macro se crée, elle ne se trouve pas.
    0
    1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      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
  2. ccm81 Messages postés 11033 Statut Membre 2 434
     
    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
  3. Dautomne Messages postés 21 Statut Membre
     
    Bonjour,

    Merci pour ton aide.

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

    Cordialement
    0
    1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      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. Dautomne Messages postés 21 Statut Membre > yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention  
       
      Bonjour,

      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. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588 > Dautomne Messages postés 21 Statut Membre
       
      avant 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. Dautomne Messages postés 21 Statut Membre > yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention  
       
      Pour 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
    5. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588 > Dautomne Messages postés 21 Statut Membre
       
      cela te semble certainement plus simple de ne pas prendre le temps de répondre à mes questions.
      je ne pourrai cependant pas t'aider si tu n'y réponds pas.
      de plus, peux-tu prendre le temps de comprendre et d'appliquer ceci: https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
      0