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

VBA Discussion :

Trier un tableau() avec Sort


Sujet :

VBA

  1. #1
    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
    Points : 15 543
    Points
    15 543
    Par défaut
    Bonjour,
    Je souhaite effectuer le tri d'un tableau() à une dimension en VBA.
    Je crois bien avoir vu passer une méthode sur le forum utilisant Sort.
    Me trompe-je ? ou cette méthode ne s'applique-t-elle qu'à un tableau à deux dimensions ?
    Je n'ai pas trouvé de réponse ni dans la FAQ (parmi les 125 propositions à "tri*" comme mot clé... les 8 à "trier" ou les 16 à "Sort") non plus qu'en recherche sur ce forum.
    Je sollicite donc votre mémoire...

    Je connais la méthode proposée par SilkyRoad dans le chapitre "Comment trier le contenu d'un ComboBox par ordre alphabétique ?" ou "XIV-D. Trier les données d'un tableau"
    Ce n'est donc pas celle-ci que je souhaiterais utiliser.
    Merci de votre réponse

  2. #2
    Expert confirmé
    Avatar de pc75
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    3 662
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2004
    Messages : 3 662
    Points : 4 047
    Points
    4 047
    Par défaut
    Bonjour,

    Je ne sais pas si c'est ce que tu recherches, mais j'ai trouvé ça dans MSDN :

    Microsoft® JScript™
    sort, méthode Référence du langage
    Version 2


    Voir aussi Application


    --------------------------------------------------------------------------------

    Description
    Trie les éléments d'un objet Array.

    Syntaxe
    arrayobj.sort(sortfunction)
    L'argument sortfunction correspond au nom de la fonction employée pour déterminer l'ordre des éléments. S'il est omis, les éléments sont triés par ordre croissant de caractère ASCII.

    Notes
    La méthode sort trie l'objet Array existant. Aucun nouvel objet Array n'est créé pendant l'exécution.
    Si vous indiquez une fonction dans l'argument sortfunction, elle doit retourner l'une des valeurs suivantes :

    Une valeur négative si le premier argument transmis est inférieur au deuxième argument.
    Zéro si les deux arguments sont équivalents.
    Une valeur positive si le premier argument est supérieur au second.
    L'exemple ci-dessous illustre l'utilisation de la méthode sort :

    function SortDemo()
    {
    var a, l;
    a = new Array("X" ,"y" ,"d", "Z", "v","m","r");
    l = a.sort();
    return(l);
    }

  3. #3
    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
    Points : 15 543
    Points
    15 543
    Par défaut
    Merci pc75,
    C'était bien la méthode de mes souvenirs. Hélas, si elle fonctionne en VB.Script, ce n'est pas le cas en VBA-Excel où Sort réclame un objet range.

    Mais j'ai résolu mon problème grâce à Méphistopheles qui propose un tri très rapide qui me convient très bien.
    Bonne journée

    Je laisse la discussion et mets résolu, ta réponse pourait intéresser les vébéscripteurs

  4. #4
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2006
    Messages
    1 399
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 399
    Points : 2 221
    Points
    2 221
    Par défaut
    salut ouskel'nor,

    <ShellSort> est plus rapide que <QuickSort récursif> en VBA :
    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
     
    Public Sub ShellSortInteger(ByRef aTab() As Integer)
       Dim i As Long, j As Long, lInc As Long, n As Long, lMin As Long
       Dim lLowerBound As Long, lUpperBound As Long
       Dim vRef As Variant
     
       lLowerBound = LBound(aTab)
       lUpperBound = UBound(aTab)
       n = lUpperBound - lLowerBound + 1
       lInc = 1
     
       While lInc < n
          lInc = lInc * 3 + 1
       Wend
       While lInc > 1
          lInc = lInc / 3
          lMin = lInc + lLowerBound
          For i = lMin To lUpperBound
             j = i
             vRef = aTab(i)
             Do While vRef < aTab(j - lInc)
                aTab(j) = aTab(j - lInc)
                j = j - lInc
                If j < lMin Then Exit Do
             Loop
             aTab(j) = vRef
          Next i
       Wend
    End Sub
    Philippe

  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
    Points : 15 543
    Points
    15 543
    Par défaut
    ShellSortInteger Winner !
    Testé. 0,02 s pour ShellSortInteger contre 0,8 s pour QuiskSort.
    Pour faire plus rapide je devrai changer de micro
    Merci philben, j'adopte !

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    150
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 150
    Points : 100
    Points
    100
    Par défaut
    C'est vrai que ShellSort est tres bien.
    Le souci est que parfois, le tri n'est pas exact.
    Cela est particulièrement le cas si ton Array à trier contient tres peu de données.

    Perso, j'utilise toujours ShellSort pour les array important sinon un Tri à Bulle est amplement suffisant.

  7. #7
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par philben Voir le message
    salut ouskel'nor,

    <ShellSort> est plus rapide que <QuickSort récursif> en VBA :
    Merci !

    Il faut juste préciser :

    Sinon la valeur du plus petit indice du tableau valait 0 chez moi (avec Excel 2007). Ca joue sur la valeur de LBound...

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

Discussions similaires

  1. Trier un tableau avec 2 lignes en header
    Par janfi75008 dans le forum VBA Word
    Réponses: 8
    Dernier message: 02/03/2010, 15h23
  2. Trier un List avec Sort by et Group By
    Par Cedric33 dans le forum C#
    Réponses: 9
    Dernier message: 05/09/2009, 17h53
  3. [C#] Trier un tableau avec IComparable
    Par gilles81 dans le forum C#
    Réponses: 3
    Dernier message: 17/01/2009, 21h46
  4. Réponses: 4
    Dernier message: 19/02/2008, 13h46
  5. Comment trier un tableau avec VBScript ?
    Par djokerta dans le forum VBScript
    Réponses: 3
    Dernier message: 27/09/2007, 20h44

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