XL 2021 Mises en formes Conditionnelles.

jeff1494

XLDnaute Occasionnel
Bonjour à toutes et tous;

Je viens vers vous car je ne me sors pas d'un problème de mise en forme conditionnelle.
J'ai un fichier qui me permet d'enregistrer les mesures de tension artérielle.
  • Colonne A = Date du jour.
  • Colonne B = Mesure du taux Systolique.
  • Colonne C = Mesure du taux Diastolique.
  • Colonne D = Mesure du pouls. Donnée non utilisée.
  • Colonne E = Tension calculée. Le calcul se fait par une fonction "Tension" qui a été créée pour l'occasion.
Les groupes des colonnes B à E se répètent pour le matin, le midi et, le soir.

Je voudrais pouvoir colorer la cellule E suivant certaines règles. Puis de dupliquer la solution pour les autres colonnes en question.
A savoir :
  1. Tension optimale si du taux Systolique est < 120 ET la mesure Diastolique < 80 couleur de fond de la cellule en bleu ciel.
  2. Tension normale si du taux Systolique est < 130 ET la mesure Diastolique < 85 couleur de fond de la cellule en vert clair.
  3. Tension normale élevée si du taux Systolique est < 120 ET la mesure Diastolique < 80 couleur de fond de la cellule en jaune clair.
  4. Tension très élevée si du taux Systolique est 120 < SYS<139 ET la mesure Diastolique 85 < DIA< 89 couleur de fond de la cellule en bleu ciel.
En fait c'est la première fois que je me lance dans ces MFC. Alors écrire chaque règle ça je peux faire (sauf peut-être la dernière qui me semble plus complexe).

Mon problème est d'arriver à gérer des recouvrements de valeurs. Par exemple entre la tension Optimale et la tension Normale.
Il y aurait peut-être une autre possibilité, qui serait bien au dessus de mes capacités, qui serait peut-être d'inclure ces colorations via une procédure dans la fonction?

Donc je vous demande un coup de main pour me sortir de ce bourbier.
En vous remerciant par avance pour votre temps et votre aide.
Je vous souhaite une bonne soirée.
Cordialement.
 

Pièces jointes

  • Couleur Tension.xlsm
    31.7 KB · Affichages: 4

TooFatBoy

XLDnaute Barbatruc
Oui, je parle bien de la formule dan la fonction. ;)

La fonction donne le même résultat que cette formule :
Code:
=--(ENT(C4/10) & "," & ENT(D4/10))

Je n'ai jamais vu qu'on calculait une tension de cette façon, et en plus ça donne des résultat incohérents :
Bizarrerie.png



C'est à première vue une fonction du module1, par contre je ne vois pas l'utilité de la forme matricielle ....
Ni la forme matricielle ni même la fonction n'ont vraiment d'intérêt. ;)
 

fanch55

XLDnaute Barbatruc
Voici le code à exécuter pour établir les Mfc telles qu'elles ont été demandées sauf la condition 3 .
VB:
Sub Mfc_Feuil1()
Const Cyan = 15773696
Const Vert = 5287936
Const Rouge = 255
Worksheets("Feuil1").Activate
Worksheets("Feuil1").Cells.FormatConditions.Delete
    
    With [$E$4:$E$38].FormatConditions
        With .Add(Type:=xlExpression, Formula1:="=ET($B4<120;$C4<80;$E4<>"""")")
             .Interior.Color = Cyan
             .StopIfTrue = Faux
        End With
        With .Add(Type:=xlExpression, Formula1:="=ET($B4<130;$C4<85;$E4<>"""")")
             .Interior.Color = Vert
             .StopIfTrue = Faux
        End With
        With .Add(Type:=xlExpression, Formula1:="=ET(120<$B4;$B4<139;85<$C4;$C4<89;$E4<>"""")")
             .Interior.Color = Rouge
             .StopIfTrue = Faux
        End With
    End With
        
    With [$I$4:$I$38].FormatConditions
        With .Add(Type:=xlExpression, Formula1:="=ET($F4<120;$G4<80;$I4<>"""")")
             .Interior.Color = Cyan
             .StopIfTrue = Faux
        End With
        With .Add(Type:=xlExpression, Formula1:="=ET($F4<130;$G4<85;$I4<>"""")")
             .Interior.Color = Vert
             .StopIfTrue = Faux
        End With
        With .Add(Type:=xlExpression, Formula1:="=ET(120<$F4;$F4<139;85<$G4;$G4<89;$I4<>"""")")
             .Interior.Color = Rouge
             .StopIfTrue = Faux
        End With
    End With
        
    With [$M$4:$M$38].FormatConditions
        With .Add(Type:=xlExpression, Formula1:="=ET($J4<120;$K4<80;$M4<>"""")")
             .Interior.Color = Cyan
             .StopIfTrue = Faux
        End With
        With .Add(Type:=xlExpression, Formula1:="=ET($J4<130;$K4<85;$M4<>"""")")
             .Interior.Color = Vert
             .StopIfTrue = Faux
        End With
        With .Add(Type:=xlExpression, Formula1:="=ET(120<$J4;$J4<139;85<$K4;$K4<89;$M4<>"""")")
             .Interior.Color = Rouge
             .StopIfTrue = Faux
        End With
    End With
        
End Sub
 

TooFatBoy

XLDnaute Barbatruc
  1. Tension optimale si du taux Systolique est < 120 ET la mesure Diastolique < 80 couleur de fond de la cellule en bleu ciel.
  2. Tension normale si du taux Systolique est < 130 ET la mesure Diastolique < 85 couleur de fond de la cellule en vert clair.
  3. Tension normale élevée si du taux Systolique est < 120 ET la mesure Diastolique < 80 couleur de fond de la cellule en jaune clair.
  4. Tension très élevée si du taux Systolique est 120 < SYS<139 ET la mesure Diastolique 85 < DIA< 89 couleur de fond de la cellule en bleu ciel.
- La condition 3 ressemble fortement à la condition 1.
- Pourquoi la condition 4 doit-elle colorier en bleu ciel comme la condition 1 ?

Ah... les copier/coller... 😅
 

jeff1494

XLDnaute Occasionnel
Bonjour à tous et encore merci de vous être penché sur mon problème;

Je ne suis pas un expert comme vous messieurs les XLDnautes Barbatruc (que je remercie pour leurs apports), et j'essaie de me débrouiller tout seul, mais parfois je suis peut-être trop ambitieux.

Chaque fois que je dois faire un petit outil pour mon usage personnel, je me demande comment je pourrais apprendre de nouvelles choses et ou techniques.

Alors OUI la fonction "Tension" n'a certainement aucun intérêt à vos yeux, j'en conviens, mais je me suis dit que cela pourrait être une occasion pour moi d'apprendre quelque chose.
Voilà pourquoi elle existe, tout simplement.

Je vous présente toutes mes excuses pour les erreurs que j'ai commises dans l’énoncé de mon problème.
En effet le couple infernal "Copier/Coller" a encore frappé.

La condition 3 doit être : Systolique 130 < SYS < 140 ET 85 < DIA < 90..
Et concernant la condition 4 la couleur de fond doit être rouge.

Concernant la remarque de TooFatBoy concernant le calcul de la tension, je me suis simplement référé au manuel d'utilisation du tensiomètre que je possède.
Ce tensiomètre indique 3 valeurs (celles des colonnes B,C,D, ...), et les mesures sont exprimées en mmHg (millimètres de Mercure). En fait ce que j'appelle la tension (Colonne E) est elle exprimée en cmHg (Centimètres de Mercure).

Peut-être n'aurais pas du mettre une virgule mais plutôt exprimer la tension sous la forme "12/7". N'étant pas médecin, que l'on veuille bien me pardonner cette approximation.
Voilà quelques explications qui je l'espère ne seront pas mal interprétées.

En attendant je vous remercie pour votre aide, et vais de ce pas examiner en détail la proposition de Fanch5 propositions et essayer d'en apprendre quelque chose.

Je vous souhaite à toutes et tous, une bonne journée.
 

fanch55

XLDnaute Barbatruc
Re,
Code amendé avec 3ème condition :
VB:
Sub Mfc_Feuil1()
Const Cyan = 15773696
Const Vert = 5287936
Const JaunOr = 49407
Const Rouge = 255
Worksheets("Feuil1").Activate
Worksheets("Feuil1").Cells.FormatConditions.Delete
    
    With [$E$4:$E$38].FormatConditions
        With .Add(Type:=xlExpression, Formula1:="=ET($B4<120;$C4<80;$E4<>"""")")
             .Interior.Color = Cyan
             .StopIfTrue = Faux
        End With
        With .Add(Type:=xlExpression, Formula1:="=ET($B4<130;$C4<85;$E4<>"""")")
             .Interior.Color = Vert
             .StopIfTrue = Faux
        End With
        With .Add(Type:=xlExpression, Formula1:="=ET($B4<130;85<$C4;$C4<90;$E4<>"""")")
             .Interior.Color = JaunOr
             .StopIfTrue = Faux
        End With
        With .Add(Type:=xlExpression, Formula1:="=ET(120<$B4;$B4<139;85<$C4;$C4<89;$E4<>"""")")
             .Interior.Color = Rouge
             .StopIfTrue = Faux
        End With
    End With
        
    With [$I$4:$I$38].FormatConditions
        With .Add(Type:=xlExpression, Formula1:="=ET($F4<120;$G4<80;$I4<>"""")")
             .Interior.Color = Cyan
             .StopIfTrue = Faux
        End With
        With .Add(Type:=xlExpression, Formula1:="=ET($F4<130;$G4<85;$I4<>"""")")
             .Interior.Color = Vert
             .StopIfTrue = Faux
        End With
        With .Add(Type:=xlExpression, Formula1:="=ET($F4<130;85<$G4;$G4<90;$I4<>"""")")
             .Interior.Color = JaunOr
             .StopIfTrue = Faux
        End With
        With .Add(Type:=xlExpression, Formula1:="=ET(120<$F4;$F4<139;85<$G4;$G4<89;$I4<>"""")")
             .Interior.Color = Rouge
             .StopIfTrue = Faux
        End With
    End With
        
    With [$M$4:$M$38].FormatConditions
        With .Add(Type:=xlExpression, Formula1:="=ET($J4<120;$K4<80;$M4<>"""")")
             .Interior.Color = Cyan
             .StopIfTrue = Faux
        End With
        With .Add(Type:=xlExpression, Formula1:="=ET($J4<130;$K4<85;$M4<>"""")")
             .Interior.Color = Vert
             .StopIfTrue = Faux
        End With
        With .Add(Type:=xlExpression, Formula1:="=ET($J4<130;85<$K4;$K4<90;$M4<>"""")")
             .Interior.Color = JaunOr
             .StopIfTrue = Faux
        End With
        With .Add(Type:=xlExpression, Formula1:="=ET(120<$J4;$J4<139;85<$K4;$K4<89;$M4<>"""")")
             .Interior.Color = Rouge
             .StopIfTrue = Faux
        End With
    End With
        
End Sub
Attention: des tensions identiques ont des couleurs différentes , des tensions élevées n'en ont pas ...
1687248055730.png
 

jeff1494

XLDnaute Occasionnel
Merci Fanch55;
En effet, mais je remarque que si on regarde les valeurs SYS et DIA de cet exemple elles ne sont pas identiques. Je vais aller à la pêche aux informations sur les limites de tension. Des fois que j'ai loupé quelque chose.
En tous cas je te remercie pour ton aide.
Bonne journée à toi.
 

TooFatBoy

XLDnaute Barbatruc
Peut-être n'aurais pas du mettre une virgule mais plutôt exprimer la tension sous la forme "12/7".
OK, je comprends mieux. Merci pour ton explication.👍

Ce n'est donc pas un nombre décimal, mais ce sont deux nombres différents (séparés ici par une virgule).
On peut effectuer une modification pour, soit garder ton principe de nombre décimal mais en allant au centième, soit utiliser ton idée de séparation par un / (ou autre chose).

Aller au centième donnerait par exemple 14,10 et 14,09 pour reprendre les valeurs de ma capture d'écran.
Perso, J'ajouterais même un arrondi pour que 92 donne 09 et que 95 donne 10.
Tout ça doit pouvoir être fait aussi par formule et MFC, donc sans VBA, si tu préfères.
 

jeff1494

XLDnaute Occasionnel
Merci TooFatBoy;
En fait je devrait peut-être passer par une séparation avec un "/" d'une part et voir en effet le problème d'arrondi.
Car comme dans ton exemple si la valeur de DIA est < 100 alors j'ai un problème d'arrondi.
En effet avec ce qui existe si SYS=145 et DIA=102 le résultat de 14,1 est cohérent, mais à contrario si SYS=145 et DIA=99 alors le résultat de 14,9 est totalement stupide.

Le fait vient que je traite des nombres qui sont exprimés en unité de mmHG (millimètres de Mercure) et que je veux afficher des nombres exprimés en cmHg. C'est lors de la "conversion" qu'apparait le problème d'arrondi.

J'avoue humblement que je ne suis pas du tout à l'aise avec les arrondis. Donc je vais devoir chercher la solution. Je vais essayer de voir comment le médecin fait pour nous annoncer le chiffre de la tension. Existe-t-il une règle ou pas.

Bref je n'en ai pas fini avec ce qui me semblait tout compte fait assez simple.
Merci pour ton aide et tes remarques très pertinentes.
 

Discussions similaires

Réponses
5
Affichages
279
Réponses
10
Affichages
274

Statistiques des forums

Discussions
312 207
Messages
2 086 238
Membres
103 162
dernier inscrit
fcfg