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
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
A voir également:
- Somme des cellules Excel selon leur couleur de fond
- Excel cellule couleur si condition texte - Guide
- Formule somme excel colonne - Guide
- Somme si couleur excel - Guide
- Liste déroulante excel - Guide
- Verrouiller des cellules excel - Guide
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
28 déc. 2012 à 00:20
Bonsoir coCCajus,
Pour qu'Excel recalcule automatiquement (à chaque changement) : Outils, Options .. Onglet Calul, calcul automatique
Pour qu'Excel recalcule automatiquement (à chaque changement) : Outils, Options .. Onglet Calul, calcul automatique
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
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
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
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
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
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
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
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
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
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
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....
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....
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
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 ?
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 ?
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
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
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
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
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
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
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
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
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
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
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"
pour apprendre VBA
https://excel.developpez.com/cours/?page=prog#environnement
Michel
à 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
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
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
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
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
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
Si c'était le cas, j'aurais abandonné le suivi...
Bonne année 2013
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
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
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