Deux cellules consécutives de même couleur

Résolu
Laly.LAREUNION Messages postés 13 Date d'inscription   Statut Membre Dernière intervention   -  
Laly.LAREUNION Messages postés 13 Date d'inscription   Statut Membre Dernière intervention   -
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.
A voir également:

9 réponses

Le Pingou Messages postés 12249 Date d'inscription   Statut Contributeur Dernière intervention   1 458
 
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
eriiic Messages postés 24603 Date d'inscription   Statut Contributeur Dernière intervention   7 269
 
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
Laly.LAREUNION Messages postés 13 Date d'inscription   Statut Membre Dernière intervention  
 
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
eriiic Messages postés 24603 Date d'inscription   Statut Contributeur Dernière intervention   7 269
 
non, ce n'est plus judicieux ni plus rapide.
Macro pour analyser une MFC : 50 à 100 lignes, reprendre ton test MFC : 1 ligne...
0
Laly.LAREUNION Messages postés 13 Date d'inscription   Statut Membre Dernière intervention  
 
Il existe donc dans la fonction MFC la possibilité de mettre un message pop up?
0
Laly.LAREUNION Messages postés 13 Date d'inscription   Statut Membre Dernière intervention  
 
Merci pour vos réponses.
Je vous ai joint (enfin j'ai tenté, j'espère que cela fonctionne) le fichier exemple.
Merci d'avance pour vos aides.


https://www.cjoint.com/?0JClzV3zHqc
0
eriiic Messages postés 24603 Date d'inscription   Statut Contributeur Dernière intervention   7 269
 
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
Le Pingou Messages postés 12249 Date d'inscription   Statut Contributeur Dernière intervention   1 458
 
Bonjour eriiic, toujours aussi rapide, merci et amicales salutations
0
eriiic Messages postés 24603 Date d'inscription   Statut Contributeur Dernière intervention   7 269
 
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
Laly.LAREUNION Messages postés 13 Date d'inscription   Statut Membre Dernière intervention  
 
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
eriiic Messages postés 24603 Date d'inscription   Statut Contributeur Dernière intervention   7 269
 
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
Laly.LAREUNION Messages postés 13 Date d'inscription   Statut Membre Dernière intervention  
 
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

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

Posez votre question
Le Pingou Messages postés 12249 Date d'inscription   Statut Contributeur Dernière intervention   1 458
 
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
Laly.LAREUNION Messages postés 13 Date d'inscription   Statut Membre Dernière intervention  
 
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
eriiic Messages postés 24603 Date d'inscription   Statut Contributeur Dernière intervention   7 269
 
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
Laly.LAREUNION Messages postés 13 Date d'inscription   Statut Membre Dernière intervention  
 
Excusez mon impolitesse f :$
Bonjour à tous... (Vraiment désolée)
0
Laly.LAREUNION Messages postés 13 Date d'inscription   Statut Membre Dernière intervention  
 
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