Deux cellules consécutives de même couleur

Résolu
Bonjour,

Je souhaiterais qu'un message pop up s'affiche lorsque le résultat de deux cellules consécutives (Ex: C1 et D1) sont de la même couleur de fond (ou jaune ou rouge)
En effet, lorsque C1 < a une valeur X, le fond de la cellule se colore en rouge (mise en forme conditionnelle, si limite dépassée) ou en jaune (si limite presque atteinte) ou verte (si valeur conforme).

Après plusieurs lecture et compilation sur les forums, j'en suis arrivée à ce texte:

Sub color ()
Nbj = 0 NbR=0
For each cellule in Range ("G31: AZZ31")
If cellule.interior.colorIndex = 3 Then Msgbox "Dérives importantes"
End if
For each cellule in range ("G31:AZZ31")
If cellule.interior.colorIndex= 6 Then Msgbox "Surveillance". 
End if
End Sub


A noter que dans les cellules de la ligne 31 se trouve le résultat d'une moyenne de 8 cellules précédentes. La macro ne doit s'exécuter que sur le résultat définitif (une fois les 8 valeurs entrés et le calcul de la moyenne effectué).
J'hésite donc entre worksheet_activate ou worksheet_calculate?
Merci pour votre aide.

9 réponses

  1. Merci Eric, avec ta première solution de remplacer =SI(NBVAL(K13:K20)=8;MOYENNE(K13:K20);NA()) dans la formule, j'obtiens le résultat souhaité.

    UN TRES GRAND MERCI pour vos aides respectives. :)
    0
    1. Excusez mon impolitesse f :$
      Bonjour à tous... (Vraiment désolée)
      0
      1. Contributeur
        Pas bonjour non plus,
        Bonjour le pingou,

        Si la moyenne n'est valable que si les 8 saisies sont faites pourquoi ne mets-tu pas en formule plutôt :
        =SI(NBVAL(K13:K20)=8;MOYENNE(K13:K20);NA()) ?

        Sinon remplace :
        If IsError(Cells(31, Target.Column)) Then Exit Sub
        par :
        If Application.CountA(Cells(13, Target.Column).Resize(8)) < 8 Then Exit Sub

        Si tu ne changes pas tes formules il restera une erreur lorsque tes formules en 24:30 retournent #N/A. Tu n'as pas dit ce que tu voulais. Dans quels cas c'est normal ou pas ? Rien ou alerte ?

        eric

        0
        1. On considèrera que le résultat est définitif une fois que la 8ème cellule est entrée.
          Peu importe s'il corrige une ou plusieurs valeurs par la suite.
          0
          1. Bonjour,
            Juste au passage, comment on sait que le résultat est définitif.... Si par exemple il va encore corrigé une ou plusieurs valeurs ?

            Salutations.
            Le Pingou
            0
            1. Contributeur
              Il existe donc dans la fonction MFC la possibilité de mettre un message pop up?
              Non plus. Je parlais de reprendre le test MFC dans une macro.

              Vu que tu n'avais pas précisé j'ai prévu que ça fonctionne sur un collé sur plusieurs colonnes. Ce qui complique un peu mais je pense que tu t'y retrouvera et que tu comprendras le principe.
              Dans ce cas tu peux avoir les 2 messages dans la msgbox.
              Tu peux tester en revalidant tes saisies.
              A tester, Private Sub Worksheet_Change :
              https://www.cjoint.com/?DJCq05xC3og

              eric

              edit : fichier modifié, je viens de faire le lien avec ton autre fil.
              Date et heure ne se mettent que si vides. Préciser si tu préfères une mise à jour à chaque saisie.
              Si ok ne pas oublier de mettre en résolu l'autre fil également.

              En essayant continuellement, on finit par réussir.
              Donc plus ça rate, plus on a de chances que ça marche.(les Shadoks)
              En plus du merci (si si, ça se fait !!!), penser à mettre en résolu. Merci
              0
              1. Bonjour eriiic, toujours aussi rapide, merci et amicales salutations
                0
              2. Contributeur
                Salut le pingou :-)
                Rapide, rapide, ça date d'hier... ;-)

                @laly :
                JAMAIS TU NE DESACTIVES TES PROCEDURE ONKEY OU ONTIME POUR NE PAS EMM...BETER L'UTILISATEUR ????
                Parce que ton fichier qui se rouvre dès qu'on tape Entrée dans excel ça pète les c....
                Quand on fait un truc comme ça le minimum est de rendre un environnement propre à l'utilisateur.
                Et sur un forum tu peux les mettre en commentaires puisqu'ils n'ont rien à voir avec la question, ou prévenir !
                Ajouter :
                Private Sub Workbook_BeforeClose(Cancel As Boolean)
                    Application.OnKey "~", ""
                    Application.OnKey "{enter}", ""
                    Application.OnKey "{TAB}", ""
                End Sub

                eric
                0
              3. Oups... je suis désolée Eriiic :s mais ce fichier Excel avec les macros n'a pas été créé par moi mais par mon prédécesseur; je cherche uniquement à l'améliorer avec de nouvelles fonctions.
                Que faut-il que je supprime dans la procédure pour "rendre l'environnement propre à l'utilisateur"?

                Merci pour ton aide.
                0
              4. Contributeur
                Bonjour,

                au minimum ajoute dans thisworkbook les 5 lignes que je t'ai mise.
                Au mieux supprime :
                Application.OnKey "~", "dateheure"
                Application.OnKey "{enter}", "dateheure"
                Application.OnKey "{TAB}", "showuserform"
                et fait l'appel tes proc d'une autre façon.

                Surtout quand on voit en plus que dateheure, qui peut être appelée de n'importe où dans n'importe quel classeur modifie la feuille active sans aucun contrôle de qui elle est. Une dangereuse abomination !
                Idem pour Workbook_SheetBeforeRightClick qui appelle chgtType sans même contrôler si la feuille est concernée...
                Bref, tout ce qui est dans this_workbook est plus que douteux.

                Quoiqu'il en soit toutes les actions qui modifient l'environnement de l'utilisateur doivent être mises en commentaire lorsque tu postes sur un forum
                Et si elles sont nécessaires pour la question tu expliques, et l'intervenant saura bien les activer pour tester s'il le veut

                eric
                0
              5. Eric, merci pour ton aide. :D
                Si je peux encore abusé un peu de ta patience et de ta science!
                Finalement, il faudra qu'apparaisse dans la formule VBA non pas Cells(31, col) mais moyenne de cells(G13:G20) par exemple... (applicable sur l'ensemble du fichier)
                Le message apparaît à chaque fois que tu tapes une valeur dans la plage (G13:G20)...
                Merci pour ton retour.
                0
            2. Contributeur
              Bonjour,

              ça serait plutôt sur .change des 8x1370 cellules de saisie.
              Mais tu ne peux pas tester la couleur mise par une MFC avec .interior.colorindex, c'est beaucoup plus complexe que ça. Ré-utilise plutôt le test de la MFC. par exemple If cellule <x and ...

              eric

              En essayant continuellement, on finit par réussir.
              Donc plus ça rate, plus on a de chances que ça marche.(les Shadoks)
              En plus du merci (si si, ça se fait !!!), penser à mettre en résolu. Merci
              0
              1. Je peux également reprendre les règles de la MFC mais ma volonté première est de faire apparaître une fenêtre pop up lorsque deux cellules consécutives ne respectent pas les règles de MFC. Deux valeurs jaunes signifient "début de dérives process" et une cellule rouge signifie "dérive de process".
                J'ai donc pensé que faire intervenir la couleur de fond de la cellule était plus judicieuse et plus rapide dans mon cas! :s
                0
              2. Contributeur
                non, ce n'est plus judicieux ni plus rapide.
                Macro pour analyser une MFC : 50 à 100 lignes, reprendre ton test MFC : 1 ligne...
                0
              3. Il existe donc dans la fonction MFC la possibilité de mettre un message pop up?
                0
            3. Bonjour,
              Pas facile de comprendre ce que vous désirez et où est le problème. En plus votre procédure ne peut pas fonctionner par manque d'instruction [Next cellule...].
              Pouvez-vous apporter un éclaircissement ?

              0