OVH Cloud OVH Cloud

function round

1 réponse
Avatar
Greffier
Bonjour,

J'ai été surpris par la function round en VBA Excel 97 :
1 - à chaque exécution, elle est définie comme une fonction n'existant pas.
2 - j'ai donc recherché dans les faq dans les moteurs, l'explication.
Plusieurs intervenants ont proposé la fonction round suivante :

Public Function Round(chiffre As Double, décimal As Integer) As Double
chiffre = chiffre * (10 ^ décimal)
If Int(chiffre) <> chiffre Then
Round = Int(IIf(Int(Mid(chiffre, InStr(1, Str(chiffre), "."), 1)) >=
5, chiffre + 1, chiffre))
Else
Round = chiffre
End If
Round = Round / (10 ^ décimal)
End Function

cette fonction marche bien dans quelques cas comme celui-ci (calcul de
l'indicateur de masse corporelle), qui édite correctement la valeur dans le
formulaire de calcul :

Private Sub CmdCalcul_Click()
Dim vIMC

vIMC = Round((Val(TxtPoids) / Val(TxtTaille) ^ 2 * 10000), 1)
LblIMC.Caption = "IMC = " & vIMC
FrmIMC.Width = 250


Public Function Round(chiffre As Double, décimal As Integer) As Double
chiffre = chiffre * (10 ^ décimal)
If Int(chiffre) <> chiffre Then
Round = Int(IIf(Int(Mid(chiffre, InStr(1, Str(chiffre), "."), 1)) >=
5, chiffre + 1, chiffre))
Else
Round = chiffre
End If
Round = Round / (10 ^ décimal)
End Function

dans un autre formulaire, de calcul cette valeur est nulle :

Private Sub CmdOK_Click()
Dim vMessage, vErreur, vIMC, vPoidsMin, vPoidsMax
Dim vPrénom, vSexe, vTaille, vPoids, vPerdre
Dim vValMin, vValMax
vPrénom = TxtPrénom
vSexe = CmbSexe
vPoids = TxtPoids
vTaille = TxtTaille


'vIMC = Round((Val(TxtPoids) / Val(TxtTaille) ^ 2 * 10000), 1)
'vPoidsMin = Round((18.5 * Val(vTaille) ^ 2 / 10000), 1)
'vPoidsMax = Round((24.9 * Val(vTaille) ^ 2 / 10000), 1)
'vPerdre = Round((vPoids - vPoidsMax), 1)
'MsgBox vIMC, vbOKOnly, "IMC"
'MsgBox vPoidsMin, vbOKOnly, "Poids min"
'MsgBox vPoidsMax, vbOKOnly, "Poids max"
'MsgBox vPerdre, vbOKOnly, "Perdre"
vIMC = ((Val(vPoids) / Val(vTaille) ^ 2 * 10000))
vPoidsMin = ((18.5 * vTaille ^ 2 / 10000))
vPoidsMax = ((24.9 * vTaille ^ 2 / 10000))

If Val(vPoids) > vPoidsMax Then
vMessage = vPrénom & "," & vbCr & _
"ton indice de masse corporelle est de " & vIMC & vbCr & _
"tu dois perdre " & Round((vPoids - vPoidsMax), 1) & _
" kilo" & IIf(Round((vPoids - vPoidsMax), 1) >= 2, "s " & vbCr &
"Courage !", "")
End If

MsgBox vMessage, vbOKOnly, "Premier bilan"
End Sub

Public Function Round(chiffre As Double, décimal As Integer) As Double
chiffre = chiffre * (10 ^ décimal)
If Int(chiffre) <> chiffre Then
Round = Int(IIf(Int(Mid(chiffre, InStr(1, Str(chiffre), "."), 1)) >=
5, chiffre + 1, chiffre))
Else
Round = chiffre
End If
Round = Round / (10 ^ décimal)
End Function

3 - enfin, si j'élimine la fonction round, j'obtiens un résultat avec au 8
chiffres, pourquoi.

'If Val(vPoids) > vPoidsMax Then
' vMessage = vPrénom & "," & vbCr & _
' "ton indice de masse corporelle est de " & vIMC & vbCr & _
' "tu dois perdre " & (vPoids - vPoidsMax) & _
' " kilo" & IIf((vPoids - vPoidsMax) >= 2, "s " & vbCr & "Courage !", "")
'End If

Vous l'avez compris je ne suis pas spécialement un programmeur, mais
j'aimerais coùprendre si j'ai oublié un élément quelconque ou si la fonction
est mal située ou s'il faut un calcul intermédiaire....



Je suis prêt à expédier à quiconque le source de ce programme qui a été
lui-même récupéré sur une faq de santé, ou entrer en contact.

Merci de toutes vos suggestions.


Greffier
greffier

1 réponse

Avatar
Greffier
Bonjour,

Dans ma précipitation, j'ai laissé les quotes. bien entendu, il faut les
enlever.

Greffier.



"Greffier" a écrit dans le message de
news:%
Bonjour,

J'ai été surpris par la function round en VBA Excel 97 :
1 - à chaque exécution, elle est définie comme une fonction n'existant
pas.

2 - j'ai donc recherché dans les faq dans les moteurs, l'explication.
Plusieurs intervenants ont proposé la fonction round suivante :

Public Function Round(chiffre As Double, décimal As Integer) As Double
chiffre = chiffre * (10 ^ décimal)
If Int(chiffre) <> chiffre Then
Round = Int(IIf(Int(Mid(chiffre, InStr(1, Str(chiffre), "."), 1))
5, chiffre + 1, chiffre))
Else

Round = chiffre
End If
Round = Round / (10 ^ décimal)
End Function

cette fonction marche bien dans quelques cas comme celui-ci (calcul de
l'indicateur de masse corporelle), qui édite correctement la valeur dans
le

formulaire de calcul :

Private Sub CmdCalcul_Click()
Dim vIMC

vIMC = Round((Val(TxtPoids) / Val(TxtTaille) ^ 2 * 10000), 1)
LblIMC.Caption = "IMC = " & vIMC
FrmIMC.Width = 250


Public Function Round(chiffre As Double, décimal As Integer) As Double
chiffre = chiffre * (10 ^ décimal)
If Int(chiffre) <> chiffre Then
Round = Int(IIf(Int(Mid(chiffre, InStr(1, Str(chiffre), "."), 1))
5, chiffre + 1, chiffre))
Else

Round = chiffre
End If
Round = Round / (10 ^ décimal)
End Function

dans un autre formulaire, de calcul cette valeur est nulle :

Private Sub CmdOK_Click()
Dim vMessage, vErreur, vIMC, vPoidsMin, vPoidsMax
Dim vPrénom, vSexe, vTaille, vPoids, vPerdre
Dim vValMin, vValMax
vPrénom = TxtPrénom
vSexe = CmbSexe
vPoids = TxtPoids
vTaille = TxtTaille


'vIMC = Round((Val(TxtPoids) / Val(TxtTaille) ^ 2 * 10000), 1)
'vPoidsMin = Round((18.5 * Val(vTaille) ^ 2 / 10000), 1)
'vPoidsMax = Round((24.9 * Val(vTaille) ^ 2 / 10000), 1)
'vPerdre = Round((vPoids - vPoidsMax), 1)
'MsgBox vIMC, vbOKOnly, "IMC"
'MsgBox vPoidsMin, vbOKOnly, "Poids min"
'MsgBox vPoidsMax, vbOKOnly, "Poids max"
'MsgBox vPerdre, vbOKOnly, "Perdre"
vIMC = ((Val(vPoids) / Val(vTaille) ^ 2 * 10000))
vPoidsMin = ((18.5 * vTaille ^ 2 / 10000))
vPoidsMax = ((24.9 * vTaille ^ 2 / 10000))

If Val(vPoids) > vPoidsMax Then
vMessage = vPrénom & "," & vbCr & _
"ton indice de masse corporelle est de " & vIMC & vbCr & _
"tu dois perdre " & Round((vPoids - vPoidsMax), 1) & _
" kilo" & IIf(Round((vPoids - vPoidsMax), 1) >= 2, "s " & vbCr &
"Courage !", "")
End If

MsgBox vMessage, vbOKOnly, "Premier bilan"
End Sub

Public Function Round(chiffre As Double, décimal As Integer) As Double
chiffre = chiffre * (10 ^ décimal)
If Int(chiffre) <> chiffre Then
Round = Int(IIf(Int(Mid(chiffre, InStr(1, Str(chiffre), "."), 1))
5, chiffre + 1, chiffre))
Else

Round = chiffre
End If
Round = Round / (10 ^ décimal)
End Function

3 - enfin, si j'élimine la fonction round, j'obtiens un résultat avec au 8
chiffres, pourquoi.

'If Val(vPoids) > vPoidsMax Then
' vMessage = vPrénom & "," & vbCr & _
' "ton indice de masse corporelle est de " & vIMC & vbCr & _
' "tu dois perdre " & (vPoids - vPoidsMax) & _
' " kilo" & IIf((vPoids - vPoidsMax) >= 2, "s " & vbCr & "Courage !",
"")

'End If

Vous l'avez compris je ne suis pas spécialement un programmeur,
mais

j'aimerais coùprendre si j'ai oublié un élément quelconque ou si la
fonction

est mal située ou s'il faut un calcul intermédiaire....



Je suis prêt à expédier à quiconque le source de ce programme qui a été
lui-même récupéré sur une faq de santé, ou entrer en contact.

Merci de toutes vos suggestions.


Greffier
greffier