Iif dans requete ou VB?

  • Auteur de la discussion greenpeace_57
  • Date de début

greenpeace_57

Nouveau membre
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?
 

zeb

Modérateur
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 :
Code:
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" )))
En fait, tu as écris :
Code:
If Résultats.[Valeur brute]=0 And
   Résultats.[Valeur autre] Is Null
Then
    Valeur = "soleil";
ElseIf Résultats.[Valeur brute]<15 And
       Résultats.[Valeur autre] Is Null
Then
    Valeur = "assez satisfaisant";
ElseIf Résultats.[Valeur brute]>15 And
       Résultats.[Valeur autre] Is Null
Then
    Valeur = "peu satisfaisant"
Else
    Valeur = "insatifsfaisant"
End If

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

(Ça t'aide tout ça ?)
 

greenpeace_57

Nouveau membre
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.
 

zeb

Modérateur
Moi, à ta place, je ferais une table Satisfaction, et je ferais des jointures avec la tables de résultats.
 

greenpeace_57

Nouveau membre
mais dans ce cas, zeb, le calcul ne se fera pas automatiquement, l'idée est d'automatiser le plus possible pour simplifer la tâche et éviter les erreurs d'interprétation..
 

zeb

Modérateur
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 :
Code:
SELECT 
  b.nom_eleve,
  b.moyenne,
  s.mention
FROM 
  bulletin     b, 
  satisfaction s
WHERE 
      b.moyenne <= s.seuil_max
  AND b.moyenne >  s.seuil_min
 

greenpeace_57

Nouveau membre
Merci zeb pour prendre le temps de me répondre c'est vraiment très sympathique.
Comment se fait la jointure s'il n'y a pas de lien entre la table satisfaction et la table bulletin?
 

zeb

Modérateur
C'est la clause WHERE qui constitue la jointure entre les tables.
 

greenpeace_57

Nouveau membre
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.
 
Vous devez vous inscrire ou vous connecter pour répondre ici.
Derniers messages publiés
Statistiques globales
Discussions
730 134
Messages
6 718 054
Membres
1 586 393
Dernier membre
mathhh28
Partager cette page
Haut