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

IHM Discussion :

Trier sur deux nombres séparés par un tiret dans un champ texte [AC-2013]


Sujet :

IHM

  1. #1
    Membre habitué
    Homme Profil pro
    Inscrit en
    Octobre 2013
    Messages
    421
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2013
    Messages : 421
    Points : 132
    Points
    132
    Par défaut Trier sur deux nombres séparés par un tiret dans un champ texte
    Bonjour,

    Je cherche à pouvoir faire un tri classique (ascendant ou descendant) sur un champ texte contenant deux nombres séparés par un tiret.

    Je m'explique : j'ai des actes administratifs enregistrés par un code composé de l'année et du numéro de l'acte.

    Exemple : 2015-89 ou 2015-130 ou encore 2014-1265. Bien entendu, le tri n'est pas correct, le 2015-130 arrivant avant le 2015-89 en tri ascendant par exemple.

    L'année ne pose évidemment pas de problème puisqu'elle est toujours composée de 4 chiffres, c'est le nombre après le tiret qui gêne puisqu’il peut être de 2,3, ou 4 chiffres. Je ne peux pas rajouter des 0 devant, le code doit être écrit exactement comme ça.

    J'avais obtenu de l'aide pour un problème à peu près similaire ici http://www.developpez.net/forums/d14...-nombre-texte/ (merci Loufab), mais je ne sais pas reproduire cette solution.

    Est-ce quelqu'un pourrait m'aider ?

    Merci

  2. #2
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 594
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 594
    Points : 281 907
    Points
    281 907
    Par défaut
    Bonjour,

    Par exemple, comme ceci




    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT LaTable.NumeroActe, Left([NumeroActe],4) AS An, CInt(Right([NumeroActe],Len([NumeroActe])-5)) AS Num
    FROM LaTable
    ORDER BY Left([NumeroActe],4), CInt(Right([NumeroActe],Len([NumeroActe])-5));
    SVP ne m'envoyez pas de messages privés pour poser des questions techniques, vous n'aurez pas de réponse !

  3. #3
    Expert éminent

    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    3 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 840
    Points : 7 974
    Points
    7 974
    Par défaut
    Bonsoir,

    La technique est la même. Il faudrait rajouter 2 nouveaux champs dans la source de ton formulaire avec comme source :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    AnneeATrie : Left(TonChamp;4)
    NumeroInc : Format(Right(TonChamp;len(TonChamp)-5));"000")
    NumeroInc va être présenté toujours avec 3 position.

    Et donc trier après ta requête sur AnneeATrie et NumeroInc.

    Cordialement,
    Mandresy
    "Je ne sais qu'une chose, c'est que je ne sais rien" Socrate

    N'oublions pas de mettre quand on a trouvé notre bonheur. Soyons sympa pour les futurs heureux.

    Merci, c'est toujours sympa de recevoir des de votre part

  4. #4
    Membre habitué
    Homme Profil pro
    Inscrit en
    Octobre 2013
    Messages
    421
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2013
    Messages : 421
    Points : 132
    Points
    132
    Par défaut
    Bonjour et merci à vous Claude et Madefemere,

    Vos deux solutions semblent fonctionner (ça semble un peu plus compliqué avec la deuxième), cependant j'ai un petit soucis (Claude va comprendre de quoi je parle )

    Je voudrais utiliser ceci dans un formulaire de recherche multicritères, mais j'ai parfois des champs Null, et la deuxième partie du tri affiche une erreur dans la requête quand le champ est Null. Si je n'ai pas de valeur Null quand je lance le tri, ça fonctionne parfaitement. En revanche s'il y en a, ça ne marche plus j'ai une erreur 3464 (type de donnes incompatible avec l'expression du critère), ou erreur 2766 (l'objet ne contient pas d'objet automation "formulaires"). Dans le code du lien ci-dessus, le problème ne se produit pas, quand le champ est vide il y a des 0 qui se mettent.

    On peut arranger ça ?

  5. #5
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 594
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 594
    Points : 281 907
    Points
    281 907
    Par défaut
    Bonjour,

    Peux-tu donner une courte liste de cas concrets et dire :
    - où classer les valeurs nulles (avant ou après les non nulles ?) ;
    - dans quel ordre faut-il classer entre eux les enregistrements avec valeur nulle.
    SVP ne m'envoyez pas de messages privés pour poser des questions techniques, vous n'aurez pas de réponse !

  6. #6
    Expert éminent
    Avatar de jimbolion
    Homme Profil pro
    Moulticien
    Inscrit en
    Janvier 2013
    Messages
    3 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Moulticien
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2013
    Messages : 3 150
    Points : 7 001
    Points
    7 001
    Billets dans le blog
    2
    Par défaut
    rag83, Claude, Mandresy

    en contrôlant par la fonction nz, tu peux utiliser cet exemple inspiré de la technique de Claude

    Nom : Capture.JPG
Affichages : 506
Taille : 58,6 Ko

    les valeurs nulles se verront affecter un numéro du type : 00000-00000

    ce qui nous donne le code SQL suivant :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT IIf(Nz([NumeroActe],"")="","00000-00000",Left([NumeroActe],5) & Right("00000" & Mid([NumeroActe],6),5)) AS N_Acte
    FROM LaTable
    ORDER BY IIf(Nz([NumeroActe],"")="","00000-00000",Left([NumeroActe],5) & Right("00000" & Mid([NumeroActe],6),5));

    A noter que le formatage de la chaîne prévoit des valeurs jusqu'à 5 chiffres après le séparateur, à adapter donc en fonction de ton cas

    jimbolion
    N'oubliez pas le Tag si la réponse donnée vous a été utile et pour une réponse pertinente.
    Retrouvez-moi sur le chat en salon base de données

  7. #7
    Membre habitué
    Homme Profil pro
    Inscrit en
    Octobre 2013
    Messages
    421
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2013
    Messages : 421
    Points : 132
    Points
    132
    Par défaut
    Bonjour tout le monde,

    Je te remercie Jimbolion, je teste ça ce soir.

    Pour des cas concrets Claude, pas grand-chose de plus que dans mon premier post, des années à gauche, un - au milieu, et des nombres entre 1 et 4 chiffres à droite (je n'en ai encore jamais vu avec 5 chiffres pour le moment).
    Pour l'ordre de tri, actuellement les valeurs nulles se mettent avant les autres en ascendant, je pense qu'on peut laisser comme ça. Pour le classement des valeurs nulles entre elles, je ne trie pas que sur ce champ mais sur d'autres aussi, donc pas d'importance non ?

  8. #8
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 594
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 594
    Points : 281 907
    Points
    281 907
    Par défaut
    Comme ceci, par exemple


    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT LaTable.NumeroActe
    FROM LaTable
    ORDER BY CInt(Left([NumeroActe],4))*1000000+CInt(IIf(Len([NumeroActe])>5,CInt(Right([NumeroActe],Len([NumeroActe])-5)),0));
    SVP ne m'envoyez pas de messages privés pour poser des questions techniques, vous n'aurez pas de réponse !

  9. #9
    Membre habitué
    Homme Profil pro
    Inscrit en
    Octobre 2013
    Messages
    421
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2013
    Messages : 421
    Points : 132
    Points
    132
    Par défaut
    Oui Claude c'est très bien, par contre je ne sais pas si ça a son importance mais il y aura toujours un nombre à droite du tiret. Soit le champ est rempli sous la forme xxxx-x..., soit il est vide.
    Je teste tout ça plus tard !

  10. #10
    Membre habitué
    Homme Profil pro
    Inscrit en
    Octobre 2013
    Messages
    421
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2013
    Messages : 421
    Points : 132
    Points
    132
    Par défaut
    Voila je viens de tester les deux solutions, la tienne semble très bien fonctionner Jimbolion, en revanche Claude avec la tienne il y a toujours une erreur avec les champ Null.

    Je fais encore quelques tests et je passe en résolu si pas d'autre soucis.

    Merci à tous les deux

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

Discussions similaires

  1. [XL-2003] Par Macro, décortiquer chiffres ou nombres séparés par une virgule
    Par malabarbe dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 02/07/2011, 20h46
  2. [Batch] Comparer Deux Nombres Généres par un RANDOM
    Par AZzjeioafh dans le forum Scripts/Batch
    Réponses: 2
    Dernier message: 22/09/2009, 20h19
  3. [RegEx] Extraire des nombres séparés par des caractères spéciaux
    Par GouKen dans le forum Langage
    Réponses: 2
    Dernier message: 29/01/2008, 16h49
  4. Réponses: 2
    Dernier message: 17/01/2007, 17h21
  5. Trier sur deux clés
    Par mpat dans le forum ASP
    Réponses: 2
    Dernier message: 01/12/2005, 14h07

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