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 :

[VBA] Problème de tri. [XL-2007]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2
    Par défaut [VBA] Problème de tri.
    Voila, j'ai réalisé un programme de gestion de concours équestre sous excel, et j'ai un petit problème que je n'arrive pas à régler.
    Je vous explique. Une fois que tous les paramètres sont saisis, mon programme doit trier les résultats en fonctions des points de pénalités, jusque là il n'y a pas de problème. Le problème c'est que lors du tri, il ne tiens pas compte des décimales, par exemple si il y a des valeurs du genre: "4"; "12"; "6,5"; "8" il va trier comme cela: "4"; "8";"12";"6,5" alors que je souhaite qu'il tri comme cela: "4";"6,5";"8";"12" ce qui serait le plus logique. Il semblerait qu'excel n'arrive pas a gérer la décimale.
    Auriez-vous une idée afin qu'il tri de la façon souhaitez ?

    Voila mon code de tri:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Feuil1.Range("B3:E154").Sort Key1:=Feuil1.Range("E3"), Order1:=xlAscending, Header:=xlYes, OrderCustom:=1, MatchCase:=True, Orientation:=xlTopToBottom
    Je vous joint mon fichier pour que vous puissiez tester par vous même. Merci de ne pas le modifier, donnez moi simplement les codes à modifier.

    Merci beaucoup.
    Elangel2008.
    Fichiers attachés Fichiers attachés

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour

    Regardes d'abord dans les paramètres régionaux Windows (c'est dans le panneau de configuration) quel est le séparateur décimal.

    Si c'est le point, il faut saisir un point à la place de la virgule.

    Philippe

  3. #3
    Inactif  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 054
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 054
    Par défaut
    Bonjour,
    Je suis d'accord avec Philippe JOCHMANS toutefois, ça veux réussir que je suis juste confronté à un problème similaire..
    J'ai le séparateur de décimale = la virgule.
    Dans un UF j'ai un TextBox qui copie sa donnée depuis une cellule, cela s'inscrit donc dans le textbox avec la virgule mais si je sauve la donnée du TextBox tel quel les décimales sont disparues.
    J'ai contourner le problème en remplacant la virgule par un point (dans le textbox)
    Je ne maitrise pas encore bien le 2007 alors je ne sais pas s'il y a une autre conditions à modifier dans les options ou si c'est un bug. Quoi qu'il en soit, peut-être essayer de faire d'abord un replace de la virgule par un point avant le tri.
    A+

  4. #4
    Expert confirmé
    Avatar de Didier Gonard
    Homme Profil pro
    Formateur Office et développeur VBA en freelance
    Inscrit en
    Février 2008
    Messages
    2 805
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Formateur Office et développeur VBA en freelance

    Informations forums :
    Inscription : Février 2008
    Messages : 2 805
    Par défaut
    Bonjour,

    LeForestier, pas sur que le problème soit le même

    Peux-tu nous donner ton code ?

    Il s'agit peut être d'un problème de typage ? genre:
    (à valider séparément )

    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
    Private Sub UserForm_Initialize()
    Dim toto As Double
     
    TextBox1 = Cells(3, 2)  ' 123,54 dans ce cas
    toto = TextBox1.Value
    MsgBox toto
    Cells(3, 4) = TextBox1
    Cells(3, 5) = toto
    End Sub
     
    'Private Sub UserForm_Initialize()
    'Dim toto As Long
    '
    'TextBox1 = Cells(3, 2)  ' 123,54 dans ce cas
    'toto = TextBox1.Value
    'MsgBox toto
    'Cells(3, 4) = TextBox1
    'Cells(3, 5) = toto
    'End Sub

    2003, 2007 = idem / sachant que textbox = string et interprétation feuille ensuite.
    cordialement,

    Didier

  5. #5
    Expert confirmé
    Avatar de Didier Gonard
    Homme Profil pro
    Formateur Office et développeur VBA en freelance
    Inscrit en
    Février 2008
    Messages
    2 805
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Formateur Office et développeur VBA en freelance

    Informations forums :
    Inscription : Février 2008
    Messages : 2 805
    Par défaut
    Bonjour,

    Elangel2008

    Il me semble ne voir qu’une explication à ton phénomène (indépendante / version).

    Vu que tu utilises des labels (texbox = même combat), tu retournes des strings, quand tu les mets dans les cellules, Excel interprète au mieux ce que tu lui fournis.
    Philippe t’a donné la piste

    Je pense que les valeurs décimales que tu as dans tes labels sont rédigées ainsi : « 6,5 ». Hors tu manie ça en vba, le séparateur décimal du vba est le « . », quand tu écris la valeur dans ta feuille, l’interpréteur la prend comme un string (Ce que tu dois voir => vu que l’alignement naturel des strings se fait à gauche et non à droite comme les nombres).

    La gestion d’ordre de tri d’Excel ensuite te donne, fort logiquement, le résultat qui te pose problème vu qu’il commence par les valeurs numériques…
    Si tu saisis la même séquence de nombres direct dans la feuille, tu as, fort logiquement, le résultat attendu vu que le séparateur décimal de ta feuille est la virgule…

    vois ici pour comprendre le phénomène :

    http://www.developpez.net/forums/d55...istreur-macro/

    D'un autre côté, peu de contributeurs ouvrent les fichiers joints, et tu pourrais dans ce cas avoir le courage de fournir un tableau rempli pour que la personne n'ai pas à le faire à ta place ...

    cordialement,

    Didier

  6. #6
    Inactif  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 054
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 054
    Par défaut
    Bonjour Ormonth et merci de ta réaction,
    Suite à tes explications j'ai d'abord pensé que c'était à cause que mes TextBox sont enrégistrés dans une collection, mais non, c'est pas à cause de ça...
    colle ce code dans un UF, deux boutons et un TextBox

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Option Explicit
     
    Private Sub CommandButton1_Click()
        Sheets("Feuil1").Cells(3, 2) = TextBox1.Value
    End Sub
     
    Private Sub CommandButton2_Click()
        Sheets("Feuil1").Cells(3, 2) = Val(TextBox1.Value)
    End Sub
     
    Private Sub UserForm_Initialize()
        TextBox1.Value = Sheets("Feuil1").Cells(3, 2)
    End Sub
    Dans B3 tu tape un nombre avec décimale, ensuite ouvrir UF
    Bouton1 : la cellule est en texte.(en standard aligné à gauche)
    Bouton2 : pas de décimale
    Bien entendu, sans changer le libellé de TextBox.
    Maintenant, dans le TextBox, remplace la virgule par un point et clic sur le bouton2.
    Tu dis,
    A+

  7. #7
    Expert confirmé
    Avatar de Didier Gonard
    Homme Profil pro
    Formateur Office et développeur VBA en freelance
    Inscrit en
    Février 2008
    Messages
    2 805
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Formateur Office et développeur VBA en freelance

    Informations forums :
    Inscription : Février 2008
    Messages : 2 805
    Par défaut
    re bonjour LeForestier

    Oui, c'est normal pour Excel , on avait approché le problème récemment ici :

    http://www.developpez.net/forums/d85...rder-virgules/ 15h06

    C'est dû aux séparateurs décimaux comme vu dans le lien indiqué pour Elangel2008 et à la particularité de la fonction VAL :

    Note La fonction Val ne reconnaît que le point comme séparateur décimal (.). Lors de l'utilisation d'autres séparateurs décimaux (applications internationales, par exemple), convertissez la chaîne en nombre à l'aide de la fonction CDbl.
    donc ton exemple sera OK ainsi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub CommandButton2_Click()
        Sheets("Feuil1").Cells(3, 2) = CDbl(TextBox1.Value)
    End Sub
    si tu gardes bien la virgule en saisie

    cordialement,

    Didier

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

Discussions similaires

  1. [XL-2010] VBA problème de tri
    Par pepericou dans le forum Excel
    Réponses: 1
    Dernier message: 23/05/2014, 09h17
  2. problème de tri VBA-E
    Par bernard38 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 11/06/2008, 07h48
  3. [VBA]Problème sur tri de documents
    Par vnt2784 dans le forum VBA Access
    Réponses: 3
    Dernier message: 20/04/2007, 06h35
  4. problème de tri et optimisatiopn
    Par psyco2604 dans le forum XSL/XSLT/XPATH
    Réponses: 9
    Dernier message: 13/05/2004, 10h44
  5. [VBA-E] [Excel] Tri automatique
    Par bovi dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 01/10/2002, 10h19

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