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 uniquement sur la partie numérique d'un champ contenant nombre et texte [AC-2013]


Sujet :

IHM

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

    Informations forums :
    Inscription : Octobre 2013
    Messages : 423
    Points : 133
    Points
    133
    Par défaut Trier uniquement sur la partie numérique d'un champ contenant nombre et texte
    Bonjour,

    Dans un formulaire, je stocke des adresses composées entre autres d'un numéro de voirie qui a son champ propre (un champ texte) qui peut parfois contenir par exemple 7 bis.

    Je voudrais pouvoir trier mon formulaire en ASC sur ce champ. Le problème évidemment c'est que le tri donne 1, 10, 100, 2, 7 bis, etc.

    Il y aurait la solution de mettre deux champs pour séparer le nombre et le complément, mais je voudrais ne pas avoir à faire ça.

    Est ce qu'il existe un moyen de ne prendre en compte que la partie numérique de ce champ (peut-être par exemple en stockant dans un champ invisible uniquement cette partie numérique) pour pouvoir trier dessus ensuite ?

    Merci

  2. #2
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 075
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 075
    Points : 24 702
    Points
    24 702
    Par défaut
    Bonjour,
    Normalement on sépare les 2 dans 2 champs distincts mais il arrive que cela ne soit pas le cas.

    Il faut faire alors un tri en 2 fois sur les expressions suivantes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    val(nz([NumeroRue],"0"))
    pour le premier ainsi tu vas faire un tri sur la partie numérique, puis


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    right(nz([NumeroRue],"0") ,instr(1, nz([NumeroRue],0) ," "))
    pour le tri des éléments après l'espace.


    Evidemment elles doivent être prisent dans cet ordre.
    Le NZ permet de traiter le null éventuel.

    Cordialement,

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

    Informations forums :
    Inscription : Octobre 2013
    Messages : 423
    Points : 133
    Points
    133
    Par défaut
    Bonjour Loufab et merci.

    Dans mon formulaire, je trie mes colonnes par un double clic sur leur en-tête comme ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    If Not Me.OrderBy = "numVoirie" Then
       Me.OrderBy = "numVoirie"
    Else
       Me.OrderBy = "numVoirie desc"
    End If
    Me.OrderByOn = True
    Le tri ne se fait que sur une seule colonne mais c'est suffisant. Comment combiner ton code avec ça ?

    Merci

  4. #4
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 075
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 075
    Points : 24 702
    Points
    24 702
    Par défaut
    Dans la source du formulaire, crées 2 colonnes supplémentaires pour les 2 expressions pour y faire directement le tri. Sinon le faire dans le formulaire si c'est nécessaire comme tu le fais actuellement.

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

    Informations forums :
    Inscription : Octobre 2013
    Messages : 423
    Points : 133
    Points
    133
    Par défaut
    J'ai inséré les deux expressions dans la requête source de mon formulaire, c'est bon pour la première mais la deuxième me renvoie ce qui est après l'espace seulement si le numéro de rue comporte 2 chiffres.

    'bis' pour '30 bis' mais 'is' pour '1 bis' ou ' bis' pour '100 bis'. On peut y faire quelque chose ?

    Par contre excuse moi mais que veux-tu dire par "Sinon le faire dans le formulaire si c'est nécessaire comme tu le fais actuellement" ?

  6. #6
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 075
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 075
    Points : 24 702
    Points
    24 702
    Par défaut
    oups petite erreur entre l'utilisation du left et right. Donner le code de mémoire à souvent ses limites.

    Voici la bonne syntaxe

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    right(nz([NumeroRue],"0") ,len(nz([NumeroRue],"0"))-instr(1, nz([NumeroRue],0) ," "))

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

    Informations forums :
    Inscription : Octobre 2013
    Messages : 423
    Points : 133
    Points
    133
    Par défaut
    Merci, ça fonctionne pour le tri ascendant, mais pas pour le descendant, ou faut-il mettre le desc, j'ai essayé un peu partout et ça ne marche pas.

    J'ai fait comme ceci, j'ai du remplacer les "0" par des '0' pour que ça marche.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    If Not Me.OrderBy = "Val(Nz([numVoirie], '0')), right(nz([numVoirie],'0') ,len(nz([numVoirie],'0'))-instr(1, nz([numVoirie],0) ,' '))" Then
    Me.OrderBy = "Val(Nz([numVoirie], '0')), right(nz([numVoirie],'0') ,len(nz([numVoirie],'0'))-instr(1, nz([numVoirie],0) ,' '))"
       Else
    Me.OrderBy = "Val(Nz([numVoirie], '0')), right(nz([numVoirie],'0') ,len(nz([numVoirie],'0'))-instr(1, nz([numVoirie],0) ,' ')) desc"
       End If
    Me.OrderByOn = True

  8. #8
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 075
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 075
    Points : 24 702
    Points
    24 702
    Par défaut
    Bonjour,
    Je pense que tu te compliques la vie pour rien.

    Dans un premier temps tu crées les colonnes dans ta source comme je te l'ai suggéré.
    Tu vas donc avoir 2 colonnes supplémentaires nommées numTri_1 et numTri_2, respectivement pour le début et la fin, avec les expressions que je t'ai fourni.

    Dans ton formulaire tu n'as plus qu'à intégrer le code de tri comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    If Me.OrderBy Like "* DESC*" Then
       Me.OrderBy = "numTri_1 ASC, numTri_2 ASC"
    Else
       Me.OrderBy = "numTri_1 DESC, numTri_2 DESC"
    End If
    Me.OrderByOn = True
    Il n'y a rien d'autre à faire.

    Cordialement,

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

    Informations forums :
    Inscription : Octobre 2013
    Messages : 423
    Points : 133
    Points
    133
    Par défaut
    C'est ce que j'avais fait en premier, en fait j'ai juste un peu peur de modifier ma requête source sur laquelle je fais une recherche multicritères car j'ai beaucoup de champs avec des Null, ça fonctionne comme je veux pour le moment mais je t'avoue que j'ai un peu peur de la modifier et de voir que ça aille de travers ensuite !

    Bon je vais faire comme ça.

    Je te remercie

  10. #10
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 075
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 075
    Points : 24 702
    Points
    24 702
    Par défaut
    Je te rassure, il ne s'agit que d'ajouter 2 colonnes, c'est rapidement réversibles et tu peux prendre la précaution de faire une copie de l'objet.

    Dans tous les cas c'est le moyen le plus simple et le plus rapide en terme de temps d'exécution.

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

Discussions similaires

  1. modifier interligne uniquement sur les parties "texte"
    Par shams dans le forum Mise en forme
    Réponses: 7
    Dernier message: 12/05/2009, 13h01
  2. Extraire une partie de table sur critère (range) numérique
    Par lbar012001 dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 22/12/2008, 18h36
  3. Requete de mise à jour sur une partie de la table uniquement
    Par alex830001 dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 31/10/2008, 10h56
  4. [GD] ajouter un texte sur une image uniquement à l'impression signature numérique
    Par DrHelmut dans le forum Bibliothèques et frameworks
    Réponses: 3
    Dernier message: 05/10/2006, 17h13
  5. Comment installer le kernel 2.4.25-2 uniquement sur Mdk 10.0 ?
    Par Thrystan dans le forum Administration système
    Réponses: 8
    Dernier message: 12/08/2004, 12h32

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