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

Access Discussion :

[A-03] Séparer la chaine d'un champ de table d'après la chaine d'un autre champ


Sujet :

Access

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    43
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Septembre 2006
    Messages : 43
    Points : 29
    Points
    29
    Par défaut [A-03] Séparer la chaine d'un champ de table d'après la chaine d'un autre champ
    Bonjour à tous,

    bon alors j'ai une manip à faire sur des données. J'arrive à conceptualiser la manip mais je ne sais pas vraiment l'écrire... donc je viens vous demander secours.

    J'ai donc 2 tables contenant pour l'une (T1) des noms de rues et pour l'autre (T2) ce que j'appelle des types de rue.

    // T1 //
    NOM_RUE
    Avenue du Général de Gaulle
    Rue des Fleurs
    Rue d'Antan
    Rue Verte
    Avenue de la Grande Armée
    Avenue Danton
    Impasse de l'Aubépine

    // T2 //
    TYPE_RUE
    Avenue
    Avenue d'
    Avenue de
    Avenue de l'
    Avenue de la
    Avenue des
    Avenue du
    Rue
    Rue d'
    Rue de
    Rue de l'
    Rue de la
    Rue des
    Rue du
    Impasse
    Impasse de
    Impasse de l'
    ...etc...

    Et donc j'aimerais trouver pour chaque rue d'un côté le bon TYPE_RUE et de l'autre le nom complémentaire de façon à obtenir dans la table T1

    TYPE_RUE | NOM_SEUL | NOM_RUE
    Avenue du | Général de Gaulle | Avenue du Général de Gaulle
    Rue des | Fleurs | Rue des Fleurs
    Rue d' | Antan | Rue d'Antan
    Rue | Verte | Rue Verte
    Avenue de la | Grande Armée | Avenue de la Grande Armée
    Avenue | Danton | Avenue Danton
    Impasse de l' | Aubépine | Impasse de l'Aubépine

    Donc ce que je vois c'est faire une requête qui teste chaque NOM_RUE
    en ayant mis dans un tableau la liste des TYPE_RUE et leur nombre de caractères. Ensuite pour chaque enregistrement de la table T1, on teste si pour le nombre de caractère de TYPE_RUE, les n premiers caractères de NOM_RUE correspondent.
    Ceci dit, ça va poser un problème avec les "RUE" et "AVENUE" seuls car forcément "Avenue du Général de Gaulle" commence bien par "AVENUE", alors que ce qu'on veut obtenir c'est "AVENUE DU"...

    Comme mes compétences en VBA sont plutôt faibles je tourne autour de ça depuis un moment sans savoir trop par quel bout l'attrapper...

    Merci de votre aide.

  2. #2
    Membre actif Avatar de SeaWolf601
    Inscrit en
    Août 2006
    Messages
    254
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 254
    Points : 256
    Points
    256
    Par défaut
    Il y a une table sur lequel tu as le NOM_SEUL ?

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    43
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Septembre 2006
    Messages : 43
    Points : 29
    Points
    29
    Par défaut
    et non... ce serait trop simple :-)

    En fait je viens de faire un test avec une simple requête qui me permet d'obtenir ça :

    // La Requête //
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT T1.NOM_RUE, T2.TYPE_RUE
    FROM T1, T2
    WHERE (((T2.TYPE_RUE)=Left([T1]![NOM_RUE],Len([T2]![TYPE_RUE]))))
    ORDER BY T1.NOM_RUE;

    // Le résultat //

    NOM_RUE | TYPE_RUE
    AVENUE DE LA GRANDE ARMEE |AVENUE DE LA
    AVENUE DE LA GRANDE ARMEE |AVENUE
    AVENUE DU TRAIN |AVENUE
    AVENUE DU TRAIN |AVENUE DU
    IMPASSE DE L'AUBEPINE| IMPASSE DE L'
    IMPASSE DE L'AUBEPINE| IMPASSE DE
    IMPASSE DE L'AUBEPINE| IMPASSE
    RUE DANTON |RUE
    RUE DE LA FLEUR| RUE
    RUE DE LA FLEUR| RUE DE LA
    RUE DU GENERAL| RUE
    RUE DU GENERAL| RUE DU

    Donc je me dis que peut-être à partir de là il faudrait récupérer pour chaque occurence de NOM_RUE en doublon (triplon ou plus), le TYPE_RUE qui a le plus grand nombre de caractères. Et là on ne devrait pas être loin du résultat.

    Ca parait logique ? si oui, comment faire ?

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

    Il faudrait recréer dans ta requête un champ calculé à l'aide des fonctions Right et Len.

    En effet, tu a la longueur de la ligne totale, la longueur de l'élément de recherche, donc avec Right cela te permet de récupérer la longueur qui reste dans un autre champ.

    Philippe

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    43
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Septembre 2006
    Messages : 43
    Points : 29
    Points
    29
    Par défaut
    Oui effectivement comme ça c'est parfait.
    Je fais la manip en trois requêtes.

    R1 - Recherche de toutes les paires possibles NOM_RUE / TYPE_RUE
    R2 - Sélection sur la R1 des doublons NOM_RUE avec calcul du nombre de caractères de chaque TYPE_RUE
    R3 - Sélection sur la R2 des enregistrements dont le nombre de caractères est maximum et extraction de NOM_SEUL à partir de ce chiffre en utilisant la fonction RIGHT() sur le champ NOM_RUE.

    Merci pour l'aide !

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    43
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Septembre 2006
    Messages : 43
    Points : 29
    Points
    29
    Par défaut
    Une petite dernière remarque tout de même (c'est pour ça que j'ai enlevé le flag "résolu") : avec ma méthode par requêtes, le résultat est long à obtenir. Mon cas réel contient plus de 10000 NOM_RUE en T1 et près de 1400 TYPE_RUE en T2.

    Donc si quelqu'un connaissait une solution via programmation VB qui permette une exécution plus rapide, je suis preneur :-)

Discussions similaires

  1. Réponses: 2
    Dernier message: 07/05/2012, 20h09
  2. Réponses: 12
    Dernier message: 29/03/2012, 14h47
  3. Réponses: 4
    Dernier message: 21/10/2010, 23h34
  4. Réponses: 13
    Dernier message: 06/08/2008, 15h36
  5. créer un champs d'après la valeur d'un autre champ ?
    Par deby23 dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 06/03/2008, 11h16

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