IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

compter Cellules de couleur


Sujet :

Macros et VBA Excel

  1. #1
    Membre régulier
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2015
    Messages
    211
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2015
    Messages : 211
    Points : 87
    Points
    87
    Par défaut compter Cellules de couleur
    Bonjour à toutes et à tous,

    Voici, ci-dessous, ce bout de code que j'ai trouvé ici et sur un autre forum mais que je n'arrive pas à adapter.


    Voici mon problème : prenons par exemple la colonne G
    sur la plage ("G2:G97") , je choisis manuellement un fond de couleur ( parmi 5 ) suivant si la personne ( Nom : colonne A et Prénom : colonne B ) est dans tel groupe ou tel groupe pour telle séance.
    Remarque : la colonne G correspond à la séance 1,la colonne H correspond à la séance 2, etc...


    --> pour la plage ("G2:G97")
    Je voudrais qu'en cellule ("G101"), s'affiche le nombre de fois où la couleur 10027212 apparaît ( rose )
    en ("G102") s'affiche le nombre de fois où la couleur 5287936 apparaît ( vert )
    en ("G103") s'affiche le nombre de fois où la couleur 65535 apparaît ( jaune )
    en ("G104") s'affiche le nombre de fois où la couleur 49407 apparaît ( orange )
    en ("G105") s'affiche le nombre de fois où la couleur 15773696 apparaît ( bleu )

    Question : Comment remplacer "Plage" par ("G2:G97") puis par ("H2:H97"),etc..... ( déjà avec seulement ("G2:G97") je n'y arrive pas ) ?
    Que signifie " Application.volatile" ?





    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    Function NbreCellulesCouleur(Plage As Range, Couleur As Byte) As Long
    'Compter le nombre de cellules d'une couleur donnée dans une plage donnée
    'Plage: plage de cellules à inspecter
    'Couleur: valeur de la couleur cherchée
     
    Application.Volatile
     
    Dim Cellule As Range
     
    For Each Cellule In Plage
        If Cellule.Interior.ColorIndex = Couleur And Not IsEmpty(Cellule) Then
            NbreCellulesCouleur = NbreCellulesCouleur + 1
        End If
    Next Cellule
     
    End Function


    Merci d'avance.


    Novice72

  2. #2
    Membre actif
    Homme Profil pro
    Ancien Etudiant
    Inscrit en
    Janvier 2019
    Messages
    152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Ancien Etudiant

    Informations forums :
    Inscription : Janvier 2019
    Messages : 152
    Points : 224
    Points
    224
    Par défaut
    Bonjour,

    le code présenté est celui d'une fonction personnalisée qui s'utilise comme une fonction native d'Excel.

    la modification des plages et des couleurs ne s'effectue pas dans le code mais dans l'écriture de la fonction dans la cellule.

    Par exemple, pour la plage ("G2:G97"):

    en G102 écrire : =NbreCellulesCouleur(G2:G97;5287936) puis tirer vers le bas; les adresses de plage se modifieront comme avec une formule classique.

    Application.volatile indique à la fonction de "se" recalculer à la modification de n'importe quelle cellule et notamment la couleur de fond.

    Il y a cependant une modification à apporter à la fonction qui utilise Cellule.Interior.ColorIndex
    Comme vous voulez utiliser les N° de couleur, il faudra l'instruction:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     If Cellule.Interior.Color = Couleur  Then
    J'ai supprimé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    And Not IsEmpty(Cellule)
    car dans le cas présent, que la cellule soit vide ou pleine, il faudra la compter.


    A+

    Edit : Le code d'une fonction personnalisée doit être copié dans un module standard.

  3. #3
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Citation Envoyé par Algoplus Voir le message
    Application.volatile indique à la fonction de "se" recalculer à la modification de n'importe quelle cellule et notamment la couleur de fond.
    Non, Excel ne considère pas la modification de la couleur de fond comme pouvant influer sur le résultat d'une fonction donc il ne recalcule pas.

    L'utilisation de couleur comme donnée d'entrée pour Excel est un marronnier de ce forum.
    La conclusion est toujours la même : ce n'est pas fiable, surtout dans une fonction personnalisée, quelle que soit la méthode utilisée.

    Petite expérience pour le prouver.
    Tu mets dans un module la fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Function couleur(plage As Range) As Long
       Application.Volatile
       couleur = plage.Interior.Color
    End Function
    Dans une feuille de calcul, tu mets A1 en rouge et A2 en jaune.
    En B1, tu mets la fonction =couleur(A1) et tu copies B1 en B2.
    Jusque-là, tout va bien, la référence des couleur est bien écrite.

    Maintenant, tu passes A2 en rouge et tu peux constater que la valeur de B2 ne change pas. A1 et A2 sont de même couleur mais B1 et B2 ont des valeurs différentes, malgré ma présence de Application.Volatile dans la fonctions.
    CQFD
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  4. #4
    Membre actif
    Homme Profil pro
    Ancien Etudiant
    Inscrit en
    Janvier 2019
    Messages
    152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Ancien Etudiant

    Informations forums :
    Inscription : Janvier 2019
    Messages : 152
    Points : 224
    Points
    224
    Par défaut
    J'ai usé d'un raccourci en disant "recalculer à la modification de n'importe quelle cellule et notamment la couleur de fond."

    Effectivement ce n'est pas le changement de couleur de fond, mais le fait d' "entrer" dans une cellule qui sera pris en compte par la fonction ayant l'instruction application.volatile.

    A priori, il existe dans les versions récentes d'Excel (je suis toujours sous XL2003) des fonctions natives qui permettent des "calculs" en fonction de la couleurs de fond. Sont-elles plus fiables ?

  5. #5
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Citation Envoyé par Algoplus Voir le message
    A priori, il existe dans les versions récentes d'Excel (je suis toujours sous XL2003) des fonctions natives qui permettent des "calculs" en fonction de la couleurs de fond. Sont-elles plus fiables ?
    Je suis sûr que ça n'existe pas en 2013.
    Je viens de scruter les fonctions "post-2013" et je n'ai rien vu qui corresponde à ça.
    Pour ceux qui veulent vérifier par eux-mêmes : https://support.office.com/fr-FR/art...6-C6D90033E188

    Si tu veux parler de l'option "couleur" de la fonction CELLULE(), elle ne fait pas référence à la couleur de fond mais au second paramètre d'un format Nombre.
    https://support.office.com/fr-FR/art...f-955d67c2b2cf
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  6. #6
    Membre actif
    Homme Profil pro
    Ancien Etudiant
    Inscrit en
    Janvier 2019
    Messages
    152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Ancien Etudiant

    Informations forums :
    Inscription : Janvier 2019
    Messages : 152
    Points : 224
    Points
    224
    Par défaut
    J'avais cru lire cette info sur je ne sais quel forum.

    Par contre j'ai retrouvé dans mes archives un lien qui donne une astuce permettant (au moins depuis XL2003) d'afficher la couleur (colorindex) d'une cellule par formule : en utilisant CELLULE()

  7. #7
    Expert confirmé Avatar de Patrice740
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2007
    Messages
    2 475
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 475
    Points : 5 630
    Points
    5 630
    Par défaut
    @Algoplus :
    Citation Envoyé par Menhir Voir le message
    JSi tu veux parler de l'option "couleur" de la fonction CELLULE(), elle ne fait pas référence à la couleur de fond mais au second paramètre d'un format Nombre.
    https://support.office.com/fr-FR/art...f-955d67c2b2cf
    Citation Envoyé par Algoplus Voir le message
    Par contre j'ai retrouvé dans mes archives un lien qui donne une astuce permettant (au moins depuis XL2003) d'afficher la couleur (colorindex) d'une cellule par formule : en utilisant CELLULE()
    Comme l'a dit Menhir () c'est pas le ColorIndex, c'est la couleur du format numérique, cf l'aide :
    "couleur" la valeur 1 si la cellule est mise en forme en couleur pour les valeurs négatives, sinon renvoie 0 (zéro).
    Cordialement,
    Patrice
    Personne ne peut détenir tout le savoir, c'est pour ça qu'on le partage.

    Pour dire merci, cliquer sur et quand la discussion est finie, penser à cliquer sur

  8. #8
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    En fait, ça n'indique même pas la couleur.
    Ca indique juste "1" si dans le format Nombre, la couleurs des positifs et des négatifs est différente ("0" dans tous les autres cas).
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  9. #9
    Membre actif
    Homme Profil pro
    Ancien Etudiant
    Inscrit en
    Janvier 2019
    Messages
    152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Ancien Etudiant

    Informations forums :
    Inscription : Janvier 2019
    Messages : 152
    Points : 224
    Points
    224
    Par défaut
    J'ai bien compris que =CELLULE("Couleur";C2) ne ramenait pas la couleur de cellule!

    En utilisant la méthode du lien à base de CELLULE() ( il n'y a pas l'utilisation de "couleur") j'obtiens le même résultat qu'avec ce bout de code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MsgBox Selection.Interior.ColorIndex
    c'est pour ça que je parlais de ColorIndex

  10. #10
    Membre expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 267
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 267
    Points : 3 663
    Points
    3 663
    Par défaut
    Bonjour,

    Remarque : la colonne G correspond à la séance 1,la colonne H correspond à la séance 2, etc...
    tu peux te contenter d'y mettre un "x" (ou le nom selon comment est ta feuille).
    Qui te servira à mettre la couleur avec une MFC, et tu n'as plus qu'à compter tes "x" avec un nbval().
    Ca sera toujours à jour sans à avoir F9 à faire.
    eric

  11. #11
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Citation Envoyé par eriiic Voir le message
    tu peux te contenter d'y mettre un "x" (ou le nom selon comment est ta feuille).
    Qui te servira à mettre la couleur avec une MFC, et tu n'as plus qu'à compter tes "x" avec un nbval().
    Pour ajouter un petit complément à la solution d'eriiic ( ), si ta MFC met de la même couleur le texte et le fond de cellule, le "x" disparaitra (visuellement) et l'illusion sera parfaite.
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

Discussions similaires

  1. Compter le nombre de cellules par couleur de fond
    Par natachad dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 20/10/2011, 10h49
  2. [XL-2000] Compter le nombre de cellules par couleur de fond
    Par franky7 dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 09/08/2011, 12h22
  3. [XL-2007] Compter le nombre de cellules en couleur
    Par Nico.C dans le forum Excel
    Réponses: 3
    Dernier message: 28/05/2009, 08h26
  4. Compter lignes selon couleur de la cellule
    Par jonathanoudelet dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 06/10/2008, 17h55
  5. Compter des cellules de couleurs différentes
    Par solorac dans le forum Excel
    Réponses: 3
    Dernier message: 13/06/2007, 11h24

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo