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 :

Trier une plage de chaines dans l'ordre binaire [XL-2007]


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Homme Profil pro
    Webmaster
    Inscrit en
    août 2013
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Webmaster
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : août 2013
    Messages : 16
    Points : 12
    Points
    12
    Par défaut Trier une plage de chaines dans l'ordre binaire
    Bonjour a tous,

    Je bloque sur un probleme

    J'utilise exel 2007 avec des macros.

    Je voudrais trier une plage de données composé de chaine de caractères dans l'ordre binaire !!!
    comment faire ceci en VBA

    car actuellement si j'ai dans mes cellules les 3 valeurs suivante :

    ac
    a-
    be

    et que je lui demande avec les fonction de tri d'excel de trier dans l'ordre alphabetique

    il me met
    ac
    a-
    be

    alors que logiquement si on suit l'ordre binaire c'est
    a-
    ac
    be

    je pourrais trier moi meme trier mon tableau en VBA mais dans ce cas les performances s'ecroule (environ 50 000 valeurs) alors qu'avec les fonction d'excel c'est instantannée.

    merci d'avance si vous avez une solution.

    cordialement

    Rataton

  2. #2
    Expert éminent sénior

    Homme Profil pro
    Développeur Vba Excel
    Inscrit en
    avril 2013
    Messages
    5 816
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur Vba Excel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : avril 2013
    Messages : 5 816
    Points : 14 349
    Points
    14 349
    Billets dans le blog
    38
    Par défaut
    Citation Envoyé par Rataton Voir le message
    Bonjour,

    Chez moi, le tri fonctionne bien dans cet ordre :
    a-
    ac
    be


    Nom : Capture.JPG
Affichages : 76
Taille : 42,8 Ko
    Eric KERGRESSE
    https://sites.google.com/site/erickergresseeirl/
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter

  3. #3
    Membre à l'essai
    Homme Profil pro
    Webmaster
    Inscrit en
    août 2013
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Webmaster
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : août 2013
    Messages : 16
    Points : 12
    Points
    12
    Par défaut
    tu es sur excel 2007 ?

  4. #4
    Expert éminent sénior

    Homme Profil pro
    Développeur Vba Excel
    Inscrit en
    avril 2013
    Messages
    5 816
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur Vba Excel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : avril 2013
    Messages : 5 816
    Points : 14 349
    Points
    14 349
    Billets dans le blog
    38
    Par défaut
    Citation Envoyé par Rataton Voir le message
    Non sur 365.
    Eric KERGRESSE
    https://sites.google.com/site/erickergresseeirl/
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter

  5. #5
    Membre à l'essai
    Homme Profil pro
    Webmaster
    Inscrit en
    août 2013
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Webmaster
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : août 2013
    Messages : 16
    Points : 12
    Points
    12
    Par défaut
    bon je viens de refaire des test effectivement ca fait ca même sur 2007 ! mais c'est un leure !!!

    je m'explique

    pour poser ma question j'ai coupé mes chaines pour faire court et la ca marche mais si je rajoute juste un caractère ca marche plus ;-) en fait c'est comme si il ignorais le caractère -
    le soucis c'est que j'ai pas mal de caractères spéciaux.

    donc je reprend ma question :

    car actuellement si j'ai dans mes cellules les 3 valeurs suivante :

    acx
    a-x
    be

    et que je lui demande avec les fonction de tri d'excel de trier dans l'ordre alphabetique

    il me met
    acx
    a-x
    be

    alors que logiquement si on suit l'ordre binaire c'est
    a-x
    acx
    be

  6. #6
    Expert éminent sénior

    Homme Profil pro
    Développeur Vba Excel
    Inscrit en
    avril 2013
    Messages
    5 816
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur Vba Excel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : avril 2013
    Messages : 5 816
    Points : 14 349
    Points
    14 349
    Billets dans le blog
    38
    Par défaut
    Citation Envoyé par Rataton Voir le message
    Est ce que cette fonction pourrait faire l'affaire et en triant comme dans ce vidage d'écran sur la colonne B ?
    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
     
    Function ConcateneChr(ByVal ChaineATraiter As String) As String
     
    Dim I As Integer, J As Integer
     
        Application.Volatile
     
        ConcateneChr = ""
     
        For I = 1 To Len(ChaineATraiter)
            For J = 0 To 255
                If Mid(ChaineATraiter, I, 1) = Chr(J) Then
                   ConcateneChr = ConcateneChr & Format(J, "000")
                   Exit For
                End If
            Next J
        Next I
     
    End Function
    Nom : Capture.JPG
Affichages : 70
Taille : 18,9 Ko
    Eric KERGRESSE
    https://sites.google.com/site/erickergresseeirl/
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter

  7. #7
    Membre à l'essai
    Homme Profil pro
    Webmaster
    Inscrit en
    août 2013
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Webmaster
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : août 2013
    Messages : 16
    Points : 12
    Points
    12
    Par défaut
    c'est une idée je testerais ca ce soir

    mais c'est quand même fou que il n'y as pas de fonction de tri binaire sous excel

    dailleurs en vba non plus ou je sais pas comment faire.

    en tous cas merci de ton aide

  8. #8
    Membre éprouvé Avatar de mjpmjp
    Homme Profil pro
    Chôme Dur des Ambulances
    Inscrit en
    avril 2012
    Messages
    1 030
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hautes Alpes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chôme Dur des Ambulances
    Secteur : Santé

    Informations forums :
    Inscription : avril 2012
    Messages : 1 030
    Points : 1 263
    Points
    1 263
    Par défaut code ascii = binaire
    bonjour,
    dans la colonne B tu concatènes les codes ascii de chaque chaine
    et tu filtres sur la colonne B

    @+JP
    Caractéristiques (WEB) phpMyAdmin 4-74 , PHP 5-631 , Apache 2-427 , MySQL 5-719
    Présentation NAS DS-3615xs + 20Go , DSM 6.1.6-15266 Up1 , 12 * WD 4To WD4000F9YZ (10 raid 6+ )+(2 raid 1+) , LinkSys comutateur-switch lgs528p-eu , Onduleur UPS 720W Power Boxx Lcd (4*UPS + 4*MOD)
    Mes contributions (EXCEL) Form GRAPHIQUE: Gestion des boutons , Liste Onglet dynamique...GESTION de FILM

  9. #9
    Expert confirmé
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    décembre 2008
    Messages
    1 881
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : décembre 2008
    Messages : 1 881
    Points : 4 786
    Points
    4 786
    Par défaut
    hello,
    tu peux aussi essayer d'utiliser un quicksort :
    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
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    Sub Quicksort(vArray As Variant, arrLbound As Long, arrUbound As Long)'Sorts a one-dimensional VBA array from smallest to largest
    'using a very fast quicksort algorithm variant.
    Dim pivotVal As Variant
    Dim vSwap    As Variant
    Dim tmpLow   As Long
    Dim tmpHi    As Long
     
    tmpLow = arrLbound
    tmpHi = arrUbound
    pivotVal = vArray((arrLbound + arrUbound) \ 2)
     
    While (tmpLow <= tmpHi) 'divide
       While (vArray(tmpLow) < pivotVal And tmpLow < arrUbound)
          tmpLow = tmpLow + 1
       Wend
     
       While (pivotVal < vArray(tmpHi) And tmpHi > arrLbound)
          tmpHi = tmpHi - 1
       Wend
     
       If (tmpLow <= tmpHi) Then
          vSwap = vArray(tmpLow)
          vArray(tmpLow) = vArray(tmpHi)
          vArray(tmpHi) = vSwap
          tmpLow = tmpLow + 1
          tmpHi = tmpHi - 1
       End If
    Wend
     
      If (arrLbound < tmpHi) Then Quicksort vArray, arrLbound, tmpHi 'conquer
      If (tmpLow < arrUbound) Then Quicksort vArray, tmpLow, arrUbound 'conquer
    End Sub
     
     
     
     
    Sub ProcessData_Quicksort()
    'Example macro to show you how to add a column of data to an array
    'and sort the data from smallest to largest using VBA Quicksort.
    Dim MyData() As Variant
    Dim i As Long, LastRow As Long
     
     
    'Store column of data into array
    LastRow = Range("A" & Rows.Count).End(xlUp).Row
    ReDim MyData(1 To LastRow)
    For i = 1 To LastRow
        MyData(i) = Range("A" & i)
    Next i
     
     
    'Now sort your array using the VBA Quicksort macro
    Call Quicksort(MyData(), LBound(MyData), UBound(MyData))
    '
    'From here on, your "MyData" array is sorted from smallest to largest
    '
    End Sub
    Exemple :

    Nom : QuickSortVBA.PNG
Affichages : 44
Taille : 40,0 Ko

    Performance :

    VBA Quicksort vs Bubble Sort Benchmark
    N Quicksort Bubble Sort
    25,000 0.070 22.643
    10,000 0.027 3.551
    5,000 0.016 0.891
    1,000 0.004 0.059
    Time (in seconds) to sort VBA arrays of size N

    Ami calmant, J.P
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  10. #10
    Expert confirmé Avatar de Patrice740
    Homme Profil pro
    Retraité
    Inscrit en
    mars 2007
    Messages
    2 256
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : mars 2007
    Messages : 2 256
    Points : 4 948
    Points
    4 948
    Par défaut
    Bonjour,
    Citation Envoyé par Rataton Voir le message
    Je voudrais trier une plage de données composé de chaine de caractères dans l'ordre binaire !!!
    Excel trie les chaines de caractères dans l'ordre dit "alphanumérique" (et pas alphabétique) mais c'est plutôt « numéroalphabétique ».
    C'est un tri assez curieux qui commence par l'espace, suivi de l'espace insécable puis les caractères non alphabétique pour finir par les caractères alphabétique où les lettres accentuées suivent immédiatement la lettre sans accent.
    Épuré des caractères non imprimables ça donne :
    !"#$%&()*,./:;?@[\]^ˆ_`{|}~¡¦¨¯´¸¿˜‘’‚“”„‹›¢£¤¥€+<=>±«»×÷§©¬®°µ¶·…†‡•‰0¼½¾1¹2²3³456789*'-–—AaªÁáÀàÂâÄäÃãÅåÆæBbCcÇçDdÐðEeÉéÈèÊêËëFfƒGgHhIiÍíÌìÎîÏïJjKkLlMmNnÑñOoºÓóÒòÔôÖöÕõØøŒœPpQqRrSsŠšßTtÞþ™UuÚúÙùÛûÜüVvWwXxYyÝýŸÿZzŽž

    Par contre l'ordre binaire est relativement simple car, comme son nom l'indique, il n'utilise que deux chiffres 0 et 1 dans cet ordre.

    Il faudrait que tu précises ce que tu voudrais obtenir quand tu parles d'ordre "binaire" :
    - l'ordre des caractères ASCII ?
    - celui des caractères Unicode ? avec quel encodage ?
    - et selon le nombre de caractères est-ce que 1999 se place avant 2 ?
    Cordialement,
    Patrice
    Personne ne peut détenir tout le savoir, c'est pour ça qu'on le partage.

    Pour dire merci, cliquer sur et quand la discussion est finie, penser à cliquer sur

  11. #11
    Membre à l'essai
    Homme Profil pro
    Webmaster
    Inscrit en
    août 2013
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Webmaster
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : août 2013
    Messages : 16
    Points : 12
    Points
    12
    Par défaut
    rebonjour a tous ;-)

    bon alors j'ai fait quelques petits tests et je m'aperçois que le vba réagit bizarrement.

    je m'explique la solution donnée par Eric KERGRESSE est pas mal

    en gros j'ai fait une fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Function TexteBinaire(str As String) As String
        str = LCase(Trim(str))
        TexteBinaire = ""
        For g = 1 To Len(str)
            TexteBinaire = TexteBinaire & Format(CStr(Asc(Mid(str, g, 1))), "000")
        Next g
    End Function
    j'appelle cette fonction pour chaque ligne j'obtiens bien ma 2eme colonne avec mes codes ascii concatènés de mes chaines et je fais le tri de la première colonne en fonction de la 2eme et ça me trie tout bien dans l'ordre binaire miracle ça marche.

    donc on peut dire que mon problème est résolu !!!


    mais en fait j'avais besoin de trier cette liste dans l'ordre binaire pour pouvoir comparer des chaines et pour cela j'utilisais le > et <

    j'ai fait des test suivant en mode debug

    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
       Dim a As String
       Dim b As String
       Dim c as String
       Dim d as String
     
       a = LCase("¤")
       b = LCase("ƒ")
     
       c = TexteBinaire(a) ' valeur ascii 164
       d = TexteBinaire(b) ' valeur ascii 131
     
       x = 0
     
       If a > b Then x = x + 1 ' a devrait être > b et pourtant le then ne se déclenche pas
       If c > d Then x = x + 2 ' la le then se déclenche bien.
    Si on peut m'expliquer ce comportement ?

    car au final je peux solutionner mon problème mais je comprends pas le comportement du then qui ne se déclenche pas (a > b )

  12. #12
    Membre à l'essai
    Homme Profil pro
    Webmaster
    Inscrit en
    août 2013
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Webmaster
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : août 2013
    Messages : 16
    Points : 12
    Points
    12
    Par défaut
    Citation Envoyé par mjpmjp Voir le message
    bonjour,
    dans la colonne B tu concatènes les codes ascii de chaque chaine
    et tu filtres sur la colonne B

    @+JP
    oui c'est ce que j'ai retenu comme solution et qui marche

  13. #13
    Membre à l'essai
    Homme Profil pro
    Webmaster
    Inscrit en
    août 2013
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Webmaster
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : août 2013
    Messages : 16
    Points : 12
    Points
    12
    Par défaut
    jurassic pork

    je vais etudier ton code ;-)

  14. #14
    Membre à l'essai
    Homme Profil pro
    Webmaster
    Inscrit en
    août 2013
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Webmaster
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : août 2013
    Messages : 16
    Points : 12
    Points
    12
    Par défaut
    Patrice740

    tu voudrais dire que c'est pour ca que dans mon cas ma ligne
    If a > b Then x = x + 1 ' a devrait etre > b et pourtant le then ne se declenche pas

    je pensais que les test > < se faisait en binaire aussi non ?

    oui quand c'est une chaine "1999" est < à "2"

  15. #15
    Membre à l'essai
    Homme Profil pro
    Webmaster
    Inscrit en
    août 2013
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Webmaster
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : août 2013
    Messages : 16
    Points : 12
    Points
    12
    Par défaut
    ha oui j'ai rajouté aussi l'option tout en haut du module :


    pareil rien compris à l'utilité de ce truc car si je mets Text à la place ça fait pareil.

  16. #16
    Expert confirmé Avatar de Patrice740
    Homme Profil pro
    Retraité
    Inscrit en
    mars 2007
    Messages
    2 256
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : mars 2007
    Messages : 2 256
    Points : 4 948
    Points
    4 948
    Par défaut
    Citation Envoyé par Rataton Voir le message
    Patrice740
    tu voudrais dire que c'est pour ca que dans mon cas ma ligne
    If a > b Then x = x + 1 ' a devrait etre > b et pourtant le then ne se declenche pas
    je pensais que les test > < se faisait en binaire aussi non ?
    Avec VBA, l'ordre de tri des caractères est différent de celui des codes ANSI des caractères (à partir de €).
    Les caractères dans l'ordre ANSI :
    !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬*®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ

    Les caractères dans l'ordre du VBA :
    !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ ¡¢£¤¥¦§¨©ª«¬*®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿŒœŠšŸŽžƒˆ˜–—‘’‚“”„†‡•…‰‹›€™

    C'est notamment le cas de ƒ et ¤ :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub Test()
    Dim a$, b$, r$
      a = "¤"
      b = "ƒ"
      If a > b Then r = a & " > " & b Else r = a & "<" & b
      r = r & vbCrLf
      If Asc(a) > Asc(b) Then r = r & "Asc(" & a & ") > Asc(" & b & ")" Else r = r & "Asc(" & a & ") < Asc(" & b & ")"
      MsgBox r
    End Sub
    Cordialement,
    Patrice
    Personne ne peut détenir tout le savoir, c'est pour ça qu'on le partage.

    Pour dire merci, cliquer sur et quand la discussion est finie, penser à cliquer sur

  17. #17
    Expert confirmé
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    décembre 2008
    Messages
    1 881
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : décembre 2008
    Messages : 1 881
    Points : 4 786
    Points
    4 786
    Par défaut
    hello,
    voici ce que j'ai trouvé concernant le tri dans excel ici , c'est en Angliche :

    Article 39 - Sorting in Excel

    First thing first – Excel doesn’t sort as per ASCII character codes which we generally expect. It has its own sorting logic which is detailed below for Ascending sort (reverse the same for Descending sort).
    The order followed in an Ascending sort is Number > Text > Alphanumeric text > Logical values > Error values > Blanks
    (Note –Blank cells will always be at the end whether it is an Ascending sort or a Descending sort)
    Priority 1 – Number has first priority in sorting. Numbers are sorted from the smallest negative number to the largest positive number
    Priority 2 – Text has second priority. There is no difference between lowercase and uppercase. Whatever case comes first in case of a tie, gets placed first (FIFO – First In First Out sorting). Hence, sorting “a,A,B,c,D,b,C” will give “a,A,B,b,c,C,D”
    In Text / Alphanumeric sort, Sort compares left to right, character by character between two strings. For example, “sd, sar” when ascending sorted will be “sar, ad”.
    Priority 3 – Alphanumeric text (text that includes numbers and other characters) has third priority. For example “monkey123” gets sorted before “monkeyed” whereas “mon9keyed” will get sorted before “monkey123”.
    The sorting order for alphanumeric text is -
    0 1 2 3 4 5 6 7 8 9 ' - (space) ! " # $ % & ( ) * , . / : ; ? @ [ \ ] ^ _ ` { | } ~ + < = > A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
    Apostrophes (') and hyphens (-) are ignored, with one exception: If two text strings are the same except for a hyphen, the text with the hyphen is sorted last.
    Priority 4 – Logical Values - FALSE is sorted before TRUE.
    Priority 5 – Error Values - No difference between error values. Hence, whatever comes first, gets placed first (FIFO sorting). Hence. “#DIV/0!, #N/A” will give the result “#DIV/0!, #N/A” whereas “#N/A, #DIV/0!” will give the result “#N/A, #DIV/0!”.

    Ami calmant, J.P


    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  18. #18
    Expert confirmé
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    décembre 2008
    Messages
    1 881
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : décembre 2008
    Messages : 1 881
    Points : 4 786
    Points
    4 786
    Par défaut
    Avec le module de classe Tableau de Jacques Boisgontier qui se trouve ici tout est plus simple. La classe possède une méthode de tri (TriTab) par quicksort.
    voici le code VBA par exemple pour trier la plage nommée colSrc et mettre le résultat en colonne C :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub Tris()  
       Tablo = Range("colSrc").Value
       Set monTab = New tableau             ' instanciation de la classe Tableau
       monTab.TriTab Tablo, 1                ' tri col 1
       [c1].Resize(UBound(Tablo), 1).Value2 = Tablo
    End Sub
    Attention pour faire un tri binaire, il faut remplacer dans le module de classe Tableau l'option Option Compare Text par Option Compare Binary

    et voici le résultat :

    Nom : TriVBAQuickSort.PNG
Affichages : 23
Taille : 16,5 Ko

    Ami calmant, J.P
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  19. #19
    Membre à l'essai
    Homme Profil pro
    Webmaster
    Inscrit en
    août 2013
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Webmaster
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : août 2013
    Messages : 16
    Points : 12
    Points
    12
    Par défaut
    bon merci a tous,

    j'ai fini par solutionner mon problème de tri binaire grâce à vous ;-) tous

    jurassic pork je vais étudier ça aussi on sait jamais ça peut servir.

    Option Compare Text par Option Compare Binary.

    moi comme dit plus haut j'ai vu nada différence !

    d'ailleurs par défaut c'est Binary donc pas besoin de le mettre !

    je passe en résolu.

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

Discussions similaires

  1. Trier une plage de cellules
    Par Squelet dans le forum Macros et VBA Excel
    Réponses: 15
    Dernier message: 03/12/2019, 14h04
  2. Comment Incrémenter une chaine dans l'ordre alphabétique ?
    Par Bobsinglar dans le forum Général Java
    Réponses: 4
    Dernier message: 14/11/2008, 16h06
  3. Copier une plage de cellules dans un fichier fermé
    Par COCONUT2 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 31/07/2007, 18h23
  4. [VBA] Copier une plage de cellules dans un fichier fermé
    Par SFrane dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 25/01/2006, 17h52
  5. [VBA Excel] Trier une plage à plusieurs colonnes
    Par loacast dans le forum Macros et VBA Excel
    Réponses: 14
    Dernier message: 22/12/2005, 18h04

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