Tester couleur cellule dans une plage de données

xav28

XLDnaute Nouveau
Bonjour,

J'aimerai tester "dynamiquement" si chaque cellule d'une plage de données correspond à un couleur spécifique, afin de pouvoir compter le nombre de cellules répondant à ce critère.

Je suis dans une boucle de type: for each cell in range ... et quand j'indique une formule du genre if(RC[-125]).interior.colorindex=34,1,0) j'obtiens un message d'erreur.:(

J'ai essayé d'autre solutions, elles permettent bien de compter le nombre de cellules d'une certaine couleur cependant le résultat reste figé car il n'est pas recalculé automatiquement lorsque la cellule change de couleur.

Pour info, ceci concerne un planning où les couleurs de cellules sont souvent modifiées.

Ma demande paraît simple: tester la couleur de chaque cellule d'une plage de données (savoir si elle est bleu), dans l'affirmative mettre 1 dans une cellule située plusieur colonnes plus loin, sinon indiquer 0.

Malgré cette simplicité apparente, je reste bloqué ! :mad:

Merci à l'avance pour l'aide que vous voudrez bien m'apporter :)
 

GIBI

XLDnaute Impliqué
Re : Tester couleur cellule dans une plage de données

Bonjour,

si tu utilise un for each cell in..., pour terster la couleur de la colonne il suffit de coder

If Cell.interior.colorindex=34 then
Compteur = Compteur +1 'pour comptabiliser
Cell.offset(0,10)=1 'pour mettre la valeur 1 dans 10 colonne plus loin
else

endif

Bon courage

Mais ceci est plutôt une macro statique = qu'il faut lancer à la main

Pour être dynamique
tu peux utiliser une macro événementielle pour tester une colonne particulère

exemple avec colonne 5

Private Sub Worksheet_Change(ByVal Cell As Range)
if Cell.Column <> 5 then exit sub ' sortir si pas la colonne 5

If Cell.interior.colorindex=34 then
Application.EnableEvents = False ' suspendre l'événement le temps de la modif
Cell.offset(0,10)=1 'pour mettre la valeur 1 dans 10 colonne plus loin
Application.EnableEvents = False
else

endif
End Sub



GIBI
 
Dernière édition:

pierrejean

XLDnaute Barbatruc
Re : Tester couleur cellule dans une plage de données

bonjour xav28

Si le changement de couleur est issu d'une MFEC il faut utiliser les conditions de changement pour definir la couleur (Interior.colorindex dans ce cas n'est pas representatif de la couleur)
Sinon il faut savoir qu'un changement de couleur de fond ne provoque pas l'evenement change
Peux-tu poster un fichier exemple (sans données confidentielles) pour preciser ce que tu souhaites
 

xav28

XLDnaute Nouveau
Re : Tester couleur cellule dans une plage de données

Merci pour vos réponses mais cela ne convient pas à mon cas. :(

Voici un petit bout de code où figure (entre autre) mon test sur la couleur des cellules:

Code:
        'balayage des cellules concernant les infirmiers
        For Each Cell In Range("C" & dl, "AG" & dl)
            
            'calcul heures sups par infirmier
            Cell.Offset(0, 53).Select
            ActiveCell.Formula = "=if(isnumber(RC[-53]),if(RC[-53]>RC2,RC[-53]-RC2),)"
            
            'calcul temps travaillé dans le cas de CM, Genf et AT pour IDE
            Cell.Offset(1, 53).Select
            ActiveCell.Formula = "=if(R[-1]C[-53]=""CM"",R[-1]C2,if(R[-1]C[-53]=""AT"",R[-1]C2,if(R[-1]C[-53]=""GEnf"",R[-1]C2,)))"
            
            'calcul présence infirmier
            Cell.Offset(0, 84).Select
            ActiveCell.Formula = "=if(isnumber(RC[-84]),if(RC2=0.4166666666666671,0,1))"
            
            'calcul présence IDE matin bleu clair
            Cell.Offset(0, 125).Select
           
            [B]ActiveCell.Formula = "=if((RC[-125]).interior.colorindex=34,1,0)"[/B]
            
            With Cell.Validation
                .Delete
                .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
                xlBetween, Formula1:="R,CA,RTT,1/2CA,1/2RTT,F,CM,AT,SD,RS,RN,RC,Genf,JH,JF,Cex"
                .IgnoreBlank = True
                .InCellDropdown = True
                .InputTitle = ""
                .ErrorTitle = ""
                .InputMessage = ""
                .ErrorMessage = ""
                .ShowInput = False
                .ShowError = False
            End With
            
        Next Cell

Ce qui pose problème, c'est le test de savoir si 125 colonnes avant la couleur de la cellule est bleu ! :confused:

La ligne ActiveCell.Formula = "=if((RC[-125]).interior.colorindex=34,1,0)" provoque une erreur d'exécution 1004.

J'aimerai arriver à compter dynamiquement au fur et à mesure que la couleur des cellules est modifiée.

La couleur bleue, par exemple, signifie que les infirmiers sont du matin. Pour les 31 jours (max) par mois (colonnes entre C et AG), je voudrai comptabiliser combien d'infimiers (dl=1 ligne infirmier) sont du matin chaque jour !

Si vous pouvez m'aider dans cette tâche, j'en serai fort content. :)
 

xav28

XLDnaute Nouveau
Re : Tester couleur cellule dans une plage de données

Voici en pièce jointe un exemple de ce que je demande. ;)

La macro, telle qu'elle est écrite, provoque une erreur 1004 que je ne sais résoudre ! :(

Comment faire simplement pour tester si la cellule est de couleur bleu et dans ce cas mettre 1 dans une colonne plus loin ? :confused:

Merci d'avance de m'indiquer comment procéder pour arriver à mon objectif.
 

Pièces jointes

  • test couleur.xls
    23.5 KB · Affichages: 220
  • test couleur.xls
    23.5 KB · Affichages: 225
  • test couleur.xls
    23.5 KB · Affichages: 226

alex67800

XLDnaute Impliqué
Re : Tester couleur cellule dans une plage de données

Bonsoir xsav28, pierrejean, le forum,

Un bout d'essai avec ce que j'ai compris.

Dis nous si cela correspond à ce que tu veux!
 

Pièces jointes

  • test%20couleur(1).xls
    33 KB · Affichages: 279
  • test%20couleur(1).xls
    33 KB · Affichages: 277
  • test%20couleur(1).xls
    33 KB · Affichages: 264

pierrejean

XLDnaute Barbatruc
Re : Tester couleur cellule dans une plage de données

Re

Salut Alex

Comme je l'ai precisé le changement de couleur de fond de cellule ne provoque pas de macro evenementielle. A chaque changement il conviendra de cliquer sur le bouton pour actualiser les sommes
Je ne crois pas qu'il y ait de possibilité d'obtenir un mode dynamique
 

Pièces jointes

  • test couleur.zip
    10.5 KB · Affichages: 106
  • test couleur.zip
    10.5 KB · Affichages: 116
  • test couleur.zip
    10.5 KB · Affichages: 111
Dernière édition:

xav28

XLDnaute Nouveau
Re : Tester couleur cellule dans une plage de données

Bonjour et merci pour vos réponses.

La méthode d'Alex67800 correspond tout à fait à mes attentes.

Mon seul petit souci reste que je n'arrive pas à l'adapter à mon code; car en fait le "private worksheet" devrait concerner une nouvelle feuille créée par la macro principale.

Comment faire en sorte que ce "private worksheet" s'applique au nouveau classeur ?

C'est peut-être très simple à faire mais je n'ai aucune idée sur la façon d'y arriver !

Merci d'avance de m'éclairer de vos lumineuses lanternes ;)
 
Dernière édition:

xav28

XLDnaute Nouveau
Re : Tester couleur cellule dans une plage de données

Bonjour Alex67800,

Merci de bien vouloir tenter un arrangement de mon code :)

Je joins le fichier complet mais ma demande concerne la macro GenerationPlanning.
Plus particulièrement vers la ligne 258 (dans la boucle concernant les infirmiers) où il faudrait arriver à tester si la couleur est bleue et dans ce cas indiquer 1 plusieurs colonnes plus loin afin de pouvoir les comptabiliser (j'ai retiré le fait de masquer les colonnes pour avoir une meilleure vision des calculs).

Merci de l'indulgence concernant mon code, je ne suis pas un expert de VB et tout cela n'est pas optimisé (mais malgré tout cela fonctionne et produit ce que je veux)!

Rappel de l'objectif de ma demande: pour chaque planning mensuel généré, être capable de compter pour chaque jour le nombre de personnes dont la case est bleue (effectif du matin). Si cela fonctionne, je ferai le test pour les autres codes couleurs et pour les autres personnels.

Encore merci d'avance pour l'aide.
 

Pièces jointes

  • Maquette planning-forum.zip
    35.1 KB · Affichages: 81

Fo_rum

XLDnaute Accro
Re : Tester couleur cellule dans une plage de données

Salut,

et si tu ajoutes le code dans le nouveau classeur lors de sa création ?
Voici un exemple avec l'évènement "SelectionChange" mais "Change" peut être préférable.
 

Pièces jointes

  • NouveauClasseurAvecMacro.zip
    32.5 KB · Affichages: 83

xav28

XLDnaute Nouveau
Re : Tester couleur cellule dans une plage de données

Merci pour cette proposition de solution mais malheureusement cela ne produit pas l'effet attendu !

La solution proposée par Alex67800 fonctionne dans un classeur "isolé" mais je n'arrive pas à reproduire l'équivalent dans un nouveau classeur généré par la macro située dans autre classeur :eek:

Je suis pourtant persuadé que c'est possible de le faire mais mes compétences en Visual Basic ne sont pas suffisantes pour que j'y arrive seul.

Merci d'avance encore pour votre collaboration.
 

Discussions similaires

Statistiques des forums

Discussions
312 195
Messages
2 086 082
Membres
103 113
dernier inscrit
jlaussenac