Comment réaliser une somme des cellules en fonction de leur couleur sur Excel ? La fonction SOMMESICOULEUR()

Guide « 108 astuces pour grands débutants sur Excel ! » Offert
Booster votre productivité en téléchargeant gratuitement votre ebook PDF des meilleures astuces pour les débutants et les pros d'Excel
Excel formation - 00 Astuces - 100
 

Dans ce tutoriel, je vais vous montrer comment réaliser la somme des valeurs des cellules en fonction de leur couleur de fond.

 

Téléchargement

Vous pouvez télécharger le fichier d'exemple de cet article en cliquant sur le lien suivant :

This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.
 

 

Tutoriel Vidéo

 

Partie 1 : Comment créer une SOMME en fonction de la couleur de fond des cellules sur Excel ?

 

Partie 2 : Comment calculer toutes sortes de calculs (NB, MOYENNE, MIN, MAX...) en fonction de la couleur de fond des cellules sur Excel ?

 

1. Introduction

Comme nous venons de le voir dans l’introduction de la vidéo, nous allons voir comment calculer la somme des cellules en fonction de la couleur qui est affectée à leur fond :

Excel formation - somme couleur - 01

Malheureusement, Excel ne propose pas de fonction qui pourrait nous permettre de réaliser cette opération directement.

Et à moi d’avoir le courage d’effectuer ces calculs à la main, nous allons devoir créer une fonction personnalisée en VBA :

Excel formation - somme couleur - 02

 

2. Comment créer une fonction personnalisée en VBA ?

Et pour cela, la première étape va consister à lancer VBE (Visual Basic Editor), qui est une petite application intégrée avec chaque application de la suite Office afin de pouvoir créer des macro-commandes ou des fonctions personnalisées créées en VBA.

La méthode la plus rapide pour lancer VBE consiste à utiliser le raccourci clavier [Alt]+[F11] ;

Excel formation - somme couleur - 03

Une fois VBE lancé, directement dans le projet en cours, nous pouvons insérer un nouveau module en nous rendant dans le menu Insertion > Module :

Excel formation - somme couleur - 04

Un module est feuille de saisie de code.

Ensuite, pour créer une fonction personnalisée, nous utilisons le mot clé Function, suivi du nom que nous souhaitons donner à cette fonction, par exemple SOMMECOULEUR :

Function SOMMECOULEUR() 
 
End Function 

Lorsque nous validons la création de la fonction, en appuyant sur la touche [Entrée] du clavier, nous pouvons constater deux choses :

  • Tout d’abord, VBE ajoute automatiquement des parenthèses vides, qui nous permettront comme nous le verrons juste après de saisir un ou plusieurs arguments à notre fonction
  • Ensuite, VBE a également ajouté la ligne End Function pour marquer la fin de la fonction. Toutes les lignes de code que nous saisirons entre ces deux lignes seront ainsi exécutées à chaque fois que nous lancerons la fonction

Comme nous venons de le voir, nous pouvons insérer un argument à la fonction en le saisissant entre parenthèses.

 

3. La fonction SOMMESICOULEUR() : effectuer une somme selon la couleur de fond des cellules

Nous allons justement avoir besoin d’un argument pour préciser à la fonction sur quelles cellules nous allons souhaiter effectuer cette extraction :

Function SOMMECOULEUR(cellules As Range)
 
End Function 

Nous créons cet argument nommé cellules (au pluriel) que nous typons en tant que Range, c’est-à-dire que celui-ci va permettre de gérer des plages de cellules.

Ensuite, pour obtenir la couleur de comparaison qui va nous servir de critère pour sélectionner les cellules, nous allons nous reposer sur la couleur de la cellule active.

En VBA, pour obtenir l’objet Range correspond à la cellule qui a appelé la fonction, nous pouvons utiliser l’objet Application.Caller.

Une fois que nous avons appelé cet objet, nous pouvons récupérer la couleur de fond en appelant la propriété Interior.Color.

Par exemple, pour que la couleur nous retourne la couleur de la cellule, nous utiliserions le code :

Function SOMMECOULEUR(cellules As Range)
    SOMMECOULEUR = Application.Caller.Interior.Color
End Function 

Maintenant, le but de la fonction va être de passer en revue toutes les cellules de la plage cellules afin d’additionner les valeurs de toutes les cellules pour lesquelles la couleur de fond est la même que celle de la cellule Application.Caller.

Pour cela, nous commençons par créer une variable que nous appelons total et que nous typons en tant que Double, c’est-à-dire comme un grand nombre décimal :

    dim total as Double

Puis, pour passer toutes les cellules données en argument en revue, nous allons utiliser une autre variable que nous appelons cellule (au singulier cette fois-ci) et une boucle For Each

    Dim cellule As Range
    
    For Each cellule In cellules
    Next

Il ne reste plus qu’à comparer la couleur de fond de la cellule identifié par la variable cellule et celle de la cellule récupérée par Application.Caller, et lorsque ces deux couleurs sont égales, alors nous pourrons ajouter le résultat correspond à la variable total :

        If Application.Caller.Interior.Color  = cellule.Interior.Color Then
            total = total + cellule
        endif

Et enfin, pour terminer notre fonction, nous retournons à la fonction la valeur de la variable total :

    SOMMECOULEUR = total

Excel formation - somme couleur - 05

Et voilà, notre fonction personnalisée est maintenant tout à fait fonctionnelle.

 

4. Comment rendre dynamique une fonction personnalisée ?

Par contre, si nous changeons la couleur de fond de l’une des cellules, nous pourrons constater que le résultat restera inchangé :

Excel formation - somme couleur - 06

Pour corriger ce problème, nous devrons simplement rendre la fonction dynamique en ajoutant l’instruction Application.Volatile au tout début de la fonction :

Function SOMMECOULEUR(cellules As Range)
    Application.Volatile
    …
End Function 

Il suffit maintenant de revenir sur la feuille de calcul, et d’appuyer sur la touche [F9] pour actualiser le résultat de la fonction :

Excel formation - somme couleur - 07

 

5. Comment effectuer des calculs en fonction de leur couleur sur Excel ? (SOMME, MOYENNE, NB, MAX, MIN…)

Maintenant que nous avons découvert une méthode permettant de calculer la somme de plusieurs cellules, en fonction de leur couleur de fond, voyons comment améliorer cette la fonction personnalisée, afin de pouvoir réaliser toutes sortes de calculs comme un calcul de moyenne, le dénombrement des cellules de même couleur, la détermination de la valeur maximale ou minimale

Et pour cela, nous allons pouvoir nous reposer sur l’utilisation d’une fonction Excel peu utilisée, mais que nous avions déjà découverte dans un tutoriel précédent : la fonction SOUS.TOTAL().

 

   5.1. Obtenir la plage des cellules correspondantes

 

Pour rappel, la fonction SOUS.TOTAL() attend deux arguments :

=SOUS.TOTAL(no_fonction;réf1;…)

Où :

  • No_fonction : correspond au type d’opération à mettre en place dans le sous-total :

Excel formation - somme couleur - p2 - 01

  • Réf1, réf2,… il s’agit ici de venir saisir les références à inclure dans le calcul du sous-total. Il est possible de renseigner entre 1 et 254 références.

Les fonctions sont réunies dans deux groupes :

  • De 1 à 11
  • Et de 101 à 111, la différence avec le premier groupe c’est qu’ici le calcul ignore les cellules masquées (attention, les cellules filtrées par un filtre classique seront toujours exclues)

no_fonction

Fonction

1 ou 101

MOYENNE

2 ou 102

NB

3 ou 103

NBVAL

4 ou 104

MAX

5 ou 105

MIN

6 ou 106

PRODUIT

7 ou 107

ECARTYPE

8 ou 108

ECARTYPEP

9 ou 109

SOMME

10 ou 110

VAR

11 ou 111

VAR.P

 

Dans notre exemple, pour récupérer le montant des ventes réalisées par magasin, nous allons vouloir utiliser la fonction SOMME.

La première chose à faire va donc consister à obtenir une variable de type Range dans laquelle nous allons venir stocker la plage de toutes les cellules pour lesquelles la couleur de fond correspond à celle de la cellule appelante.

Nous allons donc partir de la fonction SOMMESICOULEUR que nous avions développée dans la partie précédente.

Nous allons commencer par remplacer la variable total que nous avions typée en tant Double par une variable que nous appellerons plage et que nous typerons logiquement en tant que Range.

La ligne suivante :

    Dim total As Double 

Devient ainsi :

    Dim plage As Range 

La seule difficulté de ce tutoriel sera donc d’alimenter cette variable plage en venant y intégrer toutes les cellules correspondantes au critère.

Pour cela, nous allons pouvoir utiliser la fonction VBA UNION() qui permet comme nous l’avions vu dans un tutoriel précédent de combiner deux plages de cellules pour n’en former qu’une seule.

Nous modifions donc l’intérieur de la boucle :

    For Each cellule In cellules
        If cellule.Interior.Color =  Application.Caller.Interior.Color Then
            total = total + cellule
        End If
    Next

Par :

    For Each cellule In cellules
        If cellule.Interior.Color =  Application.Caller.Interior.Color Then
            Set plage = Union(plage, cellule)
        End If
    Next

Ce qui nous permet d’ajouter la plage cellule à la suite de la plage plage.

Ici, nous devons être vigilants sur deux points :

  • En effet, étant donné qu’ici nous manipulons un objet, et non plus une simple variable, nous devons utiliser le mot clé Set pour redéfinir l’objet plage
  • Ensuite, il faut savoir que pour utiliser la fonction Union, il est nécessaire que les deux plages contiennent au moins une cellule sous peine de générer une erreur.

Nous devons donc effectuer un test avant de pouvoir utiliser la fonction Union comme nous venons de le faire.

Pour cela, nous regardons si l’objet plage est égal à Nothing, afin de pouvoir lui affecter directement la cellule cellule, et dans le cas contraire, nous pourrons utiliser la fonction UNION() comme nous venons de le voir :

            If plage Is Nothing Then
                Set plage = cellule
            Else
                Set plage = Union(plage,  cellule)
            End If

 

   5.2. Utiliser la fonction SOUS.TOTAL en VBA

 

Maintenant que nous disposons de la plage des cellules pour lesquelles nous souhaitons réaliser le calcul, il va nous rester à l’utiliser en tant que paramètre de la fonction SOUS.TOTAL().

Attention toutefois, cette fonction SOUS.TOTAL() est une fonction Excel, or ici nous sommes en VBA.

Mais pas de problème, pour utiliser une fonction Excel dans VBA, il suffit de l’appeler en tant que sous objet de Application.WorksheetFunction, dans le langage de VBA, c’est-à-dire en anglais (soit Subtotal) !

    SOMMESICOULEUR = Application.WorksheetFunction.Subtotal(9,  plage)

Ce qui nous permet de retourner à la fonction SOMMESICOULEUR() la somme des cellules de la même couleur que celle de la cellule appelante.

 

   5.3. Choix de la fonction à utiliser

 

Il ne reste maintenant plus qu’à laisser à l’utilisateur le choix de pouvoir choisir la fonction à utiliser pour réaliser son calcul.

Pour cela, nous allons ajouter un paramètre Integer à la fonction, que nous appellerons fonction :

Function SOMMESICOULEUR(cellules As Range,  fonction as Integer)

Puis nous utilisons ce paramètre dans la fonction Subtotal :

    SOMMESICOULEUR = Application.WorksheetFunction.Subtotal(fonction,  plage)

Il suffira donc de préciser en tant que second paramètre de la fonction SOMMESICOULEUR() la fonction à utiliser.

Ainsi, pour obtenir la valeur maximale, nous saisirons :

=SOMMESICOULEUR(B7:F22;4)

Excel formation - somme couleur - p2 - 02

Par contre, ce fonctionnement suppose que l’utilisateur connaisse tous les codes par cœur, en sachant qu’il n’est pas possible de les afficher directement en tant que suggestion lors de la saisie de la fonction…

Pour simplifier la rédaction de la fonction, nous préfèrerons que celui-ci puisse saisir directement le nom de la fonction.

Pour cela, nous allons commencer par modifier le type de l’argument fonction, que nous passons en String :

Function SOMMESICOULEUR(cellules As Range,  fonction As String)

Et ensuite, nous allons créer un tableau de variables dans lequel nous venons saisir les fonctions dans l’ordre présenté dans la fonction SOUS.TOTAL() :

    Dim listeFonctions() As Variant
    listeFonctions = Array("NB",  "NBVAL", "MAX", "MIN", "PRODUIT",  "ECARTYPE", "ECARTYPEP", "SOMME",  "VAR", "VAR.P")

Et enfin, pour obtenir la position de l’argument saisi au sein de cette liste et donc convertir l’argument saisi en toutes lettres en tant que numéro reconnu par la fonction SOUS.TOTAL(), nous utiliserons la méthode WorksheetFunction.Match qui permet d’obtenir la position d’un élément au sein d’une liste :

    SOMMESICOULEUR = Application.WorksheetFunction.Subtotal(WorksheetFunction.Match(fonction,  listeFonctions, False), plage)

Et voilà, notre fonction est terminée, il reste plus qu’à la renommer étant que celle-ci d’effectuer bien plus de calcul qu’une simple somme :

Function SOUSTOTALSICOULEUR(cellules As Range,  fonction As String)
    …
    SOUSTOTALSICOULEUR = Application.WorksheetFunction.Subtotal(WorksheetFunction.Match(fonction,  listeFonctions, False), plage)

Puis de la tester :

Excel formation - somme couleur - p2 - 03

 

 



Articles qui pourraient vous intéresser

Comment créer de superbes graphiques visuellement impactant pour vos infographies avec Excel ?
Comment réaliser une somme des cellules en fonction de leur couleur sur Excel ? La fonction SOMMESICOULEUR()
Ne fusionnez jamais vos cellules ! Découvrez comment centrer le contenu sur plusieurs cellules sans fusionner les cellules
Comment se protéger des macros infectées par un virus sur Excel ?
Comment obtenir le résultat d’une cellule située sur un autre classeur Excel ? Découvrons les références externes
Comment établir le classement des équipes de la Ligue 1 sur Excel ?
Comment faire une pause en VBA sur Excel ?
Comment savoir si un fichier existe dans un dossier en VBA avec Excel ?
Comment protéger ses macros VBA (limiter la consultation du code et le lancement) sur Excel ?
Les 6 bonnes habitudes qui facilitent le développement en VBA sur Excel
Les tableaux de données d'Excel
Comment créer nos propres objets VBA avec les classes personnalisées [#30 FORMATION EXCEL VBA COMPLETE]

Contact - Plan du site - À propos - Contact

© Excelformation.fr 2018-2022 - Excel, simplement

Haut de la page

Excelformation.fr propose de nombreuses formations pratiques et gratuites sur Microsoft Excel : des cours pour apprendre à structurer et analyser les données, des tutos sur les fonctions avancées, les formules et les formules avancées d'Excel, les formules matricielles, les mise-en-formes conditionnelles, les graphiques Excel (xls, xlsx, xlsm,…). Des tutoriels pour apprendre à automatiser les tâches répétitives (via des macro-commandes en VBA) de vos classeurs Excel.