Changement de couleur cellule : calcul automatique

Résolu
Philifloche Messages postés 14 Date d'inscription   Statut Membre Dernière intervention   -  
Philifloche Messages postés 14 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

J'utilise la formule suivante pour faire des sommes de cellules de couleurs différentes dans une même plage :

Function SOMME_SI_COULEUR(PlageSomme As Range, PlageCouleur As Range) As Variant
'*********************************************************
' Effectuer la somme des cellules en couleur *
'*********************************************************
Dim Cel As Range
Dim Som As Double

If PlageCouleur.Cells.Count > 1 Then
SOMME_SI_COULEUR = CVErr(xlErrValue)
Exit Function
End If
For Each Cel In PlageSomme
If Cel.Interior.ColorIndex = PlageCouleur.Interior.ColorIndex Then Som = Som + Cel
Next
SOMME_SI_COULEUR = Som
End Function


La formule fonctionne bien, mais les totaux ne se mettent pas à jour quand je change juste la couleur de fond d'une cellule de la plage.

Si quelqu'un a une réponse, je suis preneuse.

Merci.
A voir également:

3 réponses

Patrice33740 Messages postés 8561 Date d'inscription   Statut Membre Dernière intervention   1 780
 
Bonjour,

Il n'existe pas d'évènement exploitable lors du changement de couleur d'une cellule, donc pas de solution miracle !

On peut améliorer la fréquence de calcul en ajoutant Application.volatile (ligne 7) pour que la fonction soit calculée à chaque modification du contenu d'une cellule, même si ça ne concerne pas la plage de la fonction :
Function SOMME_SI_COULEUR(PlageSomme As Range, PlageCouleur As Range) As Variant
'*********************************************************
' Effectuer la somme des cellules en couleur *
'*********************************************************
Dim Cel As Range
Dim Som As Double
  Application.Volatile
  If PlageCouleur.Cells.Count > 1 Then
    SOMME_SI_COULEUR = CVErr(xlErrValue)
    Exit Function
  End If
  For Each Cel In PlageSomme
    If Cel.Interior.ColorIndex = PlageCouleur.Interior.ColorIndex Then Som = Som + Cel
  Next
  SOMME_SI_COULEUR = Som
End Function

Mais ce n'est pas suffisant, on peut aussi provoquer le calcul au changement de cellule sélectionnée en ajoutant dans le module de la feuille :
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
 Application.Calculate
End Sub

C'est pas l'idéal mais c'est déjà mieux.

On pourrait aussi utiliser OnTime mais c'est plus lourd (et inutilement chronophage) .


1
eriiic Messages postés 24603 Date d'inscription   Statut Contributeur Dernière intervention   7 276
 
Bonjour,

On peut améliorer la fréquence de calcul en ajoutant Application.volatile (ligne 7) pour que la fonction soit calculée à chaque modification du contenu d'une cellule
ou avec F9
eric
0
Philifloche Messages postés 14 Date d'inscription   Statut Membre Dernière intervention  
 
Bonjour,

Merci beaucoup, mais ça ne solutionne pas vraiment mon souci. :) Je ne touche plus au contenue des cellules une fois créées. Je change simplement la couleur.
0
eriiic Messages postés 24603 Date d'inscription   Statut Contributeur Dernière intervention   7 276
 
Bonjour,

Dans ce cas s'adresser à MS qu'ils fassent évoluer excel et ajoutent des événements.
Pas d'autre solution actuellement que ce vient de t'expliquer Patrice.
eric
0
The_boss_68 Messages postés 952 Date d'inscription   Statut Membre Dernière intervention   182
 
bonsoir,

Pourrais-tu mettre un fichier anonymisé à la disposition, avec des explications

Slts
0
Philifloche Messages postés 14 Date d'inscription   Statut Membre Dernière intervention  
 
Bonjour,
C'est mon premier post sur ce forum. Je ne sais pas comment mettre un fichier... :)
0
The_boss_68 Messages postés 952 Date d'inscription   Statut Membre Dernière intervention   182
 
Bonjour,

1) Tu vas dans https://www.cjoint.com/
2) Tu cliques sur [Parcourir] pour sélectionner ton fichier
3) Tu descends en bas de la page pour cliquer sur [Créer le lien Cjoint]
4) Au bout de quelques secondes la deuxième page s'affiche, avec le lien
en bleu souligné ; tu le sélectionnes et tu fais "Copier"
5) Tu reviens dans ta discussion sur CCM , et dans ton message de réponse tu fais "Coller"

Slts
0
Philifloche Messages postés 14 Date d'inscription   Statut Membre Dernière intervention  
 
Bonjour,

Désolée pour la réponse tardive ; j'ai du m'absenter quelques jours. Voilà le lien : https://www.cjoint.com/c/HBxiUjTvJ3J
Merci pour ton aide !
:)
0
The_boss_68 Messages postés 952 Date d'inscription   Statut Membre Dernière intervention   182
 
Bonjour,

Et comme ça? GO

Slts
0
Philifloche Messages postés 14 Date d'inscription   Statut Membre Dernière intervention  
 
Impossible d'ouvrir le fichier.
0
The_boss_68 Messages postés 952 Date d'inscription   Statut Membre Dernière intervention   182
 
Re

tiens, tiens pourtant chez moi le lien fonctionne

nouvel essai

https://www.cjoint.com/c/HBxjjBrqmdj

Slts
0
Philifloche Messages postés 14 Date d'inscription   Statut Membre Dernière intervention  
 
Même souci. Voilà le message affiché quand je tente d'ouvrir le fichier : "Désolé... Nous avons rencontré un problème dans le contenu de « HBxjjBrqmdj_forum-Test.xlsm »"
0