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 comprendre 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.
Je veux bien utiliser la méthode évaluate, mais comment connaître déjà le résultat . Et puis la fonction évaluate, je ne sais pas où la trouver.
greffier.
"AV" a écrit dans le message de news:
J'ai été surpris par la function round en VBA Excel 97 :
Utilise la fonction de feuille de calcul (avec la méthode Evaluate) plutôt que
la fonction vba
exemples : MsgBox [round(15.2589,2)]
Avec des variables : y = 15.2589: z = 2 MsgBox Evaluate("round(" & y & "," & z & ")")
AV
ClémentMarcotte
Bonjour,
Il n'y a pas de fonction native Round() en VBA Office 97, et de toutes façons celle de VBA pour Office 2000 et + ne vaut qu'un demi-clou rouillé cassé.
Val ne vaut rien quand le séparateur décimal est la virgule. Utiliser Csng() ou CDbl() à la place.
Tes Instr() cherchent le point comme séparateur décimal.
"Greffier" a écrit dans le message de news:e$
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.
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 comprendre 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
Bonjour,
Il n'y a pas de fonction native Round() en VBA Office 97, et de toutes
façons celle de VBA pour Office 2000 et + ne vaut qu'un demi-clou rouillé
cassé.
Val ne vaut rien quand le séparateur décimal est la virgule. Utiliser Csng()
ou CDbl() à la place.
Tes Instr() cherchent le point comme séparateur décimal.
"Greffier" <spam@spam.fr> a écrit dans le message de
news:e$7DZAwoFHA.420@TK2MSFTNGP09.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.
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 comprendre 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.
Il n'y a pas de fonction native Round() en VBA Office 97, et de toutes façons celle de VBA pour Office 2000 et + ne vaut qu'un demi-clou rouillé cassé.
Val ne vaut rien quand le séparateur décimal est la virgule. Utiliser Csng() ou CDbl() à la place.
Tes Instr() cherchent le point comme séparateur décimal.
"Greffier" a écrit dans le message de news:e$
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.
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 comprendre 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 Marcotte,
Alors, que faudrait-il faire ou changer dans les calculs. merci, quand même pour vos remarques que j'ignorai totalement.
greffier.
"ClémentMarcotte" a écrit dans le message de news:
Bonjour,
Il n'y a pas de fonction native Round() en VBA Office 97, et de toutes façons celle de VBA pour Office 2000 et + ne vaut qu'un demi-clou rouillé cassé.
Val ne vaut rien quand le séparateur décimal est la virgule. Utiliser Csng()
ou CDbl() à la place.
Tes Instr() cherchent le point comme séparateur décimal.
"Greffier" a écrit dans le message de news:e$
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.
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 comprendre 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
Bonjour Marcotte,
Alors, que faudrait-il faire ou changer dans les calculs.
merci, quand même pour vos remarques que j'ignorai totalement.
greffier.
"ClémentMarcotte" <clement.marcotte@sympatico.ca> a écrit dans le message de
news:e0zYGtyoFHA.2916@TK2MSFTNGP14.phx.gbl...
Bonjour,
Il n'y a pas de fonction native Round() en VBA Office 97, et de toutes
façons celle de VBA pour Office 2000 et + ne vaut qu'un demi-clou rouillé
cassé.
Val ne vaut rien quand le séparateur décimal est la virgule. Utiliser
Csng()
ou CDbl() à la place.
Tes Instr() cherchent le point comme séparateur décimal.
"Greffier" <spam@spam.fr> a écrit dans le message de
news:e$7DZAwoFHA.420@TK2MSFTNGP09.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.
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 comprendre 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.
Alors, que faudrait-il faire ou changer dans les calculs. merci, quand même pour vos remarques que j'ignorai totalement.
greffier.
"ClémentMarcotte" a écrit dans le message de news:
Bonjour,
Il n'y a pas de fonction native Round() en VBA Office 97, et de toutes façons celle de VBA pour Office 2000 et + ne vaut qu'un demi-clou rouillé cassé.
Val ne vaut rien quand le séparateur décimal est la virgule. Utiliser Csng()
ou CDbl() à la place.
Tes Instr() cherchent le point comme séparateur décimal.
"Greffier" a écrit dans le message de news:e$
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.
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 comprendre 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
ClémentMarcotte
Je n'ai pas envie de refaire tes classeurs pour tester.
Commence par ré-essayer avec:
1) Le point comme séparateur décimal dans tes paramètres régionaux
ou
2) remplacer les val par cdbl
(Si ce qui marchait devient ce qui ne marche pas et l'inverse, va falloir que tu te choisisses un séparateur décimal unique et que tu ajustes tes programmes en conséquence.)
"Greffier" a écrit dans le message de news:
Bonjour Marcotte,
Alors, que faudrait-il faire ou changer dans les calculs. merci, quand même pour vos remarques que j'ignorai totalement.
greffier.
"ClémentMarcotte" a écrit dans le message de
news:
Bonjour,
Il n'y a pas de fonction native Round() en VBA Office 97, et de toutes façons celle de VBA pour Office 2000 et + ne vaut qu'un demi-clou rouillé
cassé.
Val ne vaut rien quand le séparateur décimal est la virgule. Utiliser Csng()
ou CDbl() à la place.
Tes Instr() cherchent le point comme séparateur décimal.
"Greffier" a écrit dans le message de news:e$
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
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 comprendre 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
Je n'ai pas envie de refaire tes classeurs pour tester.
Commence par ré-essayer avec:
1) Le point comme séparateur décimal dans tes paramètres régionaux
ou
2) remplacer les val par cdbl
(Si ce qui marchait devient ce qui ne marche pas et l'inverse, va falloir
que tu te choisisses un séparateur décimal unique et que tu ajustes tes
programmes en conséquence.)
"Greffier" <spam@spam.fr> a écrit dans le message de
news:uISrdqzoFHA.2916@TK2MSFTNGP14.phx.gbl...
Bonjour Marcotte,
Alors, que faudrait-il faire ou changer dans les calculs.
merci, quand même pour vos remarques que j'ignorai totalement.
greffier.
"ClémentMarcotte" <clement.marcotte@sympatico.ca> a écrit dans le message
de
news:e0zYGtyoFHA.2916@TK2MSFTNGP14.phx.gbl...
Bonjour,
Il n'y a pas de fonction native Round() en VBA Office 97, et de toutes
façons celle de VBA pour Office 2000 et + ne vaut qu'un demi-clou
rouillé
cassé.
Val ne vaut rien quand le séparateur décimal est la virgule. Utiliser
Csng()
ou CDbl() à la place.
Tes Instr() cherchent le point comme séparateur décimal.
"Greffier" <spam@spam.fr> a écrit dans le message de
news:e$7DZAwoFHA.420@TK2MSFTNGP09.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
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 comprendre 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.
Je n'ai pas envie de refaire tes classeurs pour tester.
Commence par ré-essayer avec:
1) Le point comme séparateur décimal dans tes paramètres régionaux
ou
2) remplacer les val par cdbl
(Si ce qui marchait devient ce qui ne marche pas et l'inverse, va falloir que tu te choisisses un séparateur décimal unique et que tu ajustes tes programmes en conséquence.)
"Greffier" a écrit dans le message de news:
Bonjour Marcotte,
Alors, que faudrait-il faire ou changer dans les calculs. merci, quand même pour vos remarques que j'ignorai totalement.
greffier.
"ClémentMarcotte" a écrit dans le message de
news:
Bonjour,
Il n'y a pas de fonction native Round() en VBA Office 97, et de toutes façons celle de VBA pour Office 2000 et + ne vaut qu'un demi-clou rouillé
cassé.
Val ne vaut rien quand le séparateur décimal est la virgule. Utiliser Csng()
ou CDbl() à la place.
Tes Instr() cherchent le point comme séparateur décimal.
"Greffier" a écrit dans le message de news:e$
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
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 comprendre 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.