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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Webmaster
    Inscrit en
    Août 2013
    Messages
    19
    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 : 19
    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
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Rataton Voir le message
    Bonjour,

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


    Pièce jointe 585249

  3. #3
    Membre averti
    Homme Profil pro
    Webmaster
    Inscrit en
    Août 2013
    Messages
    19
    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 : 19
    Par défaut
    tu es sur excel 2007 ?

  4. #4
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Rataton Voir le message
    Non sur 365.

  5. #5
    Membre averti
    Homme Profil pro
    Webmaster
    Inscrit en
    Août 2013
    Messages
    19
    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 : 19
    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
    Invité
    Invité(e)
    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
    Pièce jointe 585267

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

    Informations professionnelles :
    Activité : Retraité
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 478
    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 ?

  8. #8
    Membre averti
    Homme Profil pro
    Webmaster
    Inscrit en
    Août 2013
    Messages
    19
    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 : 19
    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 )

+ 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, 13h04
  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, 15h06
  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, 17h23
  4. [VBA] Copier une plage de cellules dans un fichier fermé
    Par Invité dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 25/01/2006, 16h52
  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, 17h04

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