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

Macros et VBA Excel Discussion :

tri (fonction Sort)


Sujet :

Macros et VBA Excel

Vue hybride

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

    Informations forums :
    Inscription : Décembre 2007
    Messages : 54
    Par défaut tri (fonction Sort)
    Bonjour à tous,
    Voici une question sur laquelle de bute depuis quelques jours : Si je fais un tri par une macro avec « Données / Trier » je n’obtiens pas la même chose que si je fais un tri par une comparaison directe avec « < ».

    Voici ma question : Comment faire un tri par la fonction SORT (ou une autre fonction) qui donne un résultat identique à un tri par comparaison directe ?
    Je donne les exemples au bas message.
    Merci par avance.
    RéviAT

    Liste d’entrée :
    avoir
    a fortiori
    ô
    à jeun
    b
    boire
    aa
    µ
    £
    île
    a

    Macro de tri par SORT :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub TrieParTri()
    Application.ScreenUpdating = False
    ' Programme de trie par la fonction Tri
    Dim nbLignes As Long, noPlusPetit As Long, Truc As String
    Sheets("Liste").Select
    Columns("A:A").Select
    Selection.Sort Key1:=Range("A2"), Order1:=xlAscending, Header:=xlYes, _
    OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
        DataOption1:=xlSortNormal
    End Sub
    Résultat :

    £
    µ
    a
    a fortiori
    à jeun
    aa
    avoir
    b
    boire
    île
    ô

    Sous-programme de tri par comparaison :

    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 TrieParComparaison()
    Application.ScreenUpdating = False
    ' Programme de trie de la première colonne (par comparaison)
    Dim nbLignes As Long, noPlusPetit As Long, Truc As String
    Sheets("Liste").Select
    nbLignes = Range("A65536").End(xlUp).Row
    For i = 2 To nbLignes - 1
        Truc = Cells(i, 1).Formula
        noPlusPetit = i
        For j = i + 1 To nbLignes
            If Cells(j, 1).Formula < Truc Then
                Truc = Cells(j, 1).Formula
                noPlusPetit = j
            End If
        Next j
        If noPlusPetit <> i Then
            Truc = Cells(i, 1).Formula
            Cells(i, 1).Formula = Cells(noPlusPetit, 1).Formula
            Cells(noPlusPetit, 1).Formula = Truc
        End If
    Next i
    End Sub
    Résultat :

    a
    a fortiori
    aa
    avoir
    b
    boire
    £
    µ
    à jeun
    île
    ô

  2. #2
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Par défaut
    La méthode Sort trie dans l'ordre "humain", chiffres, caractères spéciaux, lettres.

    Le tri manuel est basé sur le code Ascii.
    N'oubliez pas de cliquer sur quand vous avez obtenu ou trouvé vous-même la réponse à votre question.
    Si vous trouvez seul, pensez à poster votre solution. Elle peut servir à d'autres!
    Pensez aussi à voter pour les réponses qui vous ont aidés.
    ------------
    Je dois beaucoup de mes connaissances à mes erreurs!

  3. #3
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 130
    Par défaut
    Salut RéviAT

    Voici ma question : Comment faire un tri par la fonction SORT (ou une autre fonction) qui donne un résultat identique à un tri par comparaison directe ?
    Va faire un tour dans l'aide voir si l'utilisation de Option Compare binary peut résoudre ton problème (j'ai pas essayé)
    ou emettant MatchCase:=True à la place de MatchCase:=False


    Dans tout les cas, tu te prépares des douces nuits à t'arracher les cheveux

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub TrieParTri()
    Application.ScreenUpdating = False
    Dim nbLignes As Long, noPlusPetit As Long, Truc As String
    Sheets("Liste").Select
    Columns("A:A").Selection.Sort Key1:=Range("A2"), Order1:=xlAscending, Header:=xlYes, _
    OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
        DataOption1:=xlSortNormal
    End Sub
    C'est la macro que tu as donnée (presque)
    Donc, comme tu as bien lu que SceenUpDating pouvait t'aider à accélérer la macro, tu le mets à FALSE. Jusqu'ici, tout va bien (comme se disait le cambrioleur tombant du 25ème étage en passant devant le 3me)

    Le champ d'application de cette instruction étant Excel, Tant qu'excel ne sera pas relancé ou que VBA n'exécutera pas l'instruction :
    Application.SceenUpDating = True, tu n'aura pas de rafraîchissement écran. Et comme l'écran est loin, j'ai du mal à la trouver cette instruction . Mais peut-être qu'en nettoyant mes lunettes...

    A+

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 54
    Par défaut tri(fonction Sort)
    Merci de votre aide.
    Comme je ne veux pas passer de douces nuits à l'arracher les cheveux, je vais faire un compris.
    Je vais faire d'abord un Sort général, puis pour groupe de mots ayant la même lettre je vais faire un tri par comparaison, et enfin je vais reclasser les groupes par comparaison de la première.
    Autant dire qu'il me faut du courage.
    A bientôt et encore merci.
    RéviAT

  5. #5
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Tu as lu ma solution ? Elle est tout de même plus simple.
    Tu peux obtenir une liste de A à z ainsi et tous les autres caractères
    Ensuite tu nettoies
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    For i = 64 To 255
        Cells(i - 63, 1) = Chr(i)
    Next
    Tu peux aussi commencer ta boucle avant les numériques (48)

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 54
    Par défaut tri (fonction Sort)
    Je vais essayer le tri personnalisé, selon le conseil apprécié de ouskel'n'or.
    Cela me semble être la voie du succès.
    Merci encore.
    A bientôt à tous.
    RéviAT

  7. #7
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Non, ce n'est pas si complexe que ça. Tu as la possibilité de réaliser un tri personnalisé.
    Consiste à définir la liste dans laquelle tu souhaites voir tes données triées
    Cette liste tu la places cellule par cellule dans une colonne
    Une fois réalisée, tu la sélectionnes
    Dans Option, tu vas dans l'onglet Liste pers. et tu l'ajoutes aux listes existantes par défaut.
    Ex
    !
    "
    #
    $
    %
    &

    (
    )
    *
    +
    ,
    -
    .
    /
    0
    1
    2
    3
    4
    5
    6
    7
    8
    9
    :
    ;
    <
    =
    >
    ?
    @
    A
    B
    C
    D
    E
    F
    G
    H
    I
    J
    K
    Une fois fait, pour réaliser ton tri selon cette liste, tu fixes le N° d'ordre de cette liste (dans mon exemple "OrderCustom:=10") cette nouvelle liste étant "chez moi" la dixième des listes personnalisées.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        Selection.Sort Key1:=Range("A2"), Order1:=xlAscending, Header:=xlGuess, _
            OrderCustom:=10, MatchCase:=False, Orientation:=xlTopToBottom, _
            DataOption1:=xlSortNormal
    Jète un oeil dans "Trier une liste" dans l'aide en ligne, c'est très bien expliqué

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

Discussions similaires

  1. fonction sort() - tri étrange
    Par kbu6789 dans le forum Général Python
    Réponses: 2
    Dernier message: 17/09/2013, 13h25
  2. Tri d'un tableau 2D sans la fonction sort
    Par mamax29 dans le forum Langage
    Réponses: 4
    Dernier message: 23/03/2011, 16h57
  3. Tri par la fonction "sort"
    Par kira9744 dans le forum MATLAB
    Réponses: 3
    Dernier message: 09/12/2010, 18h30
  4. Réponses: 5
    Dernier message: 25/11/2008, 09h56
  5. help fonction tri bubble sort
    Par Invité dans le forum C
    Réponses: 10
    Dernier message: 22/12/2005, 20h54

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