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 :
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
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.
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
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
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
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.
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
Bonjour,
Dans ma précipitation, j'ai laissé les quotes. bien entendu, il faut les
enlever.
Greffier.
"Greffier" <spam@spam.fr> a écrit dans le message de
news:%23Qk7M2joFHA.1464@TK2MSFTNGP14.phx.gbl...
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
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
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.
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
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
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.