Programme / fontion

Résolu/Fermé
ced5757 Messages postés 40 Date d'inscription mercredi 8 mai 2013 Statut Membre Dernière intervention 20 mai 2013 - 20 mai 2013 à 00:29
ced5757 Messages postés 40 Date d'inscription mercredi 8 mai 2013 Statut Membre Dernière intervention 20 mai 2013 - 20 mai 2013 à 01:05
Bonjour,
J'ai créé la fonction suivante :

Function Ty(x As Double) As Double


If ([$e$16] = 0 And [$e$20] = [$d$9]) Then Ty = [$p$13] - [$d$10] * x


If (0 < [$e$16] < [$e$20] And [$e$20] = [$d$9]) Then

If (0 < x < [$e$16]) Then Ty = (-[$d$10] * x)

ElseIf ([$e$16] < x < [$e$20]) Then Ty = [$d$10] * ([$d$9] - x) - [$p$14]

If ([$e$20] = 0 And 0 < [$e$20] < [$d$9]) Then
If ([$e$16] < [P33] < [$e$20]) Then Ty = -[$d$10] * x + [$p$13]
ElseIf ([$e$20] < x < [$d$9]) Then Ty = [$d$10] * ([$d$9] - x)

If (0 < [$e$16] < [$d$9] And 0 < [$e$20] < [$d$9]) Then
If (0 < x < [$e$16]) Then Ty = -[$d$10] * x
ElseIf ([$e$16] < x < [$e$20]) Then Ty = [$p$13] - [$d$10] * x
ElseIf ([$e$20] < x < [$d$9]) Then Ty = [$d$10] * ([$d$9] - x)


End If
End If
End If

Lorsque je la déplie elle ne fonctionne pas. En effet les résultats obtenus ne sont pas cohérents. je m'explique :
Dans le cas 1 ou e16 = 0 et e20 = d9 j'ai pour le premier ty = 450 car p13=450 et x=0 d10=90 dans le cas où x=0.1 j'ai ty = -9 alors qu'il devrait être égal à 441.

Merci de votre aide

2 réponses

ced5757 Messages postés 40 Date d'inscription mercredi 8 mai 2013 Statut Membre Dernière intervention 20 mai 2013 1
20 mai 2013 à 00:32
Dans le cas où j'applique la fonction sans la suite elle marche.

Function Ty(x As Double) As Double


If ([$e$16] = 0 And [$e$20] = [$d$9]) Then Ty = [$p$13] - [$d$10] * x

End functions
0
eriiic Messages postés 24600 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 21 octobre 2024 7 239
Modifié par eriiic le 20/05/2013 à 01:02
Bonjour,

tu n'as pas le droit d'écrire des trucs comme ça :
0 < [$e$16] < [$e$20]
(enfin si tu as le droit, mais je ne crois pas que ce soit ce que tu veuilles)
Essaie avec :
(0 < [$e$16] and [$e$16]< [$e$20])
même punition pour les autres....

Si tes autres tests sont positifs ton premier calcul est écrasé.
Comme tu es sensé traiter d'autres cas je ne comprend pas que tu n'utilises pas une suite de elseif. Tu seras sûr du passage dans une seule portion.

De plus si tu écris qcq chose derrière un Then, le If se termine sur cette ligne. Pas sûr que tu t'y retrouves bien parmis ce mélange de If sur 1 ligne et de If sur plusieurs lignes.
Ecris-les tous sur plusieurs lignes.

eric
Jamais tu ne répondras à un mp non sollicité...
Bon, ça c'est fait.
0
ced5757 Messages postés 40 Date d'inscription mercredi 8 mai 2013 Statut Membre Dernière intervention 20 mai 2013 1
20 mai 2013 à 01:05
Merci ! Mais il me dise que mes ElseIf doivent être précédé d'un If. Ce que je ne comprend pas c'est que la fonction marche si il n'y a pas la suite...
0