formateur informatique

Compter les couleurs d'une mise en forme conditionnelle

Accueil  >  Bureautique  >  Excel  >  Excel VBA  >  Compter les couleurs d'une mise en forme conditionnelle
Livres à télécharger


Pour partager cette vidéo sur les réseaux sociaux ou sur un site, voici son url :


Inscription Newsletter    Abonner à Youtube    Vidéos astuces Instagram
Sujets que vous pourriez aussi aimer :


Compter les couleurs - Mise en forme conditionnelle

Nous avions déjà avancé des solutions pour compter les cellules en fonction des couleurs qu'elles portaient, avec et sans VBA Excel. Mais dans tous les cas, ces cellules arboraient des mises en forme statiques. Nous n'avions pas encore avancé de solution pour compter les cellules parées de couleurs dynamiques, capables de varier en fonction du contexte. En d'autres termes, nous n'avions pas encore démontré comment compter les cellules surlignées par une règle de mise en forme conditionnelle.

Compter les couleurs des mises en forme conditionnelles par fonction VBA Excel

Sur l'exemple illustré par la capture, nous travaillons sur un tableau des chiffres d'affaires réalisés par les commerciaux d'une entreprise. Selon les résultats, les lignes surgissent dans des couleurs différentes et significatives pour en faciliter l'interprétation. Plus la couleur tire vers le vert, plus les données sont considérées comme satisfaisantes. Inversement, plus elle tire vers le rouge, plus les résultats sont considérés comme alarmants.

Ces couleurs sont dirigées par une grille de critères placée sur la droite du tableau. Ce sont des règles de mises en forme conditionnelle qui les appliquent. En regard de ces critères colorés, c'est l'intervention d'une fonction VBA Excel à construire, qui doit dénombrer les ventes appartenant à ces différentes tranches, en fonction des couleurs que portent leurs lignes respectives.

Classeur Excel à télécharger
Pour développer cette nouvelle solution VBA Excel, nous suggérons de baser l'étude sur ce tableau des chiffres d'affaires, avec ces règles de mises en forme prédéfinies.
  • Télécharger le classeur nombre-couleurs-mfc.xlsm en cliquant sur ce lien,
  • Cliquer droit sur le fichier réceptionné,
  • En bas du menu contextuel, choisir la commande Propriétés,
  • Dans la boîte de dialogue, cocher la case Débloquer et valider par Ok,
  • Puis, double cliquer sur le fichier déverrouillé pour l'ouvrir dans Excel,
Nous retrouvons bien le tableau des chiffres colorés par des règles de mise en forme conditionnelle appliquant les critères émis en colonne G. Pour l'instant, aucun décompte de ces couleurs n'est à observer en colonne F voisine. C'est le rôle de la fonction VBA que nous devons construire.

Compter sur les couleurs avec une fonction VBA Excel

Ces règles, vous pouvez les consulter en cliquant tout d'abord dans l'une des cellules du tableau, par exemple B4. Ensuite, dans le ruban Accueil, il convient de cliquer sur le bouton Mise enforme conditionnelle, puis en bas des propositions de choisir l'option Gérer les règles.

Règles de mise en forme conditionnelle Excel pour compter les couleurs par paliers numériques

Créer les fonctions
Nous allons le découvrir, l'astuce est très particulière. Elle consiste à contourner un problème de taille. C'est la propriété DisplayFormat d'un objet de type Range qui permet de récupérer le code couleur d'une mise en forme conditionnelle (DisplayFormat.Interior.Color). Mais intégrée dans une fonction, on ne peut pas l'exploiter, Elle retourne une erreur. Nous proposons néanmoins de la créer.
  • Réaliser le raccourci clavier ALT + F11 pour basculer dans l'éditeur VBA Excel,
  • Dans l'explorateur de projet sur la gauche, double cliquer sur l'élément Module1,
  • Dans la feuille de code au centre de l'écran, créer la fonction couleur, comme suit :
Function couleur(cellule As String)
couleur = Range(cellule).DisplayFormat.Interior.Color
End Function


Nous récupérons donc le code couleur de MEFC de la cellule passée en paramètre. Mais, l'aide en ligne est très claire à ce sujet, utilisée seule, elle retournera le message d'erreur #VALEUR.
  • Revenir sur la feuille Excel (ALT + Tab),
  • Puis, dans une cellule vide, par exemple G11, taper et valider la formule suivante :
=couleur("D4")

Fonction VBA Excel à évaluer pour compter sur les couleurs de fond de la MEFC

Comme nous l'annoncions, la fonction ne répond pas favorablement. Elle fonctionnera par évaluation. Nous le comprendrons. Nous allons commencer par l'adapter, pour qu'elle soit plus portable, comme suit :

Private Function couleur(cellule As String, feuille As String)
couleur = Sheets(feuille).Range(cellule).DisplayFormat.Interior.Color
End Function


Cette fonction n'est pas amenée à être utilisée directement. Elle est destinée à être appelée par une autre fonction. Donc, nous la rendons tout d'abord privée (Private). Puis, nous demandons une nouvelle précision en second paramètre, sur le nom de la feuille de destination. Ainsi, nous pourrons l'exploiter partout. Enfin, dans le code, nous descendons dans la hiérarchie (de la feuille à la cellule) pour atteindre ses attributs conditionnels de format.

Compter les couleurs conditionnelles
Ensuite et comme nous l'avons annoncé, l'idée consiste à l'appeler depuis une autre fonction pour évaluer son résultat grâce à la fonction Evaluate. Nous devons lui passer la référence de la feuille et de la cellule en texte (String).
  • Sous la première fonction, créer la fonction cpteCouleur, comme suit :
Function cpteCouleur(colonne As Range, cellule As Range) As Integer
Dim laCouleur: Dim chaqueCellule: Dim nb As Byte

Application.Volatile
nb = 0

End Function


Nous la typons comme un entier (As Integer). Son rôle est effectivement de compter les cellules d'une même couleur. Nous la signons avec deux paramètres en attente. Le premier (colonne) représente la plage sur laquelle ce décompte doit être réalisé. Le second (cellule) représente la cellule de référence, portant la couleur à dénombrer dans la plage.

Puis, à l'intérieur de la fonction, nous déclarons trois nouvelles variables. La première n'est pas typée (laCouleur). C'est elle qui doit réceptionner l'information de couleur sur les cellules à évaluer. Nous exploiterons la variable chaqueCellule pour parcourir chaque case à analyser dans la plage passée en premier paramètre. La variable nb, déclarée comme un entier court (Byte), devra être consolidée à chaque couleur concordante trouvée.

Evaluer chaque cellule
Désormais, nous devons engager la boucle dont nous parlions pour évaluer chaque cellule analysée dans la plage souhaitée.
  • A la suite du code, ajouter les instructions VBA suivantes :
...
For Each chaqueCellule In colonne
laCouleur = Evaluate("couleur(""" & chaqueCellule.Address & """,""" & chaqueCellule.Worksheet.Name & """)")

Next chaqueCellule
...


Nous engageons notre objet chaqueCellule dans la plage (colonne) passée en premier paramètre. C'est ainsi qu'il prend son type et devient un objet Range, représentant les cellules une à une, dans cette boucle For Each. C'est alors que nous engageons la fonction Evaluate pour appeler la fonction privée couleur. Grâce à la propriété Address de l'objet chaqueCellule, nous lui passons les coordonnées de la cellule en cours d'analyse, en premier paramètre. Mais attention, les côtes sont triplées ("""). En effet, l'expression d'évaluation est déjà écrite entre doubles côtes et les paramètres sont textuels. Ils doivent eux aussi être encadrés. C'est cette astuce de syntaxe qui permet d'y parvenir. En second paramètre, nous lui passons le nom de la feuille cible (Worksheet.Name), lui aussi encadré de doubles côtes, selon la même technique.

Comparer les couleurs
A chaque passage dans cette boucle, nous devons comparer la couleur conditionnelle portée par la cellule en cours d'analyse avec celle de la cellule de référence passée en second paramètre de notre fonction appelante. Donc, une instruction conditionnelle s'impose pour réaliser le test.
  • A la suite du code de la boucle, créer l'instruction conditionnelle suivante :
...
If (laCouleur = cellule.Interior.Color) Then
nb = nb + 1
End If
...


Si la couleur dynamique pour la cellule en cours d'analyse équivaut à celle de la cellule de référence, nous incrémentons la variable nb (nb = nb + 1), pour réaliser le décompte final dans ce processus récursif.

Retourner le résultat
A l'issue du traitement, cette fonction doit retourner la valeur de son comptage, par son propre nom, comme vous le savez. Donc, nous devons l'affecter.
  • Après la boucle, créer l'affectation suivante :
...
Next chaqueCellule

cpteCouleur = nb

End Function
...


Nous pouvons maintenant tester notre création de fonctions imbriquées.
  • Revenir sur la feuille Excel (ALT + Tab),
  • Sélectionner la première case du tableau de synthèse en cliquant sur la cellule F4,
  • Taper le symbole égal (=) pour initier la syntaxe de la formule,
  • Appeler la nouvelle fonction par son nom, suivie d'une parenthèse ouvrante : cpteCouleur(,
  • Désigner par exemple la dernière colonne du tableau, soit la plage de cellules D4:D51,
  • Puis, la figer en enfonçant la touche F4 du clavier, ce qui donne : $D$4:$D$51,
En effet, nous allons répliquer la formule sur les lignes du dessous. Or, les bornes de la plage d'analyse ne doivent pas bouger.
  • Taper un point-virgule (;) pour passer dans l'argument de la cellule de référence,
  • Cliquer sur la cellule de couleur voisine à la cellule de la formule, soit : G4,
Cette fois, nous ne devons pas la figer. Au fil de la réplication, ce sont les autres cellules de couleur qui devront servir de référence, tour à tour.
  • Fermer la parenthèse de la fonction cpteCouleur,
  • Puis, valider la formule par le raccourci clavier CTRL + Entrée,
Ainsi, nous conservons active la cellule du résultat. Et à ce propos, il indique qu'une seule personne est sanctionnée par cette couleur rouge. Vous pouvez très facilement le vérifier en faisant défiler le tableau des chiffres d'affaires.
  • Double cliquer sur la poignée du résultat pour répandre la logique sur les lignes du dessous,
Comme vous pouvez l'apprécier, notre nouvelle fonction est effectivement en capacité de compter les cellules de couleurs, impliquées dans des mises en forme conditionnelles. Bien entendu et pour finir, si vous modifiez des chiffres dans le tableau d'origine pour traverser des catégories, vous constatez que les résultats de notre formule, s'actualisent aussitôt.

 
Sur Facebook
Sur Youtube
Les livres
Contact
Mentions légales



Abonnement à la chaîne Youtube
Partager la formation
Partager sur Facebook
Partager sur Twitter
Partager sur LinkedIn