Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Requêtes et SQL. Discussion :

Requête calcul de la moyenne obtenue dans une discipline


Sujet :

Requêtes et SQL.

  1. #1
    Nouveau membre du Club
    Requête calcul de la moyenne obtenue dans une discipline
    Bonsoir le Forum!
    J'ai un souci pour gérer les spécificités dans le calcul de la moyenne par discipline. J'ai essayé de passer par l'Assistant Requête mais je suis bloqué

    D'abord nous précisons que:
    MD=Moyenne des devoirs; CP=Composition; MM= Moyenne par matière; MS=Moyenne semestrielle

    Chez nous de façon générale, MM=(MD+CP)/2
    Mais comment gérer les particularités?
    Cas 1: Certaines classes ne composent dans certaines disciplines donc n'ont pas de note de composition
    Cas 2: Un élève peut justifier son son absence à une composition.
    Dans les deux cas sus-mentionnés MM=MD
    Cas 3: Un élève peut rater un devoir mais a fait la composition. Là l'élève n'a pas le même nombre de devoirs que ses camarades. Si par exemple les autres ont trois notes de devoirs, lui il en a deux. Ce qui veut dire que pour les autres MD = (Devoir 1 + Devoir 2 + Devoir 3)/3 et pour lui MD= (Devoir 1 + Devoir 2)/2

    Merci
    djibysadji

  2. #2
    Membre expert
    Bonjour,

    Lorsque tu lances le calcul de MD, je proposes que dans uns premier temps tu remplisses (par code VBA) une table temporaire
    comme T_temp_MD qui contient les colonnes :

    eleve_id long (identifiant de l'élève)
    matiere_id long (id discipline)
    nb_MD long (nd des devoirs à prendre en compte)
    MD double (moyenne des devoirs pris en compte)
    nb_CP long (Composition à prendre en compte : 1 ou 0)
    CP double (note Composition)
    MM double (pour stocker le calcul MM)

    ainsi il faut d'abord s'occuper de calculer MD et nb_MD (ton cas 3)
    une fois les champs nb_MD, MD, nb_CP et CP, il est facile de calculer MM selon ton algo

    cordialement
    "Always look at the bright side of life." Monty Python.

  3. #3
    Nouveau membre du Club
    Re
    Bonjour, micniv!
    Merci beaucoup pour la réponse.
    J'ai oublié de préciser que j'étais un débutant. Donc il me sera difficile de mettre en application ta proposition. Si tu pouvais me donner plus de détails cela me permettrait de mieux comprendre. Un code par exemple

    djibysadji

  4. #4
    Membre expert
    bonjour, djibysadji

    Je vais te donner du travail ... à comprendre ma solution.
    Alors regarde tranquillement la solution ci-jointe que je te propose.
    Il y a beaucoup de nouveaux concepts pour un débutant mais c'est ainsi que je résoudrais ta problématique.
    A commencer par un travail d'analyse nécessaire sur les données : vois le schéma relationnel.

    Modus operandi :

    pour saisir les notes d'un devoir, utilise la requete R_note_attribuer (préalablement, il faut saisir la classe, l'élève, le devoir)

    le détail des notes est affiché dans R_classe_eleve_note

    une fois les notes saisies pour une classe, une matière, le formulaire F_calcul_MM permet de calculer les moyennes MM, les résultats sont stockés dans la table T_calcul_MM et affichés plus humainment dans R_calcul_MM_resultats


    Bien sûr si tu as des questions ...

    Cordialement
    "Always look at the bright side of life." Monty Python.

  5. #5
    Nouveau membre du Club
    Re
    Bonjour micniv!
    Toutes nos excuses pour n'avoir pas répondu un peu plus tôt.
    J'ai regardé le fichier que vous avez joint. Oui j'ai compris votre démarche.
    Mais j'ai un autre problème: dans chaque classe je dois faire deux classements:
    1) Un classement par discipline (Naturellement le classement se fera sur la base de la moyenne obtenue dans la discipline)
    2) Un classement par rapport à la moyenne semestrielle (MS). Parlant de la MS, étant donné que la somme des coefficients varie selon la classe, comment faire pour calculer cette moyenne semestrielle?

    Merci beaucoup pour l'appui que vous m'apportez.

    djibysadji

  6. #6
    Membre expert
    Excuses acceptées ...

    Parlant de la MS, étant donné que la somme des coefficients varie selon la classe, ...
    S'agit-il bien du coefficient de la discipline pour calculer le moyenne MS ?
    Et donc ce coefficient serait spécifique à chaque classe ?

    A+
    "Always look at the bright side of life." Monty Python.

  7. #7
    Nouveau membre du Club
    Re
    Citation Envoyé par micniv Voir le message
    Excuses acceptées ...


    S'agit-il bien du coefficient de la discipline pour calculer le moyenne MS ?
    Et donc ce coefficient serait spécifique à chaque classe ?

    A+
    Bonjour!
    Oui. Chaque discipline a un coefficient. Pour calculer la moyenne semestrielle on procède ainsi:
    1/ MM*Coef(coef de la matière) ce qui nous donne le nombre de points obtenus dans une matière donnée
    2/ Somme des (MM*Coeff) ce qui nous donne le total général (TG)
    3/ Somme(Coef) ou SC
    4/ Et au final on calcule la moyenne semestrielle(MS) ainsi: MS=TG/SC
    Etant donné que l'application est restreinte au collège, il y aura moins de problème car les disciplines ont les mêmes coefficients de la 6ème à la 3ème.
    Par exemple en math on a 3 pour tous les niveaux, en anglais 2, rédaction 2, orthographe 1 etc. Ce qui diffère c'est le nombre de matières enseignées par niveau.

    Merci

    djibysadji

  8. #8
    Modérateur

    Bonjour
    Moi je le ferai avec deux requêtes
    - la première qui me prend tous les élèves avec toutes les disciplines, leurs notes et leurs coefficients. Je vais créer un champ calculé NC(qui fait note*coefficient)
    - la deuxième me prend dans la première requête les noms des élèves, le champ NC, le coefficient. Je ferai la somme sur les champs NC dont je mettrai dans l'alias TOTAL et la somme des coefficients que je mettrai dans TOTALCOEF et j'ajouterai le champ calculé MOY(qui fera simplement TOTAL/TOTALCOEF).

    Pensons à améliorer nos compétences en toute humilité car aucune oeuvre faite par un humain n'est parfaite!!!

  9. #9
    Nouveau membre du Club
    Re
    Citation Envoyé par bertiny Voir le message
    Bonjour
    Moi je le ferai avec deux requêtes
    - la première qui me prend tous les élèves avec toutes les disciplines, leurs notes et leurs coefficients. Je vais créer un champ calculé NC(qui fait note*coefficient)
    - la deuxième me prend dans la première requête les noms des élèves, le champ NC, le coefficient. Je ferai la somme sur les champs NC dont je mettrai dans l'alias TOTAL et la somme des coefficients que je mettrai dans TOTALCOEF et j'ajouterai le champ calculé MOY(qui fera simplement TOTAL/TOTALCOEF).
    Bonjour Bertiny, le forum!
    Oui cela on sait le faire. Mais ma difficulté réside dans le classement des élèves par matière et par moyenne semestrielle(moyenne obtenue en faisant le rapport de la somme des NC sur TOTALCOEF). Pour la requête qui nous permettra de classer les élèves je sais qu'il faudra intégrer le paramètre 'classe', mais comment le faire?
    Auparavant, j'ai utilisé la requête ci-dessous pour classer les élèves de chaque classe selon la moyenne semestrielle. Mais je suis rendu compte qu'elle serait bonne pour connaître la meilleure moyenne de l'établissement et non d'une classe particulière.
    RS_1: VraiFaux(Val(CpteDom("*";"[R_MoySem]";"[MS_1] >" & Remplacer([MS_1];",";"."))+1)=1;Supprespace(Val(CpteDom("*";"[R_MoySem]";"[MS_1] > " & Remplacer([MS_1];",";"."))+1))+"er";Supprespace(Val(CpteDom("*";"[R_MoySem]";"[MS_1] > " & Remplacer([MS_1];",";"."))+1))+"ème")

    Précisions sur la requête: RS_1: Rang 1er semestre; MS_1: Moyenne 1er semestre; R_MoySem: c'est la requête qui nous a permis de calculer la moyenne semestrielle de chaque élève
    Le but final est de pouvoir établir des bulletins pour chaque chaque classe et de les imprimer

    Merci

    djibysadji

  10. #10
    Membre expert
    Bonjour à tous,

    Voici une nouvelle version plus complète qui devrait répondre à tous les besoins exprimés :
    coefficient par matière et par classe pour le calcul de MS,
    calcul de RM,
    calculs de MS et RS ...

    J'ai mis quelques notes d'utilisation dans un module Information

    Cordialement
    "Always look at the bright side of life." Monty Python.

  11. #11
    Membre expert
    Salut
    Ce n'est pas la première fois que l'on cherche à calculer et afficher les ordinaux dans un classement par rang, du 1er au Nième
    Peut-être qu'un truc simple pourrait faire l'affaire
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Function RngOrdinal(MonChamp As Integer) As String
    Dim Suffix As String
    Select Case MonChamp
        Case 1
        Suffix = "er"
        Case Else
        Suffix = "ième"
    End Select
    RngOrdinal = MonChamp & Suffix
    End Function

  12. #12
    Nouveau membre du Club
    Re
    Citation Envoyé par hyperion13 Voir le message
    Salut
    Ce n'est pas la première fois que l'on cherche à calculer et afficher les ordinaux dans un classement par rang, du 1er au Nième
    Peut-être qu'un truc simple pourrait faire l'affaire
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Function RngOrdinal(MonChamp As Integer) As String
    Dim Suffix As String
    Select Case MonChamp
        Case 1
        Suffix = "er"
        Case Else
        Suffix = "ième"
    End Select
    RngOrdinal = MonChamp & Suffix
    End Function
    Bonsoir hyperion13, le forum!
    Nous essayerons de tester le code. Un grand merci pour votre proposition.

    djibysadji

  13. #13
    Nouveau membre du Club
    Re
    Citation Envoyé par micniv Voir le message
    Bonjour à tous,

    Voici une nouvelle version plus complète qui devrait répondre à tous les besoins exprimés :
    coefficient par matière et par classe pour le calcul de MS,
    calcul de RM,
    calculs de MS et RS ...

    J'ai mis quelques notes d'utilisation dans un module Information

    Cordialement
    Rebonsoir!
    Je voudrais savoir si votre façon de libeller les noms des classes est liée au code. N'est-il pas possible d'avoir 6ème A à la place de 6-A1 par exemple?

    Merci

    djibysadji

  14. #14
    Membre expert
    N'est-il pas possible d'avoir 6ème A à la place de 6-A1 par exemple?
    Sans problème, il suffit de changer le nom de la classe (la colonne classe_libelle) dans la table T_classe et c'est répercuté dans toute l'application (dont les requêtes).

    cordialement
    "Always look at the bright side of life." Monty Python.

  15. #15
    Nouveau membre du Club
    Re
    Citation Envoyé par micniv Voir le message
    Sans problème, il suffit de changer le nom de la classe (la colonne classe_libelle) dans la table T_classe et c'est répercuté dans toute l'application (dont les requêtes).

    cordialement
    Bonsoir micniv!
    OK!

    Merci

    djibysadji

###raw>template_hook.ano_emploi###