Somme des cellules Excel selon leur couleur de fond

Résolu/Fermé
coCCajus Messages postés 57 Date d'inscription mardi 23 août 2011 Statut Membre Dernière intervention 29 août 2016 - 27 déc. 2012 à 22:07
BenoitLX Messages postés 1 Date d'inscription mardi 17 mars 2015 Statut Membre Dernière intervention 17 mars 2015 - 17 mars 2015 à 16:18
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


A voir également:

10 réponses

Heliotte Messages postés 1491 Date d'inscription vendredi 26 octobre 2012 Statut Membre Dernière intervention 28 janvier 2013 92
28 déc. 2012 à 00:20
Bonsoir coCCajus,

Pour qu'Excel recalcule automatiquement (à chaque changement) : Outils, Options .. Onglet Calul, calcul automatique
1
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 310
28 déc. 2012 à 10:39
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
Heliotte Messages postés 1491 Date d'inscription vendredi 26 octobre 2012 Statut Membre Dernière intervention 28 janvier 2013 92
28 déc. 2012 à 00:24
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
0
coCCajus Messages postés 57 Date d'inscription mardi 23 août 2011 Statut Membre Dernière intervention 29 août 2016 18
28 déc. 2012 à 08:47
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
coCCajus Messages postés 57 Date d'inscription mardi 23 août 2011 Statut Membre Dernière intervention 29 août 2016 18
28 déc. 2012 à 10:49
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....
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 310
28 déc. 2012 à 11:20
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 ?
0
coCCajus Messages postés 57 Date d'inscription mardi 23 août 2011 Statut Membre Dernière intervention 29 août 2016 18
28 déc. 2012 à 12:09
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
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 310
28 déc. 2012 à 14:16
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
0
coCCajus Messages postés 57 Date d'inscription mardi 23 août 2011 Statut Membre Dernière intervention 29 août 2016 18
28 déc. 2012 à 15:14
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
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 310
Modifié par michel_m le 28/12/2012 à 17:20
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
0
coCCajus Messages postés 57 Date d'inscription mardi 23 août 2011 Statut Membre Dernière intervention 29 août 2016 18
28 déc. 2012 à 17:33
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
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 310
28 déc. 2012 à 17:36
Tu ne m'as pas importuné !!! :o)

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

Bonne année 2013
0
BenoitLX Messages postés 1 Date d'inscription mardi 17 mars 2015 Statut Membre Dernière intervention 17 mars 2015
17 mars 2015 à 16:18
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
0