Requête access - VraiFaux imbriqués

Nakemeg Messages postés 4 Date d'inscription samedi 20 juin 2009 Statut Membre Dernière intervention 26 novembre 2009 - 24 nov. 2009 à 13:13
tpoinsot Messages postés 345 Date d'inscription mardi 1 juin 2004 Statut Membre Dernière intervention 17 octobre 2014 - 26 nov. 2009 à 22:09
Bonjour à tous,

J'ai un petit problème avec une expression dans ma requête. J'ai une expression nommée "Nb mois brut" qui me calcule un nombre de mois entre deux dates le résultat comporte deux décimales. Avec ce résultat je dois créer une autre expression pour déterminer le "Nb de mois acquis". Ce nombre de mois acquis diffère selon les conditions suivantes :

Si Nb mois brut <1 alors Nb mois acquis 0
Si Nb mois brut >1<=2 alors Nb mois acquis = 1
Si Nb mois brut >2<=3 alors Nb mois acquis = 2
Si Nb mois brut >3<=4 alors Nb mois acquis = 3
Si Nb mois brut >4<=5 alors Nb mois acquis = 4
Si Nb mois brut >5<=6 alors Nb mois acquis = 5
Si Nb mois brut >6<=7 alors Nb mois acquis = 6
Si Nb mois brut >7<=8 alors Nb mois acquis = 7
Si Nb mois brut >8<=9 alors Nb mois acquis = 8
Si Nb mois brut >9 alors Nb mois acquis = 9

J'ai procédé de la sorte :

Nb mois acquis: VraiFaux([Nb mois brut]<="1";"0";VraiFaux([Nb mois brut]>"1"<="2";"1";VraiFaux([Nb mois brut]>"2"<="3";"2";VraiFaux([Nb mois brut]>"3"<="4";"3";VraiFaux([Nb mois brut]>"4"<="5";"4";VraiFaux([Nb mois brut]>"5"<="6";"5";VraiFaux([Nb mois brut]>"6"<="7";"6";VraiFaux([Nb mois brut]>"7"<="8";"7";VraiFaux([Nb mois brut]>"8"="9";"8";VraiFaux([Nb mois brut]>"9";"9";""))))))))

Malheureusement le résultat me renvoie 1 systématiquement.

Est ce que quelqu'un pourrait me donner une indication SVP je n'arrive pas à trouver de solution.

Merci par avance

6 réponses

tpoinsot Messages postés 345 Date d'inscription mardi 1 juin 2004 Statut Membre Dernière intervention 17 octobre 2014 4
24 nov. 2009 à 15:28
bonjour,
tes conditions devraient s'écrire
>"1" and <="2"

et puis tu peux simplifier, car quand tu testes >"1" tu es dans le 'else' du test <="1" donc c'est certain. contente toi du <="2".
tu es certain de devoir mettre des guillements ?

thip
0
ed73 Messages postés 276 Date d'inscription lundi 8 septembre 2008 Statut Membre Dernière intervention 15 avril 2013 2
24 nov. 2009 à 15:34
Bonjour,

Ya quand même bien plus simple !!!

Nb mois acquis = min(int(Nb Mois brut),9)
0
tpoinsot Messages postés 345 Date d'inscription mardi 1 juin 2004 Statut Membre Dernière intervention 17 octobre 2014 4
24 nov. 2009 à 15:42
raté ed73 : relis l'énoncé. Mais tu as raison, il y a plus simple, mais ce n'était pas la question.

pour i <x < i+1, int(x) i
il faut i < x <i+1, f(x) i


thip
0
tpoinsot Messages postés 345 Date d'inscription mardi 1 juin 2004 Statut Membre Dernière intervention 17 octobre 2014 4
24 nov. 2009 à 15:57
en C ce serait la fonction ceil :
Nb mois acquis = max(0,min(ceil(Nb Mois brut),9))

selon le sql, il peut y avoir une fonction qui remplace, sinon on peut utiliser "-int(-x)"

[Nb mois acquis] = max(0,-min(int(-[Nb Mois brut]),9))

thip
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Nakemeg Messages postés 4 Date d'inscription samedi 20 juin 2009 Statut Membre Dernière intervention 26 novembre 2009
26 nov. 2009 à 06:20
Un grand merci à vous deux pour vos réponses !

tpointsot, j'ai suivi ton conseil et en effet il fallait que je me contente de mettre <="2" etc et ça fonctionne parfaitement. Pour les guillemets ils ne sont pas nécessaire en effet.

Par contre j'ai voulu tester ta deuxième solution
[Nb mois acquis] = max(0,-min(int(-[Nb Mois brut]),9)) malheureusement ça ne fonctionne pas il me dit que la syntaxe n'est pas valide pourrais tu me donner une explication détaillée de l'expression stp.

merci d'avance
0
tpoinsot Messages postés 345 Date d'inscription mardi 1 juin 2004 Statut Membre Dernière intervention 17 octobre 2014 4
26 nov. 2009 à 22:09
Bonjour,
pour commencer, j'ai mis le - devant le min au lieu de le mettre devant int
[Nb mois acquis] = max(0,min(-int(-[Nb Mois brut]),9))

max(0, ... ) = élimine les négatifs, prends 0
min( ..., 9) = prends 9 si >9

-int(-x):
int(1.1) = 1 ; c'est pas ce que tu veux
int(-1.1) = -2 (idem de 1 à 2-epsilon)
-int(-1.1) = 2 (idem de -2 à -1-epsilon)

Tu devras peut-être remplacer les ',' par des ';'

thip
0
Rejoignez-nous