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

VBA Access Discussion :

Extraction Chaine (Complexe)


Sujet :

VBA Access

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Janvier 2007
    Messages
    123
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 123
    Par défaut Extraction Chaine (Complexe)
    Bonjour,
    j'aurais besoin d'aide pour ma requete. J'ai une champs Texte du nom de IdActPrio. Se champs est utilisé pour inscrire une numérotation avec des points; Expl: 1.1 ou 2.34 ou 45.54.32 ou simplement 100 .

    Ce que je veut faire c'est d'extraire , dans trois champs différents les nombres sans les points. Et de les concaténer dans un quatrieme champ, pour me permettre de les triés en ordre croissant

    Résultat à obtenir:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    IdActPrio       Section1      Section2     Section3
    1. 1                  1                10              00
    2.34                 2                34              00
    45.54.32          45               54              32
    100                  100             00              00

    Ce que j'ai trouvé sur internet c'est pour les adresses IP, et j'ai essayer de l'adapter à ma situation, mais je n'y arrive pas.

    Section I: CNum(Gauche([IdActPrio];(DansChaîne(1;[IdActPrio];".")-1)))
    Section II: CNum(ExtracChaîne([IdActPrio];DansChaîne(1;[IdActPrio];".")+1;DansChaîne(DansChaîne(1;[IdActPrio];".")+1;[IdActPrio];".")-DansChaîne(1;[IdActPrio];".")-1))
    Section III: CNum(ExtracChaîne([IdActPrio];DansChaîne(DansChaîne(1;[IdActPrio];".")+1;[IdActPrio];".")+1;DansChaîne(DansChaîne(DansChaîne(1;[IdActPrio];".")+1;[IdActPrio];".")+1;[IdActPrio];".")-DansChaîne(DansChaîne(1;[IdActPrio];".")+1;[IdActPrio];".")-1))
    Section IV: CNum(Droite([IdActPrio];NbCar([IdActPrio])-DansChaîne(DansChaîne(DansChaîne(1;[IdActPrio];".")+1;[IdActPrio];".")+1;[IdActPrio];".")))
    S.V.P. Vraiment besoin d'aide

    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 596
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 80
    Localisation : Belgique

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

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 596
    Par défaut
    Vois si ceci te convient :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Public Function SansPoint(Valeur As String)
     'exemple   ? sanspoint("1.2") ---> 12
    Dim i As Integer
     
    For i = 1 To Len(Valeur)
    If Mid(Valeur, i, 1) <> "." Then
    SansPoint = SansPoint & Mid(Valeur, i, 1)
    End If
    Next i
     
     
    End Function

  3. #3
    Membre Expert
    Avatar de mout1234
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    2 210
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 2 210
    Par défaut
    Bonsoir,

    Une solution par une fonction écrite en VBA serait sans doute préférable mais il semble que tu souhaites une version SQL.

    ClaudeLELOUP, Le code que tu proposes ne répond pas à son besoin je crois.



    Essaies cette requête:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT IdActPrio, InStr(1,[IdActPrio],".") AS point1,
    IIf([point1]>0,InStr([point1]+1,[IdActPrio],"."),0) AS point2,
    IIf([point1]>0,Left([IdActPrio],[point1]-1),[IdActPrio]) AS section1,
    IIf([point2]>0,Mid([IdActPrio],[point1]+1,[point2]-[point1]-1),IIf([point1]>0,Mid([IdActPrio],[point1]+1),0)) AS section2,
    IIf([point2]>0,Mid([IdActPrio],[Point2]+1),0) AS section3
    FROM Table1;

  4. #4
    Modérateur
    Avatar de Chtulus
    Homme Profil pro
    Ingénieur
    Inscrit en
    Avril 2008
    Messages
    3 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2008
    Messages : 3 094
    Par défaut
    Bonsoir,

    Pourquoi ne pas utiliser la fonction REPLACE
    « Je ne cherche pas à connaître les réponses, je cherche à comprendre les questions. »
    - Confucius -

    Les meilleurs cours, tutoriels et Docs sur les SGBD et le SQL
    Tous les cours Office
    Solutions d'Entreprise



  5. #5
    Membre confirmé
    Inscrit en
    Janvier 2007
    Messages
    123
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 123
    Par défaut
    Merci ClaudeLeloup mais mout1234 à raison le code SQL est mieux pour moi et il fonctionne bien.
    Par contre ClaudeLeloup si tu veux me dire ou installé le code que tu m'a proposé, je vais l'essayé.

    Encore Merci

  6. #6
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 596
    Par défaut
    1° un fonction se met dans un module
    Ce que je veux faire c'est extraire , dans trois champs différents les nombres sans les points. Et de les concaténer dans un quatrième champ, pour me permettre de les trier en ordre croissant
    Voici le sql :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT SansPoint([Champ1]) & SansPoint([Champ2]) & SansPoint([Champ3]) AS Champ4
    FROM Table1
    ORDER BY SansPoint([Champ1]) & SansPoint([Champ2]) & SansPoint([Champ3]);
    Exemple en annexe

  7. #7
    Membre Expert

    Profil pro
    Inscrit en
    Mars 2006
    Messages
    1 350
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 350
    Par défaut
    Bonjour,
    Citation Envoyé par Chtulus Voir le message
    Pourquoi ne pas utiliser la fonction REPLACE
    En effet. Il semble que les 3 sections ne sont établies que pour supprimer les points. Si c'est le cas, pourquoi pas un simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT tbl_Essai.IdActPrio, 
    Replace([IdActPrio],".","") AS SansPoint
    FROM tbl_Essai;
    Cordialement

  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 596
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 80
    Localisation : Belgique

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

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 596
    Par défaut
    Merci à francishop
    Cette solution est beaucoup plus élégante!

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

Discussions similaires

  1. [RegEx] Extraction chaine ou debut d'adresse mail
    Par cerede2000 dans le forum Langage
    Réponses: 11
    Dernier message: 29/05/2007, 22h40
  2. Réponses: 3
    Dernier message: 03/09/2006, 12h02
  3. [RegEx] Extraction chaine de caractere
    Par dafalri dans le forum Langage
    Réponses: 6
    Dernier message: 17/03/2006, 16h05
  4. [String] Extraction chaine de caractères
    Par beZor dans le forum Langage
    Réponses: 9
    Dernier message: 27/02/2006, 14h46
  5. Extraction chaine
    Par ptitsoleil87 dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 10/02/2005, 10h53

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