Compter les cellules selon leur couleur de remplissage

STEPHANIE59

XLDnaute Nouveau
Bonjour à tous,
Voilà, je parcours depuis 2 jours le net et le forum pour trouver une solution à mon problème.
Malgré les nombreux essais, cela ne fonctionne pas.
HELP !
Cordialement
Stéphanie
 

Paf

XLDnaute Barbatruc
bonjour,

on ne connais pas exactement votre problème, on ne sait pas ce que vous avez essayé, on ne connait pas la structure des données de votre classeur; bref aucun élément qui permette de vous aider...

Joignez un classeur exemple de votre souci.

A+
 

STEPHANIE59

XLDnaute Nouveau
vous avez raison...
voici le fichier http://web.ac-lille.fr/pia/telecharger.php?cle=7866457eb90d2c8f68d6c9cf461be3b2
Je souhaiterais mettre en place un tableur > 1 feuille = 1 personne
Comme vous pouvez le voir à droite de la feuille, il y a une légende.
Je souhaiterais que lorsque je colore une cellule d'une certaine couleur, le nombre de cellule coloré apparaisse à côté de la légende et que cela se mette à jour instantanément.
J'ai fait de nombreux tests (module...) mais je n'y arrive pas :(
Merci beaucoup de votre aide
Stéphanie
 

Paf

XLDnaute Barbatruc
re,

un essai par fonction personnalisée:

dans un module standard:

VB:
Function CompteCouleur(Plage, CelCoul)
For Each Cel In Plage
    If Cel.Interior.ColorIndex = CelCoul.Interior.ColorIndex Then CompteCouleur = CompteCouleur + 1
Next
End Function

et en AI2 : =CompteCouleur($B$3:$AF$14;AG2) puis tirer jusqu'en AI19 pour l'année 2016/2017; puis adapter pour les autres années

Attention, les codes couleur pour un évènement ne sont pas identiques pour les 3 années, ou pour une même année on a des couleurs identiques pour des évènements différents.


A+
 

Paf

XLDnaute Barbatruc
re,

En fait c'est donc le coté instantané qui vous posait problème.
Effectivement, la mise à jour n'est pas automatique.

La fonction réagit à une modification de cellule , or, la modification de couleur d'une cellule n'est pas considérée comme modification de la cellule.

La moins mauvaise (?) solution trouvée serait de passer par Sub Worksheet_SelectionChange (qui se déclenche dès la sélection d'une cellule) pour modifier une cellule quelconque afin de faire réagir les fonctions, avec un petit souci:

on sélectionne une cellule pour en modifier la couleur => déclenchement des fonctions, mais comme on n'a pas encore mis la couleur de fond , pas de changement de l'affichage des fonctions
on met la couleur de fond.
on sélectionne une autre cellule pour en modifier la couleur=> déclenchement des fonctions et donc prise en compte de la modif précédente.

la dernière modification de couleur d'une cellule ne sera prise en compte qu'au clic suivant sur une cellule.

Par ailleurs, la formule =CompteCouleur($B$3:$AF$14;AG2) s'applique seulement à la plage de la première année, pour l'année 2017/2018 la plage sera $B$22:$AF$33, à adapter également pour 2018/2019.

A+
 

Paf

XLDnaute Barbatruc
re et bonjour riton00

Application.Volatile est effectivement nécessaire.

Une proposition pour ne déclencher Calculate que sur la plage où l'on vient d'effectuer une modif, permettant d'économiser du temps au recalcul complet lorsqu'il y aura plusieurs feuilles :
VB:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Intersect(Target, Range("B3:AF14")) Is Nothing Then Range("B3:AF14").Calculate
If Not Intersect(Target, Range("B22:AF33")) Is Nothing Then Range("B22:AF33").Calculate
If Not Intersect(Target, Range("B41:AF52")) Is Nothing Then Range("B41:AF53").Calculate
End Sub

A+
 

Paf

XLDnaute Barbatruc
re,

si ça ne change rien, même en cliquant sur F9 après une modification de modification de couleur de fond, c'est qu'il y a un problème !

Rejoignez votre classeur avec toutes les modifications apportées ... (en cliquant sur <Téléverser un fichier> sous la fenêtre de réponse.

A+
 

Paf

XLDnaute Barbatruc
re,

la sub Private Sub Worksheet_SelectionChange(ByVal Target As Range), se trouve dans un module standard et aurait du être dans la feuille de code de la feuille Stéphanie .

Mais s'il y a d'autres feuilles à utiliser le même principe, il vaut mieux utiliser:

VB:
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
If Not Intersect(Target, Sh.Range("B3:AF14")) Is Nothing Then Sh.Range("B3:AF14").Calculate
If Not Intersect(Target, Sh.Range("B22:AF33")) Is Nothing Then Sh.Range("B22:AF33").Calculate
If Not Intersect(Target, Sh.Range("B41:AF52")) Is Nothing Then Sh.Range("B41:AF53").Calculate
End Sub

à copier dans la feuille de code Thisworkbook et supprimer toutes les sub Private Sub Worksheet_SelectionChange(ByVal Target As Range) qui sont copiées un peu partout.

Et dans Function CompteCouleur(Plage, CelCoul), rajouter au début l'instruction : Application.Volatile

A+
 

Discussions similaires

Statistiques des forums

Discussions
311 720
Messages
2 081 889
Membres
101 831
dernier inscrit
gillec