Se connecter avec
S'enregistrer | Connectez-vous

Iif dans requete ou VB?

Dernière réponse : dans Programmation

Bonjour,

j'ai une bd access (97) dans laquelle je crée via une requête, une table qui affiche un résultat selon calcul de valeurs.

table Contrôles comprenant:
id_Contrôle, Valeur 1, Valeur 2, Valeur 3 (qyi servent de référence pour le calcul)

table Résultats comprenant:
date,
id_Contrôle,
Valeur brute (que je rentre manuellement)

table Résultats analyse construite via requête
date,
id_Contrôle,
Valeur brute,
résultat du mois en cours => dans field:"Résultat du mois en cours": IIf(Résultats.[Valeur brute]=0 And Résultats.[Valeur autre] Is Null;"soleil";IIf(Résultats.[Valeur brute]<15 And Résultats.[Valeur autre] Is Null;"assez satisfaisant";IIf(Résultats.[Valeur brute]>15 And Résultats.[Valeur autre] Is Null;"peu satisfaisant";"insatifsfaisant")))

Question:

j'ai un calcul différent selon l'id_Contrôle, comment intégrer pour chaque id_Contrôle un calcul différent? Faut-il passer par du VB? ou puis-je faire quelque chose du genre: "iif [id_contrôle] then.. ou exécuter une sous-requête?

Merci par avance pour votre aide en espérant être suffisamment claire?

Autres pages sur : iif requete

Lassé par la pub ? Créez un compte
Expert Programmation

Salut,

La fonction IIf() contient 3 clauses : la condition, la valeur renvoyée si la condition est vraie et la valeur renvoyée si la condition est fausse.
Il n'y a donc pas de Then à attendre.

Voici ta ligne, avec des sauts de lignes indentées pour mieux comprendre :
  1. IIf(
  2. Résultats.[Valeur brute]=0 And
  3. Résultats.[Valeur autre] Is Null;
  4.  
  5. "soleil";
  6.  
  7. IIf(
  8. Résultats.[Valeur brute]<15 And
  9. Résultats.[Valeur autre] Is Null;
  10.  
  11. "assez satisfaisant";
  12.  
  13. IIf(
  14. Résultats.[Valeur brute]>15 And
  15. Résultats.[Valeur autre] Is Null;
  16.  
  17. "peu satisfaisant";
  18.  
  19. "insatifsfaisant" )))
En fait, tu as écris :
  1. If Résultats.[Valeur brute]=0 And
  2. Résultats.[Valeur autre] Is Null
  3. Then
  4. Valeur = "soleil";
  5. ElseIf Résultats.[Valeur brute]<15 And
  6. Résultats.[Valeur autre] Is Null
  7. Then
  8. Valeur = "assez satisfaisant";
  9. ElseIf Résultats.[Valeur brute]>15 And
  10. Résultats.[Valeur autre] Is Null
  11. Then
  12. Valeur = "peu satisfaisant"
  13. Else
  14. Valeur = "insatifsfaisant"
  15. End If


Bon, ben maintenant, à toi de bien comprendre puis de voir avec [id_contrôle].

(Ça t'aide tout ça ?)

Merci Zeb pour ta réponse.
Ce qui me manque:
j'ai une 15e de contrôles pour lesquels j'applique un calcul différent.
Comment gérer cela automatiquement? Je mets les valeurs qui correspondent à "satisfaisant", peu satisfaisant, etc..
J'ai une table dans laquelle je rentre les résultats mensuellement ("valeur brute").
Je dois comparer la valeur brute aux valeurs de calcul.
le résulat sera dans une table affichant par mois, satisfaisant ou peu satisfaisant: et cela je voudrais que ce soit automatique. (ça m'évite de regarder toujours mes fiches et me planter dans mon interprétation)
Merci pour ta réponse si tu as une idée.
Expert Programmation

Euh.... Ben si ce sera automatique :spamafote:  C'est le rôle de la jointure.

Voici une table de satisfaction :
Satisfaction
seuil_max,
seuil_min,
libellé

Ses données :
20, 16, Félicitations du jury
16, 14, Très bien
14, 12, Bien
12, 10, Assez bien
10, 8, Passable
8, 0, Insuffisant

Et une jointure sur une table de bulletin scolaire par exemple :
  1. SELECT
  2. b.nom_eleve,
  3. b.moyenne,
  4. s.mention
  5. FROM
  6. bulletin b,
  7. satisfaction s
  8. WHERE
  9. b.moyenne <= s.seuil_max
  10. AND b.moyenne > s.seuil_min

J'ai testé ton idée:
SELECT bulletin.[Nom eleve], bulletin.moyenne, satisfaction.seuil_max, satisfaction.seuil_min, satisfaction.libellé
FROM bulletin, satisfaction
WHERE (((bulletin.moyenne)<=[satisfaction].[seuil_max] And (bulletin.moyenne)>[satisfaction].[seuil_min]));

et voici le résultat:
Nom eleve moyenne seuil_max seuil_min libellé
lucie 18 20 16 Félicitations
didier 19 20 16 Félicitations
thomas 15 16 14 Très bien
alain 12 12 10 Assez bien
thomas 15 8 0 Insuffisant
lucie 18 8 0 Insuffisant
agnes 7 8 0 Insuffisant
alain 12 8 0 Insuffisant
didier 19 8 0 Insuffisant

Il y a un pb car les prénoms apparaissent avec la même moyenne et un résultat différent.
Lassé par la pub ? Créez un compte