Fonction
Fermé
ced5757
Messages postés
40
Date d'inscription
mercredi 8 mai 2013
Statut
Membre
Dernière intervention
20 mai 2013
-
20 mai 2013 à 11:28
ccm81 Messages postés 10559 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 24 mars 2023 - 20 mai 2013 à 15:56
ccm81 Messages postés 10559 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 24 mars 2023 - 20 mai 2013 à 15:56
5 réponses
f894009
Messages postés
16905
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
20 mars 2023
1 680
20 mai 2013 à 11:58
20 mai 2013 à 11:58
Bonjour,
Pour le cas que vous avez explique:
A vous de voir pour les autres cas, car vous seule, savez ce que vous avez ecrit!!!
Pour le cas que vous avez explique:
Function Ty(x As Double) As Double
If ([$e$16] = 0 And [$e$20] = [$d$9]) Then
Ty = [$p$13] - [$d$10] * x
ElseIf ([$e$16] >= 0 And [$e$16] < [$e$20] And [$e$20] = [$d$9]) Then
'correction 1
If (x >= 0 And x <= [$e$16]) Then
Ty = (-[$d$10] * x)
End If
ElseIf ([$e$16] <= x And x <= [$e$20]) Then
Ty = [$d$10] * ([$d$9] - x) - [$p$14]
ElseIf ([$e$20] >= 0 And [$e$20] < [$d$9]) Then
ElseIf ([$e$16] <= [p33] And [p33] <= [$e$20]) Then
Ty = -[$d$10] * x + [$p$13]
ElseIf ([$e$20] <= x And x <= [$d$9]) Then
Ty = [$d$10] * ([$d$9] - x)
ElseIf (0 <= [$e$16] And [$e$16] < [$d$9] And 0 <= [$e$20] And [$e$20] <= [$d$9]) Then
ElseIf (0 <= x And x <= [$e$16]) Then
Ty = -[$d$10] * x
ElseIf ([$e$16] <= x And x <= [$e$20]) Then
Ty = [$p$13] - [$d$10] * x
ElseIf ([$e$20] <= x And x <= [$d$9]) Then Ty = [$d$10] * ([$d$9] - x)
End If
End Function
A vous de voir pour les autres cas, car vous seule, savez ce que vous avez ecrit!!!
ccm81
Messages postés
10559
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
24 mars 2023
2 337
Modifié par ccm81 le 20/05/2013 à 12:02
Modifié par ccm81 le 20/05/2013 à 12:02
Bonjour
Il va falloir mettre de l'ordre dans tes conditionnelles
Ici, il y a un pb!
ElseIf (0 <= [$e$16] And [$e$16] < [$e$20] And [$e$20] = [$d$9]) Then
quoi ?
ElseIf (0 <= x And x <= [$e$16]) Then
est ce que ce dernier elseif ne serait pas un sous cas du 1° , dans ce cas, ce serait un if ...?
Un début, du moins avec ce que j'ai compris
Et vu la complexité de ton code, tu as intérêt à indenter scrupuleusement tes instructions
Bonne suite
Il va falloir mettre de l'ordre dans tes conditionnelles
Ici, il y a un pb!
ElseIf (0 <= [$e$16] And [$e$16] < [$e$20] And [$e$20] = [$d$9]) Then
quoi ?
ElseIf (0 <= x And x <= [$e$16]) Then
est ce que ce dernier elseif ne serait pas un sous cas du 1° , dans ce cas, ce serait un if ...?
Un début, du moins avec ce que j'ai compris
Function Ty(x As Double) As Double
If ([$e$16] = 0 And [$e$20] = [$d$9]) Then
Ty = [$p$13] - [$d$10] * x
ElseIf (0 <= [$e$16] And [$e$16] < [$e$20] And [$e$20] = [$d$9]) Then
If (0 <= x And x <= [$e$16]) Then
Ty = (-[$d$10] * x)
' après je ne sais pas comment se distinguent les cas/sou cas
' s'il n'y a pas de else au cas (0 <= x And x <= [$e$16]) > end if
' sinon > elseif
' mais il faudra clore avec un End if
End If
Et vu la complexité de ton code, tu as intérêt à indenter scrupuleusement tes instructions
Bonne suite
ced5757
Messages postés
40
Date d'inscription
mercredi 8 mai 2013
Statut
Membre
Dernière intervention
20 mai 2013
1
20 mai 2013 à 14:04
20 mai 2013 à 14:04
Oui en faite j'ai plein de sous cas ! C'est ça qui m'embête ...
ced5757
Messages postés
40
Date d'inscription
mercredi 8 mai 2013
Statut
Membre
Dernière intervention
20 mai 2013
1
20 mai 2013 à 14:06
20 mai 2013 à 14:06
dans le cas où j'ai trois sous cas dois je l'écrire comme ça ?
If (0 <= x And x <= [$e$16]) Then
Ty = -[$d$10] * x
ElseIf ([$e$16] <= x And x <= [$e$20]) Then
Ty = [$p$13] - [$d$10] * x
ElseIf ([$e$20] <= x And x <= [$d$9]) Then Ty = [$d$10] * ([$d$9] - x)
End If
If (0 <= x And x <= [$e$16]) Then
Ty = -[$d$10] * x
ElseIf ([$e$16] <= x And x <= [$e$20]) Then
Ty = [$p$13] - [$d$10] * x
ElseIf ([$e$20] <= x And x <= [$d$9]) Then Ty = [$d$10] * ([$d$9] - x)
End If
ccm81
Messages postés
10559
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
24 mars 2023
2 337
Modifié par ccm81 le 20/05/2013 à 15:17
Modifié par ccm81 le 20/05/2013 à 15:17
Ton dernier code ne distingue pas des sous-cas mais des cas (de même niveau) s'excluant mutuellement (elseif =sinon si )
Donc difficile de te répondre efficacement
Tu devrais commencer par écrire tout ça en bon français
Les cas de même niveau seront indentés (physiquement sur la même verticale)
Les cas de même niveau (Cas 1, Cas 2, Cas 3 par exemple - ou bien Cas1.1, Cas1.2, Cas 1.3 s'excluant mutuellement)
Le passage au code se fera alors plus efficacement. Si tu n'arrives pas à coder ton texte envoies le nous
RQ. Pour indenter ton code sur CCM (une fois les espaces de début de ligne posés) tu sélectionnes et tu cliques sur l'icône "Code" <> en haut à droite
Bon courage
Donc difficile de te répondre efficacement
Tu devrais commencer par écrire tout ça en bon français
Les cas de même niveau seront indentés (physiquement sur la même verticale)
Les cas de même niveau (Cas 1, Cas 2, Cas 3 par exemple - ou bien Cas1.1, Cas1.2, Cas 1.3 s'excluant mutuellement)
Cas 1. tu mets ta/tes conditions
Cas 1.1. (sous cas 1 du cas 1) tu mets ta/tes conditions
Cas 1.2. (sous cas 2 du cas 1) ...
Cas 1.2.1.
Cas 1.2.2.
Cas 1.3.
Cas 1.3.1.
Cas 1.3.2.
Cas 2.
Cas 2.1.
Cas 2.2.
Cas 3.
etc...
Le passage au code se fera alors plus efficacement. Si tu n'arrives pas à coder ton texte envoies le nous
RQ. Pour indenter ton code sur CCM (une fois les espaces de début de ligne posés) tu sélectionnes et tu cliques sur l'icône "Code" <> en haut à droite
Bon courage
ced5757
Messages postés
40
Date d'inscription
mercredi 8 mai 2013
Statut
Membre
Dernière intervention
20 mai 2013
1
20 mai 2013 à 15:31
20 mai 2013 à 15:31
J'ai mis un peu d'ordre. Mais ça ne fonctionne toujours pas. En effet dans le deuxieme cas, déjà il faut que je tire la cellule pour que la valeur change. De plus j'obtiens un ty=0 partout... Je ne comprends vraiment pas.
Function Ty(x As Double, Ya As Double, Yb As Double, Xa As Double, Xb As Double) As Double
If (Xa = 0 And Xb = [$d$9]) Then
Ty = Ya - [$d$10] * x
ElseIf (0 <= Xa And Xa < Xb And Xb = [$d$9]) Then
If (0 <= x And x <= Xa) Then
Ty = (-[$d$10] * x)
ElseIf (Xa <= x And x <= Xb) Then
Ty = [$d$10] * ([$d$9] - x) - Yb
ElseIf (Xa = 0 And 0 < Xb And Xb < [$d$9]) Then
If (Xa <= [p33] And [p33] <= Xb) Then
Ty = -[$d$10] * x + Ya
ElseIf (Xb <= x And x <= [$d$9]) Then
Ty = [$d$10] * ([$d$9] - x)
ElseIf (0 <= Xa And Xa < [$d$9] And 0 <= Xb And Xb <= [$d$9]) Then
If (0 <= x And x <= Xa) Then
Ty = -[$d$10] * x
ElseIf (Xa <= x And x <= Xb) Then
Ty = Ya - [$d$10] * x
ElseIf (Xb <= x And x <= [$d$9]) Then Ty = [$d$10] * ([$d$9] - x)
End If
End If
End If
End If
Function Ty(x As Double, Ya As Double, Yb As Double, Xa As Double, Xb As Double) As Double
If (Xa = 0 And Xb = [$d$9]) Then
Ty = Ya - [$d$10] * x
ElseIf (0 <= Xa And Xa < Xb And Xb = [$d$9]) Then
If (0 <= x And x <= Xa) Then
Ty = (-[$d$10] * x)
ElseIf (Xa <= x And x <= Xb) Then
Ty = [$d$10] * ([$d$9] - x) - Yb
ElseIf (Xa = 0 And 0 < Xb And Xb < [$d$9]) Then
If (Xa <= [p33] And [p33] <= Xb) Then
Ty = -[$d$10] * x + Ya
ElseIf (Xb <= x And x <= [$d$9]) Then
Ty = [$d$10] * ([$d$9] - x)
ElseIf (0 <= Xa And Xa < [$d$9] And 0 <= Xb And Xb <= [$d$9]) Then
If (0 <= x And x <= Xa) Then
Ty = -[$d$10] * x
ElseIf (Xa <= x And x <= Xb) Then
Ty = Ya - [$d$10] * x
ElseIf (Xb <= x And x <= [$d$9]) Then Ty = [$d$10] * ([$d$9] - x)
End If
End If
End If
End If
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
ccm81
Messages postés
10559
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
24 mars 2023
2 337
20 mai 2013 à 15:56
20 mai 2013 à 15:56
En indentant proprement ton code tel qu'il est écrit pour y voir plus clair
RQ1. D'après les 3 premières lignes, la fonction n'est "calculée" que si Xb =[$d$9]
- est ce normal
- si oui les And Xb <= [$d$9] ultérieurs sont inutiles et on peut commencer par distinguer les deux cas
Si Xb <> [$d$9] alors
'message d'erreur'
Sinon
' on y va
- si non il te faut repenser ton approche
Mais le mieux est de procéder comme je t'ai conseillé dans mon message précédent
Function Ty(x As Double, Ya As Double, Yb As Double, Xa As Double, Xb As Double) As Double
If (Xa = 0 And Xb = [$d$9]) Then
Ty = Ya - [$d$10] * x
ElseIf (0 <= Xa And Xa < Xb And Xb = [$d$9]) Then
If (0 <= x And x <= Xa) Then
Ty = (-[$d$10] * x)
ElseIf (Xa <= x And x <= Xb) Then
Ty = [$d$10] * ([$d$9] - x) - Yb
ElseIf (Xa = 0 And 0 < Xb And Xb < [$d$9]) Then
If (Xa <= [p33] And [p33] <= Xb) Then
Ty = -[$d$10] * x + Ya
ElseIf (Xb <= x And x <= [$d$9]) Then
Ty = [$d$10] * ([$d$9] - x)
ElseIf (0 <= Xa And Xa < [$d$9] And 0 <= Xb And Xb <= [$d$9]) Then
If (0 <= x And x <= Xa) Then
Ty = -[$d$10] * x
ElseIf (Xa <= x And x <= Xb) Then
Ty = Ya - [$d$10] * x
ElseIf (Xb <= x And x <= [$d$9]) Then
Ty = [$d$10] * ([$d$9] - x)
End If
End If
End If
End If
End Function
RQ1. D'après les 3 premières lignes, la fonction n'est "calculée" que si Xb =[$d$9]
- est ce normal
- si oui les And Xb <= [$d$9] ultérieurs sont inutiles et on peut commencer par distinguer les deux cas
Si Xb <> [$d$9] alors
'message d'erreur'
Sinon
' on y va
- si non il te faut repenser ton approche
Mais le mieux est de procéder comme je t'ai conseillé dans mon message précédent
20 mai 2013 à 14:07