Tri dans un tableau

Signaler
Messages postés
109
Date d'inscription
mardi 27 mars 2007
Statut
Membre
Dernière intervention
9 septembre 2008
-
Messages postés
1883
Date d'inscription
samedi 1 avril 2006
Statut
Membre
Dernière intervention
20 novembre 2007
-
Bonjour à tous,

J'ai un petit souci avec mes tableau lol

Je suis en train de développer un petit jeu du pendu pour mes examens ! Jusque là tout va bien.

Mon seul problème est dans l'affichage des meilleurs score ! Pour cela j'explique le fonctionnement de mon projet. Lorsque la personne gagne, le nom de jeu de cette personne et son score est écrit dans un fichier txt (nommé score.sco). Cela fonctionne très bien pas de problème. Mais j'aimerais que lorsque j'ouvre ma feuille qui affiche un listing des meilleurs scores, le fichier soit lu et que les score soit trié du plus grand au plus petit.

Jusque maintenant ma lecture et le remplissage du tableau est faite ainsi qu'une partie du tri ! J'arrive à trier les points mais les noms de joueur ne suivent pas ? pourquoi je ne vois pas la solution ? Quelqu'un peut-il m'aider ? Merci !

Voici mon code pour mieux comprendre :

PROCEDURE QUI LIT LE SCORE ET AJOUTE DANS LE TABLEAU

Public Sub PROCEDURE_LIRE_SCORE()

'On Error GoTo erreur 'Gestion des erreurs

Dim int_compteur_records  As Integer

'MsgBox FONCTION_NOMBRE_RECORDS 'affiche le nbr de records
ReDim var_tableau_score_joueur(1 To FONCTION_NOMBRE_RECORDS_LECTURE_SCORES, 2) 'on redimensionne
                                                                                               
Open FONCTION_CHEMIN("scores\score.sco") For Input As #1 'ouverture en lecture
      
      Do While Not EOF(1)
        
         int_compteur_records = int_compteur_records + 1   'on incrémente tout de suite i pour avoir la valeurr de 1 et pas zéro sinon elle ne sera pas sur le premier enregistrement
                 
         Input #1, str_nom_joueur, int_score 'lecture du premier enregistre qu'on met dans le tableau
        
         var_tableau_score_joueur(int_compteur_records, 1) = str_nom_joueur 'mise de la question dans le tableau
         var_tableau_score_joueur(int_compteur_records, 2) = int_score  'mise de la reponse 1 dans le tableau
        
      Loop
        
Close 1 'fermeture du fichier

Exit Sub
erreur:
    Call fct_journal_erreurs(Err.Number, Err.description, "problème dans la procédure PROCEDURE_LIRE_SCORE de la feuille frm_meilleur_score")

End Sub

PROCEDURE QUI TRIE LE TABLEAU

Public Sub PROCEDURE_TRIER_SCORE()

'On Error GoTo erreur 'Gestion des erreurs

Dim int_nbr_enregistrement As Integer
Dim int_drap As Integer
Dim int_tempo As Integer
Dim int_i As Integer

int_nbr_enregistrement = FONCTION_NOMBRE_RECORDS_LECTURE_SCORES

Do

int_drap = 0

int_nbr_enregistrement = int_nbr_enregistrement - 1

    For int_i = 1 To int_nbr_enregistrement

        If var_tableau_score_joueur(int_i, 2) < var_tableau_score_joueur(int_i + 1, 2) Then
       
            int_tempo = var_tableau_score_joueur(int_i, 2)
            var_tableau_score_joueur(int_i, 2) = var_tableau_score_joueur(int_i + 1, 2)
            var_tableau_score_joueur(int_i + 1, 2) = int_tempo
            int_drap = 1
       
        End If

    Next int_i
   
Loop While int_drap = 1

Exit Sub
erreur:
    Call fct_journal_erreurs(Err.Number, Err.description, "problème dans la procédure PROCEDURE_TRIER_SCORE de la feuille frm_meilleur_score")

J'espère que j'ai pu vous donner un max d'informations pour m'aider

Merci d'avance J-il

5 réponses

Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
58
Salut,
Pourquoi ne pas essayer de passer par un Type Privé?

Sinon j'ai incorporé à une de mes source une gestion de score va voir si elle peu t'aider

@+: Ju£i?n
Pensez: Réponse acceptée
Messages postés
109
Date d'inscription
mardi 27 mars 2007
Statut
Membre
Dernière intervention
9 septembre 2008

Merci je vais regarder à ça

Mais je ne comprends pas bien ton Type Privé
Messages postés
109
Date d'inscription
mardi 27 mars 2007
Statut
Membre
Dernière intervention
9 septembre 2008

Je viens de regardr ta gestion de score... elle est pas mal mais ne convient pas à ce que je pourrai faire et à ce que j'aimerais faire !

Je suis désolé ! Mais juste une question sais-tu comment faire pour trier les dimensions en même temps. Je m'explique

J'ai un tableau nommé var_tableau

donc je voudrai trier var_tableau(i,1) et trier var_tableau(i,2) puisque les éléments sont en relations !

dans la première dimension c'est le nom du joueur et dans la deuixème son score alors comment trier ?

Merci d'avance J-il
Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
58
Re,
Un petit exemple alors.

'Type representant
'le nom et son scrore associé
Private Type Scores
   Nom As String
   NumScore As Long
End Type
'Tableau de score
LesScores() As Scores

'Il ne te reste plus qu'a redimensionner,
'remplir et ranger les scores

, ----
[code.aspx?ID=41455 By Renfield]

@+: Ju£i?n
Pensez: Réponse acceptée
Messages postés
1883
Date d'inscription
samedi 1 avril 2006
Statut
Membre
Dernière intervention
20 novembre 2007
2
Salut,
je dirais même ajouter une troixième dimension pour le rang ...
Ce rang sera inscrit en même temps que le score.
Il suffit pour celà de chercher parmis les scores déjà enregistré,
 celui qui tout juste supérieur,
>récupérer son rang,
>l'incrémenter
>l' associer au joueur
>incrémenter les rangs des joueurs qui suivent

<hr />.