[ACCESS] Classement

Résolu
Bonjour,

Je débute avec access, j'ai reussi à calculée les point sur lequels je souhaite qu'un classement général soit fait.
Ce calcul de point est basé sur un calcul de points obtenu dans une precedente requete.
Je souhaite pouvoir prendre en compte le fait que certains participants peuvent etre ex-aequo.

Merci d'avance

PS: j'utilise ACCESS 2000

Merci d'avance

4 réponses

  1. Bonsoir,

    Je ne vois pas de moyen simple de résoudre le problème...
    Si je comprends bien, tu souhaites qu'Access attribue automatiquement la place au classement avec une possibilité de doublons.

    Il y a moyen de le faire avec une fonction mais si tu débutes...

    on peut imaginer une boucle qui parcourt tous les enregistrements préalablement classés en ordre décroissant et qui attribue le N° au classement après avoir vérifié si le ou les enregistrements suivant(s) renvoie(nt) le même nombre de points (en leur attribuant alors la même valeur)...

    Je peux te faire une proposition plus précise si ça t'intéresse et à moins que quelqu'un d'autre n'ait une idée plus simple...
    0
    1. Bonsoir,

      Merci Zenon pour ta réponse, ce serait effectivement sympa si tu me faisais une propostion un plus précise car la je ne voit pas comment je peu traduire tes propos.

      Merci
      0
      1. Bon,

        on imagine une table T_Classement avec les champs N°Concurrent,Nom,Temps.

        Une requête permet de classer les enregistrements par ordre croissant de points: SELECT T_Classement.Nom, T_Classement.Points, T_Classement.Classement FROM T_Classement ORDER BY T_Classement.Points;

        (on peut bien sûr construire la requête avec l'assistant)

        Ensuite, je créerais un formulaire basé sur la requête et j'ajouterais un bouton de commande dans la section en-tête avec le code suivant:

        Private Sub NomDuBouton_Click()
        Dim X, Y, Z, D As Integer 'désolé pour le caractère peu clair des variables (j'ai fait ça en vitesse et je ne suis pas très inspiré)
        Z = 1 'initialise les compteurs
        D = 1
        DoCmd.GoToRecord , "NomDuFormulaire", acFirst
        Do Until IsNull(Nom)
        X = Temps
        Classement = Z
        DoCmd.GoToRecord , "NomDuFormulaire", acNext
        Y = Temps
        If X = Y Then
        Classement = Z
        D = D + 1 'il faut continuer à ajouter des valeurs sinon le classement redémarre à la valeur immédiatement supérieure et on aurait par exemple un second après plusieurs premiers...
        Else
        Z = Z + D
        D = 1 'on réinitialise la valeur pour la prochaine fois ou des ex aequo se présentent
        End If
        Loop
        End Sub

        Bon, je ne suis pas un pro: il y a probablement moyen de faire ça plus proprement (par exemple tout en VB, sans créer de requête ou de formulaire) mais ça fonctionne.

        J'espère que tu suis le principe...
        0