Somme des cellules Excel selon leur couleur de fond [Résolu/Fermé]

Signaler
Messages postés
57
Date d'inscription
mardi 23 août 2011
Statut
Membre
Dernière intervention
29 août 2016
-
Messages postés
1
Date d'inscription
mardi 17 mars 2015
Statut
Membre
Dernière intervention
17 mars 2015
-
Bonjour à tous et à toutes,

Dans une feuille Excel dont je me sers pour ma comptabilité personnelle je souhaite effectuer dans une cellule la somme des cellules jaunes dans une plage donnée de cellules

J'ai trouvé je ne sais plus où le code suivant que j'utilise:

'Calcul la somme des cellules d'une plage dont le fond est d'une couleur donnée
'exemple 6 = jaune


Function SommeSiCouleurFond(Plage As Range, NumeroDeCouleur%) As Long
Application.Volatile True
Dim wCell As Range
For Each wCell In Plage
If wCell.Interior.ColorIndex = NumeroDeCouleur Then
SommeSiCouleurFond = SommeSiCouleurFond + wCell.Value
End If
Next
End Function


cette macro fonctionne avec néanmoins deux défauts:
1) la somme est arrondie à l'entier, or je voudrais 2 décimales
2) la somme ne se recalcule pas si l'on change seulement la couleur du fond, il faut par exemple faire F9 pour provoquer un calcul de la feuille et j'aimerais modifier le code pour que ce recalcul soit automatique
Est-ce possible?

si oui je remercie par avance ceux qui prendront le temps et la peine de m'aider


10 réponses

Messages postés
1491
Date d'inscription
vendredi 26 octobre 2012
Statut
Membre
Dernière intervention
28 janvier 2013
85
Bonsoir coCCajus,

Pour qu'Excel recalcule automatiquement (à chaque changement) : Outils, Options .. Onglet Calul, calcul automatique
1
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 63550 internautes nous ont dit merci ce mois-ci

Messages postés
16366
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
18 janvier 2021
3 111
bonjour

juste au passage

dans l'intitulé de ta fonction tu demandes un entier
Function SommeSiCouleurFond(Plage As Range, NumeroDeCouleur%) As Long

remplace par
Function SommeSiCouleurFond(Plage As Range, NumeroDeCouleur%) As Double

Cdbl(WCell.Value) est une bêtise tu peux garder Wcell.value
1
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 63550 internautes nous ont dit merci ce mois-ci

Messages postés
1491
Date d'inscription
vendredi 26 octobre 2012
Statut
Membre
Dernière intervention
28 janvier 2013
85
Bonsoir coCCajus,

C'est ici qu'il faut changer :SommeSiCouleurFond = SommeSiCouleurFond + wCell.Value

D'abord, la bonne pratique veut que l'on déclare les variables AVANT de les utiliser:
- Dim SommeSiCouleurFond As Double .. ensuite ..
- SommeSiCouleurFond = SommeSiCouleurFond + Cdbl(wCell.Value)
- et pour finir, il faut formater la cellule qui reçoit le total sur 2 décimales

C'est tout simple
Messages postés
57
Date d'inscription
mardi 23 août 2011
Statut
Membre
Dernière intervention
29 août 2016
16
Bonjour et merci Helliote,

je viens de modifier mon code selon votre proposition
malheureusement une somme de 123.45 continue à s'afficher (et à être enregistrée) comme 123.00
dans l'écriture des codes je manque de bases et je ne sais par exemple pas vraiment ce que signifie Cdbl(WCell.Value)par rapport à WCell.Value
Je continue à chercher mais reste friand de toute suggestion
Merci d'avance
Messages postés
57
Date d'inscription
mardi 23 août 2011
Statut
Membre
Dernière intervention
29 août 2016
16
bonjour Michel
Et merci, en effet cela marche comme cela et c'est super
je m'attache maintenant au rafraichissement de la feuille
j'envisage de créer un bouton qui d'abord affecterait la couleur choisie à la cellule (ou au groupe de cellules) sélectionnée(s) et qui ensuite déclencherait un calcul de la feuille
si quelqu'un a une meilleure idée....
Messages postés
16366
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
18 janvier 2021
3 111
Autre ânerie que je n'avais pas vu

supprime cette déclaration
Dim SommeSiCouleurFond As Double
puisque SommeSiCouleurFond est le nom de la fonction ....

On va peut-^tre feinter
question à 1 euro
quelles sont les conditions qui te font mettre des cellules en jaune ?
Messages postés
57
Date d'inscription
mardi 23 août 2011
Statut
Membre
Dernière intervention
29 août 2016
16
j'avais déjà supprimé la chose redondante

en fait il n'y a aucune autre condition que ma décision propre pour attribuer la couleur au fond de la cellule sélectionnée.

je veux ainsi distinguer dans une liste de prix ceux qui seront affectés à un total, de ceux qui, non colorés, seront affectés à un autre total.

cela en plus peut évoluer dans le temps, un montant initialement attribué à un total doit pouvoir être réaffecté à l'autre si je le décide

en fait, je n'aurai pas réellement besoin de macro pour cela mais avec un bouton, je suis sûr de choisir la couleur sans erreur (jaune=6) et je cherche aussi un moyen de recalculer automatiquement la feuille après changement de couleur

Cerise sur le gâteau, cela devrait me rendre moins ignare en VBA
Messages postés
16366
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
18 janvier 2021
3 111
avec un bouton, je suis sûr de choisir la couleur sans erreur (jaune=6)

Tu peux expliquer ou montrer le code ce bouton

Les macros événementielles ne réagissent pas à la mise en couleur d'une cellule et donc il faudra un bouton pour calculer les jaunes
Messages postés
57
Date d'inscription
mardi 23 août 2011
Statut
Membre
Dernière intervention
29 août 2016
16
Je pense y être arrivé, en ne comprenant pas tout car j'ai enregistré la macro, mais cela à l'air de marcher

Voila le code que j'ai associé au bouton créé:

Sub Jaune()
'
' Jaune Macro
'
With Selection.Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.Color = 65535
.TintAndShade = 0
.PatternTintAndShade = 0
End With
ActiveSheet.Select
Calculate
End Sub


Si je peux me permettre, j'aimerais que votre regard d'initié m'aide à rendre éventuellement ce code plus propre
Messages postés
16366
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
18 janvier 2021
3 111
avec une macro paramétrée qui pourra resservir pour boulot similaire ( toujours chercher à se constituer des bibliothèque de routine (macro paramétrée et/ou fonction)
à adapter
ton bouton appelle la macro "jaune"

Sub jaune()   
totaux_si_couleur "A1:B10", 6, "D2"     'plage de W, couleur, adresse du résultat   
End Sub   
'------------------   
Sub totaux_si_couleur(plage, couleur, adr_out)   
Dim cellule As Range, adr_depart   

'Délimite le coloriage à la zone de travail   
If Not Intersect(ActiveCell, Range(plage)) Then   
     'teinte la cellule   
     ActiveCell.Interior.ColorIndex = couleur   
     'recherche des cellules de la couleur utilisée   
     'et additionne leur valeur   
     With Range(plage) 'd'après aide en ligne MS Office  
          Set cellule = .Find("*", LookIn:=xlValues)   
          If Not cellule Is Nothing Then   
               adr_depart = cellule.Address   
               Do   
                    If cellule.Interior.ColorIndex = couleur Then Total = Total + cellule   
                    Set cellule = .FindNext(cellule)   
               Loop While Not cellule Is Nothing And cellule.Address <> adr_depart   
          End If   
     End With
     Range(adr_out) = Total  
End If   

End Sub   


pour apprendre VBA
https://excel.developpez.com/cours/?page=prog#environnement
Michel
Messages postés
57
Date d'inscription
mardi 23 août 2011
Statut
Membre
Dernière intervention
29 août 2016
16
Merci beaucoup Michel de votre aide

je vais étudier en détail votre proposition de code et essayer à tête reposée de l'adapter exactement à mon besoin

merci aussi du lien pour apprendre VBA ; j'en ai vraiment besoin

Je vais maintenant cesser de vous importuner et marquer ce sujet comme résolu

La période est propice pour vous assurer de tous mes voeux pour 2013 que j'étends bien sûr à tous les participants de ce sympathique forum
Messages postés
16366
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
18 janvier 2021
3 111
Tu ne m'as pas importuné !!! :o)

Si c'était le cas, j'aurais abandonné le suivi...

Bonne année 2013
Messages postés
1
Date d'inscription
mardi 17 mars 2015
Statut
Membre
Dernière intervention
17 mars 2015

Bonjour,

J'essaie également de faire la somme du plusieurs cases d'une même colonne qui sont en couleur bleu. J'ai essayé de reprendre le code de la macro juste au dessus. Cependant, ce dernier ne fonctionne pas. J'ai complété la deuxième ligne en précisant la plage de travail, la couleur et l'adresse du résultat mais en voulant la faire tourner, il m'indique qu'il y a une erreur plus bas, à la ligne "If Not Intersect(ActiveCell, Range(plage)) Then".
Je ne comprend pas pourquoi une erreur est identifiée ici.

Merci d'avance