Somme instantanée de cellules colorées

d28b -  
michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,

sous excel 2007 et étant plus que débutant, j'ai enfin trouvé sur ces forums,comment faire la somme de cellules d'une meme couleur avec le code ci-après.
Ca marche très bien, mais si par la suite, je modifie la couleur d'une cellule, la somme ne s'actualise pas.
Comment faire pour que dès que je modifie une couleur, ma somme s'actualise instantanément
Option Explicit
Function som_couleur(plage As Range, couleur As Integer) As Double
Dim r As Range, nb As Double
Application.Volatile
nb = 0
For Each r In plage
If r.Interior.ColorIndex = couleur Then nb = nb + r.Value
Next
som_couleur = nb
End Function

Function cellcouleur(c As Range)
cellcouleur = c.Interior.ColorIndex
End Function

merci de votre aide.
A voir également:

7 réponses

Deeper
 
Tu te places sur "This workbook" de l'explorateur (colonne de gauche) dans vba
Tu copie colle cette fonction :

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
MsgBox "tutu"
End Sub

tu remplaces MSGbox "tutu" par ta fonction.
En revanche, il faut que tu passe le range en parametre
0
d28b
 
ca avance,
ca doit ressembler à:
Option Explicit
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Function som_couleur(plage As Range, couleur As Integer) As Double
Dim r As Range, nb As Double
Application.Volatile
nb = 0
For Each r In plage
If r.Interior.ColorIndex = couleur Then nb = nb + r.Value
Next
som_couleur = nb
End Function
End Sub

Function cellcouleur(c As Range)
cellcouleur = c.Interior.ColorIndex
End Function

passer le range en parametre, c'est à dire?

merci bcp
0
pilas31 Messages postés 1878 Statut Contributeur 647
 
Bonjour,

Non, il n'y a pas de raison, cela devrait se recalculer automatiquement. Soit le recalcul est trés long parceque la plage concernée en paramétre est trés vaste soit il faut regarder dans les options d'excel, dans la rubrique "Calcul" si c'est bien le mode "Automatique" qui est coché et non pas "Sur ordre".

A+
0
d28b
 
Salut,

Je suis bien en automatique et je travaille sur un tableau d'essai très light.
chose étrange, j'ai juste crée une ligne de cellules contenant une couleurs et des cellules sans couleur,
chaque cellule contient une valeur à additionner suivant la couleur
je rentre dans la cellule devant effectuer l'operation, je valide et tout fonctionne.
si je change une couleur manuelement ca ne s'actualise pas
si je tire la couleur a partir d'une cellule deja colorée, ca se réactualise automatiquement
.....

on m'a donné cette solution, mais j'ai un peu de mal a l'integrer (gros débutant)
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
"ma fonction"

a ton avis?
0
michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 318
 
Bonjour à tous

cette macro est à installer dans le module feuilX concerné (la feuille ou tu travailles)
pour l'exemple la plage est A1:F1 et le résultat est en B10

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Intersect(Target, Range("A1:F1")) Is Nothing Then: Exit Sub
Range("B10") = tafonction
End Sub

lorsque tu cliques dans la plage, la fonction se déclenche et compte le nombre de couleurs (soit le m^me si t'as rien changer)
c'est un premier à améliorer (paramètres de la plage a rentrer qu'une fois), j'y jette un oeil, sois patient...
0
michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 318
 
RE,

dans le module où tu as installé ta fonction et audessus de toute écriture tu écris
Public Const plage As String = "A1:F1" 'a adapter
Public Const couleur As Byte = ' a adapter
Public Const cible As String = "B10" 'a adapter


et dans le module feuille on a:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Intersect(Target, Range(plage)) Is Nothing Then: Exit Sub
    Range(cible) = tafonction(plage, couleur)
End Sub


edit à 12:05: modifications en italique
0

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

Posez votre question
pilas31 Messages postés 1878 Statut Contributeur 647
 
Bonjour Michel_m,

C'est exact, j'ai été un peu rapide car le changement de couleur ne provoque pas d'événement et donc pas de recalcul. Donc la seule solution est d'utiliser Worksheet_SelectionChange mais par contre si les fonctions ont été uilisées dans la feuille comme fonction personalisées, il serait peut être plus simple de forcer le calcul.

du style :

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Worksheets("Feuil1").Calculate
End Sub

ou en faisant le test d'intersection de plage comme tu le propose

Qu'en penses-tu ?
0
michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 318
 
Salut Pilas,
oui peut-être, faudrait essayer (je n'ai pas enregistré...) mais à priori, je suis un peu sceptique car on ne change aucun paramêtre de la fonction (plage et couleur)
enfin, faut voir... pas sûr de moi
mais merci de ta remarque, je regarderai tout à l'heure
0
michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 318
 
Re,
Je viens de regarder en rentrant: la fonction activate par Worksheet_SelectionChange ou par la solution proposée par Deeper Workbook_SheetChange (Bonjour Deeper, excuses moi) ne réagissent qu'au changement de valeur et non au changement de format (ici,colorindex)...
ou il y a qqchose que je n'ai pas pigé, ce qui est très possible...

A moins que les couleurs soient issues d'une Mise En Forme Conditionnelle!!!
0