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
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
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
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....
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
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
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
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.