IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
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

Access Discussion :

Fonction pour Générer le RANG ANNUEL d' une Classe [AC-2013]


Sujet :

Access

  1. #1
    Membre confirmé Avatar de morobaboumar
    Homme Profil pro
    Enseignant
    Inscrit en
    Septembre 2009
    Messages
    1 114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Septembre 2009
    Messages : 1 114
    Points : 491
    Points
    491
    Par défaut Fonction pour Générer le RANG ANNUEL d' une Classe
    Bonsoir membres du forum,
    je recherche la bonne méthode pour générer les rangs d'une classe.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
     
    ' ++++ Fonct. pour Générer le RANG ANNUEL d'une Classe Arabe
    Public Sub RangClasseAnnuelArabe(idetabR As Long, AnneeScol As String, claSar As String)
    Dim db As Database
    Dim rst As Recordset
    Dim SQL As String
    Dim i As Integer
    Dim j As Integer
    Dim K As Integer
    Dim Moy As Single
    Set db = CurrentDb
    SQL = "select * from BILAN_ANNUEL_ARABE where ID_ETABLI = " & idetabR & " and anscol = '" & AnneeScol & "' and ClasseArabe = '" & claSar & "' order by MoyAnnuel desc ;"
        Set rst = db.OpenRecordset(SQL)
        If Not rst.EOF Then
        rst.MoveLast
        rst.MoveFirst
        'bolEx = True
        i = 1
        K = 1
            Do While Not rst.EOF
                rst.Edit
     
     
                    If i = 1 Then
                        If GenreEleve(rst.Fields("mle_Eleve")) = "Masculin" Then
                            rst.Fields("Classement") = i & "er"
                        Else
                            rst.Fields("Classement") = i & "ère"
                        End If
     
                    Else
     
    If Moy = rst.Fields("MoyAnnuel") Then
                            If K = 1 Then   'Traitement du 1er Ex-Equo
                                j = i - 1
                        If GenreEleve(rst.Fields("mle_Eleve")) = "Masculin" Then
                                rst.Fields("Classement") = j & "er ex."
                                K = K + 1
                            Else
                                rst.Fields("Classement") = j & "è ex."
                            End If
                        End If
                        Else
     
                            K = 1
                            rst.Fields("Classement") = i & "è"
                        End If
                    End If
     
                    rst.Update
                    Moy = rst.Fields("MoyAnnuel")
                    i = i + 1
                    rst.MoveNext
                Loop
        End If
        rst.Close
        Set rst = Nothing
    End Sub
    Voici les erreurs constatées:

    Nom : C.odeRangClasse1.PNG
Affichages : 112
Taille : 84,5 Ko
    Nom : C.odeRangClasse2.PNG
Affichages : 102
Taille : 44,2 Ko

    Au lieu de 1er si genre Masculin, 1ère si Féminin. .Et 41ième ex éco le code renvoie 41er ex éco.
    Cette discussion est en rapport avec la pièce jointe d'ici https://www.developpez.net/forums/d2...es-intervalle/
    Cordialement.
    Je ne Suis Pas un Expert en Programmation
    Le savoir est la lumière de l'esprit
    Le chemin de la réussite

    Les savants sont les héritiers de la science
    Qui cherche positivement trouve
    Tout ce qui brille n'est pas l'or ou diamant
    Mais l'or et le diamant se trouvent avec sagesse, intelligence et effort

  2. #2
    Membre confirmé Avatar de morobaboumar
    Homme Profil pro
    Enseignant
    Inscrit en
    Septembre 2009
    Messages
    1 114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Septembre 2009
    Messages : 1 114
    Points : 491
    Points
    491
    Par défaut
    Bonjour membres du forum,
    Mon problème au niveau de ce code
    se trouve dans les variables (i =1; k=1; j = i - 1; K = K + 1).
    N'est ce pas à cause de cela
    qu'il y a des erreurs lorsque le code génère le rang?
    Cordialement.
    Je ne Suis Pas un Expert en Programmation
    Le savoir est la lumière de l'esprit
    Le chemin de la réussite

    Les savants sont les héritiers de la science
    Qui cherche positivement trouve
    Tout ce qui brille n'est pas l'or ou diamant
    Mais l'or et le diamant se trouvent avec sagesse, intelligence et effort

  3. #3
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 648
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 648
    Points : 14 626
    Points
    14 626
    Par défaut
    bonjour,
    Mon problème au niveau de ce code
    se trouve dans les variables (i =1; k=1; j = i - 1; K = K + 1).
    N'est ce pas à cause de cela
    qu'il y a des erreurs lorsque le code génère le rang?
    le problème vient du fait que tu traites la meilleure moyenne de la classe de la même façon que les autres, car il n'y a qu'à ce niveau qu'il y a une distinction:
    Par exemple, si 3 élèves ont la meilleure note, ça donne ceci:
    1er
    1ère ex.
    1er ex.

    ou cela:
    1ère
    1er ex.
    1ère ex.

    donc ton problème est simple: traiter le cas des ex-aequo de la meilleure moyenne ( en la mémorisant lors de la lecture du premier enregistrement, par exemple) en tenant compte du genre puisque pour les autres places c'est toujours "nè"
    Personnellement, je ne me serai pas embêté pour si peu dans un monde où la langue française est si maltraitée mais comme j'ai trouvé la solution je te la donne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    ' ++++ Fonct. pour Générer le RANG ANNUEL d'une Classe Arabe
    Public Sub RangClasseAnnuelArabe(idetabR As Long, AnneeScol As String, claSar As String)
    Dim db As Database
    Dim rst As Recordset
    Dim SQL As String
    Dim i As Integer
    Dim j As Integer
    Dim K As Integer
    Dim Moy As Single
    Dim TopMoy As Single  ' détermine la meilleure moyenne de la classe
     
    Set db = CurrentDb
    SQL = "select * from BILAN_ANNUEL_ARABE where ID_ETABLI = " & idetabR & " and anscol = '" & AnneeScol & "' and ClasseArabe = '" & claSar & "' order by MoyAnnuel desc ;"
        Set rst = db.OpenRecordset(SQL)
        If Not rst.EOF Then
        rst.MoveLast
        rst.MoveFirst
        'bolEx = True
        i = 1
        K = 1
            Do While Not rst.EOF
                rst.Edit
     
     
                If i = 1 Then
                    If GenreEleve(rst.Fields("mle_Eleve")) = "Masculin" Then
                        rst.Fields("Classement") = i & "er"
                    Else
                        rst.Fields("Classement") = i & "ère"
                    End If
     
                Else
     
                    If Moy = rst.Fields("MoyAnnuel") Then   'Traitement des ex-aequo
                        If K = 1 Then   'Traitement du 1er Ex-Equo
                            K = K + 1
                            j = i - 1
                                        'Traitement pour les premiers de la classe
                            If Moy = TopMoy Then
                                If GenreEleve(rst.Fields("mle_Eleve")) = "Masculin" Then
                                    rst.Fields("Classement") = j & "er ex."
                                Else
                                    rst.Fields("Classement") = j & "ère ex."
                                End If
                            Else
                                rst.Fields("Classement") = j & "è ex."
                            End If
                        Else            'Traitement des autres ex-aequo
                            rst.Fields("Classement") = j & "è ex."
                        End If
                    Else
                        K = 1
                        rst.Fields("Classement") = i & "è"
                    End If
                End If
     
                rst.Update
                Moy = rst.Fields("MoyAnnuel")
                If i = 1 Then TopMoy = Moy      ' on mémorise aussi la meilleure moyenne
                i = i + 1
                rst.MoveNext
            Loop
        End If
        rst.Close
        Set rst = Nothing
    End Sub
    autre chose: j'éviterai de faire appel systématiquement à des fonctions lorsqu'une information peut être accessible via une jointure:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    GenreEleve(rst.Fields("mle_Eleve")) = "Masculin"
    je ferai ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     SQL = "SELECT BILAN_ANNUEL_ARABE.*, ELEVE.genre FROM BILAN_ANNUEL_ARABE INNER JOIN ELEVE ON BILAN_ANNUEL_ARABE.mle_Eleve = ELEVE.mleeleve" _
         & " WHERE ID_ETABLI = " & idetabR & " and anscol = '" & AnneeScol & "' and ClasseArabe = '" & claSar & "' order by MoyAnnuel desc ;"
    et cela:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If rst.Fields("genre") = "Masculin" Then
    mais si tu préfères te compliquer, c'est un choix
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

  4. #4
    Membre confirmé Avatar de morobaboumar
    Homme Profil pro
    Enseignant
    Inscrit en
    Septembre 2009
    Messages
    1 114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Septembre 2009
    Messages : 1 114
    Points : 491
    Points
    491
    Par défaut
    Bonjour tee_grandbois,
    Je suis émerveillé par votre style.
    Si je pourrais faire comme vous.
    Expert Senior tee_grandbois, quel excellence.

    Nom : C.odeRangClasseSOLUTION_TROUVEE1.PNG
Affichages : 77
Taille : 43,3 Ko
    Nom : C.odeRangClasseSOLUTION_TROUVEE2.PNG
Affichages : 80
Taille : 44,7 Ko
    Nom : C.odeRangClasseSOLUTION_TROUVEE3.PNG
Affichages : 68
Taille : 33,1 Ko

    Je reste dans le cadre de vos conseils.
    Merci infiniment.
    Je ne Suis Pas un Expert en Programmation
    Le savoir est la lumière de l'esprit
    Le chemin de la réussite

    Les savants sont les héritiers de la science
    Qui cherche positivement trouve
    Tout ce qui brille n'est pas l'or ou diamant
    Mais l'or et le diamant se trouvent avec sagesse, intelligence et effort

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 26
    Dernier message: 09/06/2022, 23h12
  2. Réponses: 8
    Dernier message: 25/06/2014, 16h06
  3. Réponses: 4
    Dernier message: 20/09/2007, 16h38
  4. fonction pour générer cookie
    Par finalfx dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 14/01/2007, 00h07
  5. Comment faire pour générer un fichier à partir d'une BD MySQL
    Par dessinateurttuyen dans le forum Requêtes
    Réponses: 2
    Dernier message: 06/07/2006, 20h39

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo