Macro pour afficher un message d'alerte
Bonjour à tous,
Me voici encore une fois coincé
Voilà, j'ai un petit tableau pour contrôler ma tension artérielle tous les jours et je voudrais qu'au fur et à mesure que j’inscris le nombre dans la colonne "E", une alerte s'affiche dans la colonne "H".
Le message d'alerte doit être pris dans le Tableau "Plage des valeurs de tension" à la colonne "J".
Exemple: Si le SYSTOLE dans la colonne "E6" est de 143, il doit s'afficher à la colonne "H" le résultat de la colonne "J" correspondant à une plage de nombres qui va de 140 à 159 dans la colonne "L", (c'est à dire ce qui correspond au Niveau 1 en colonne "J").
J’envoie ci-joint le fichier en question ce sera beaucoup plus clair.
Merci d'avance pour votre aide
Bonjour,
Ma petite contribution à tester (fonctions à affiner si besoin).
1 fonction Stystole, 1 fonction Diastole et 1 fonction de synthèse
ALT F11 pour visualiser le code.
Cdlt.
Option Explicit
Public Function Diag_Systole(S)
Select Case S
Case Is < 120
Diag_Systole = 1
Case 120 To 129
Diag_Systole = 2
Case 130 To 139
Diag_Systole = 3
Case 140 To 159
Diag_Systole = 4
Case 160 To 179
Diag_Systole = 5
Case Else
Diag_Systole = 6
End Select
End Function
Public Function Diag_Diastole(D)
Select Case D
Case Is < 80
Diag_Diastole = 1
Case 80 To 84
Diag_Diastole = 2
Case 85 To 89
Diag_Diastole = 3
Case 90 To 99
Diag_Diastole = 4
Case 100 To 109
Diag_Diastole = 5
Case Else
Diag_Diastole = 6
End Select
End Function
Public Function Diagnostic(Systole, Diastole)
Dim x As Integer, y As Integer
Dim résultat As Integer
If Systole = "" Or Diastole = "" Then
Exit Function
End If
x = Diag_Systole(Systole)
y = Diag_Diastole(Diastole)
résultat = Application.Max(x, y)
Select Case résultat
Case 1
Diagnostic = "Optimale"
Case 2
Diagnostic = "Normale"
Case 3
Diagnostic = "Haute"
Case 4
Diagnostic = "Niveau 1"
Case 5
Diagnostic = "Niveau 2"
Case Else
Diagnostic = "Niveau 3"
End Select
End Function
Un grand MERCI Jean-Eric,
Je essayé, ça marche parfaitement sans modifier quoi que ce soit.
Remarque, il vaut mieux que je ne modifier rien du tout car je me suis un peu plongé dans ton petit programme et j'ai commencé à avoir mal à la tête. Je commence à être persuadé que j'ai bien fait de ne pas vouloir persisté à faire des études de programmeur.
Bravo pour ta perspicacité et lucidité Jean-Eric. Merci encore.
Pour moi ce genre de petits services que vous autres rendez ici sur ce Forum font toujours un effet de satisfaction incomparable, comme si j'avais trouvé enfin la formule du Graal
A+
Bonjour
J'avais fait différemment
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 5 Then
'Cells(Target.Row, 2).Value = Date & " - " & Time
Cells(Target.Row, 2) = Now
Cells(Target.Row, 4) = "Sans"
Target.Offset(0, 3).Select
ActiveCell.FormulaR1C1 = _
"=IF(RC[-3]="""","""",CHOOSE(MATCH(RC[-3],{1000;179;159;129;129;119;0},-1),""Niveau 3"",""Niveau 2"",""Niveau 1"",""Haute"",""Normale"",""Optimale""))"
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
End If
End Sub
Cordialement
Merci aussi Amadéus,
en effet ça marche tout aussi bien. Je garderais donc aussi cette façon de faire, c'est toujours très intéressant de comparer selon nos besoins ce qui convient le mieux. Bravo donc. Vous êtes des génies du VBA, je m'incline. Chapeau bas.