Programme / fontion

Résolu
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

  1. Contributeur
    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
    1. 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
  2. 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