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

VB 6 et antérieur Discussion :

Fonction de tri


Sujet :

VB 6 et antérieur

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 79
    Par défaut Fonction de tri
    Bonsoir,

    j'utilise une fonction de tri toute simple, mais le seul
    souci c'est qu'elle me classe les chiffres avant les lettres
    alors que je voudrais que cela soit le contraire!

    Elle me fait : 2,3,4 a, b c
    et j'aimerais avoir: a,b,c,2, 3 4

    Faut il changer la fonction elle même et lui ajouter
    une exception?
    Merci pour votre aide!



    ' trier un tableau par ordre alphabétique

    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
    Sub TriTableau(T() As String)
    Dim i, j, N, m As Integer    'Variable de boucle i, j ; N= nombre d'éléments-1
    Dim Min As Integer
    Dim Temp  As String
     
    N = UBound(T) '
    Min = LBound(T)
     
    For i = Min To N
     
        For j = Min To N - 1
     
            If UCase(T(j)) > UCase(T(j + 1)) Then
     
                Temp = T(j): T(j) = T(j + 1): T(j + 1) = Temp
     
            End If
     
        Next j
     
     Next i
    End Sub

  2. #2
    Membre Expert
    Avatar de zazaraignée
    Profil pro
    Étudiant
    Inscrit en
    Février 2004
    Messages
    3 174
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2004
    Messages : 3 174
    Par défaut
    Salut

    C'est normal, les chiffres sont classés avant les lettres dans la table ASCII et dans la table ANSI. Tu peux toujours, après avoir trié ton tableau, déterminer à partir de quel indice tu as des lettres et placer la première partie du tableau à la fin.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 79
    Par défaut
    Ok merci pour ta réponse!
    Mais mon tableau trie des classeurs excel dont le nom
    peut commencer par C, F, 2, 4 et il s'agit d'un tableau
    variable, donc il faudrait que je détermine l'indice à partir
    duquel on passe du 4 au C par exemple et là c'est pas gagné,
    surtout que le nombres de classeurs peut varier, d'où le problème!

  4. #4
    Inactif  
    Avatar de jmfmarques
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    3 784
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 3 784
    Par défaut
    Il me semble que Zaraignée t'as dit : Trie d'abord et "transporte" ensuite.... Ou ai-je encore une fois mal lu ???

  5. #5
    Membre émérite
    Avatar de Catbull
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    542
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 542
    Par défaut
    Une autre solution, est de redéfinir l'opérateur infixe > par une fonction Superieur.

    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Public Function Superieur(OpG As String, OpD As String) As Boolean
        OpG = UCase(OpG)
        OpD = UCase(OpD)
     
        If IsNumeric(OpG) And IsNumeric(OpD) _
        Or Not IsNumeric(OpG) And Not IsNumeric(OpD) Then
            Superieur = (OpG > OpD)
        Else
            If IsNumeric(OpG) Then Superieur = True
            If IsNumeric(OpD) Then Superieur = False
        End If
    End Function
    Un peu lourd, mais tu peux conserver ton code, modulo cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If UCase(T(j)) > UCase(T(j + 1)) Then
    qui devient
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Superieur(T(j), T(j + 1)) Then

  6. #6
    Membre Expert
    Avatar de zazaraignée
    Profil pro
    Étudiant
    Inscrit en
    Février 2004
    Messages
    3 174
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2004
    Messages : 3 174
    Par défaut
    Salut

    Ce serait trop beau, Catbull. Si j'ai bien compris, les noms à trier sont des string qui peuvent commencer par un chiffre mais ne sont pas forcément numériques pour autant. Exemple: 5eMois.xls. Une fonction IsNumeric n'y pourra rien, il me semble.

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 79
    Par défaut
    c'est vrai j'ai testé il a raison. S'il n'y a que 2 cela peut marcher
    mais 2 et des broutilles non!

    PAs si simple que ça en fait!

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 79
    Par défaut
    En fait il faudrait tester avec left(string,1) là je pense cela pourrait marcher!

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 79
    Par défaut
    Bon j'ai testé cela marche avec ca!

    Comme je n'utilise que la première lettre de la chaîne de caractère,
    cela me suffit:

    Voici le programme!


    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
     
     
    ' trier un tableau par ordre alphabétique
     
    Sub TriTableau(T() As String)
    Dim i, j, N, m As Integer    'Variable de boucle i, j ; N= nombre d'éléments-1
    Dim Min As Integer
    Dim Temp  As String
     
    N = UBound(T) '
    Min = LBound(T)
     
    For i = Min To N
     
        For j = Min To N - 1
     
            If Superieur(Left(T(j), 1), Left(T(j + 1), 1)) Then
     
                Temp = T(j): T(j) = T(j + 1): T(j + 1) = Temp
     
            End If
     
        Next j
     
     Next i
    End Sub
    Public Function Superieur(OpG As String, OpD As String) As Boolean
        OpG = UCase(OpG)
        OpD = UCase(OpD)
     
        If IsNumeric(OpG) And IsNumeric(OpD) _
        Or Not IsNumeric(OpG) And Not IsNumeric(OpD) Then
            Superieur = (OpG > OpD)
        Else
            If IsNumeric(OpG) Then Superieur = True
            If IsNumeric(OpD) Then Superieur = False
        End If
    End Function

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 79
    Par défaut
    En fait faut un peu ruser, mais bon il faut avoir des fichiers
    ne commençant deux fois par la lettre A, ce qui est mon cas!

    Merci pour votre aide!

  11. #11
    Membre Expert
    Avatar de zazaraignée
    Profil pro
    Étudiant
    Inscrit en
    Février 2004
    Messages
    3 174
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2004
    Messages : 3 174
    Par défaut
    Salut

    Tu pourrais aussi trier tes fichiers dans deux tableaux. Ceux qui commancent par une lettre dans un tableau et ceux qui commancent par un chiffre dans un autre. Ensuite tu ajoutes le tableau avec les noms commançant par des chiffre à la fin du premier.

    De cette façon tu fait d'abord un test sur le premier caractère du nom avant de faire le tri.

  12. #12
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 79
    Par défaut
    Oui c'est je suis d'accord avec toi; mais du moment que cela marche
    dans mon cas, cela me suffit amplement.

    SI on veut fignoler par la suite on peut envisager ta solution.
    Merci pour ta suggestion.

  13. #13
    Membre Expert
    Avatar de zazaraignée
    Profil pro
    Étudiant
    Inscrit en
    Février 2004
    Messages
    3 174
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2004
    Messages : 3 174
    Par défaut
    Bonsoir (ou peut-être bonne nuit, vu le décallage)

    Si tout fonctionne comme tu veux, n'oublie pas de cliquer sur le bouton en bas à gauche.

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

Discussions similaires

  1. [Tableaux] Fonctions de tri
    Par chtom dans le forum Langage
    Réponses: 1
    Dernier message: 25/01/2007, 21h16
  2. [Faq(?)][VB6] Fonction de tri.
    Par méphistopheles dans le forum Vos contributions VB6
    Réponses: 2
    Dernier message: 29/03/2006, 23h17
  3. fonction de tri par introspection
    Par ned-flanders dans le forum C++
    Réponses: 7
    Dernier message: 21/10/2004, 11h49
  4. Réponses: 2
    Dernier message: 08/04/2004, 16h30

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