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 :

Extraction chaine de caracteres [AC-2000]


Sujet :

Access

  1. #1
    Nouveau Candidat au Club
    Femme Profil pro
    Technicien SIG
    Inscrit en
    Décembre 2011
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Technicien SIG
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Décembre 2011
    Messages : 3
    Points : 1
    Points
    1
    Par défaut Extraction chaine de caracteres
    Bonjour

    Voici mon problème

    Je dispose d’une base de données avec un champ adresse, dont voici un exemple d’enregistrements :


    ADRESSE
    0023 RUE EISENHOWER 50120 EQUEURDREVILLE
    0016 PLACE DE LA REPUBLIQUE 50110 TOURLAVILLE
    50460 QUERQUEVILLE


    J’aimerais dissocier ce champ en 2. Le 1er contiendrait le n° et le nom de la voie et le 2ème contiendrait le code postal et la ville

    J’obtiendrais alors :

    VOIE...................................... VILLE

    0023 RUE EISENHOWER.............. 50120 EQUEURDREVILLE
    0016 PLACE DE LA REPUBLIQUE.....50110 TOURLAVILLE
    ............................................. 50460 QUERQUEVILLE

    Merci de m’indiquer comment procéder (j’ai plus de 37 000 enregistrements).
    Si je dois utiliser du vba, merci de m’indiquez clairement la procédure, car je ne maitrise pas du tout le vba.

    Je recherche désespérément sur les forums mais sans résultat. Dans la mesure ou l’extraction de la chaine (à partir du code postal 50…) n’est pas à une position fixe dans le champ d’origine.

    Merci de votre aide

    Cordialement

    N L.

  2. #2
    Expert confirmé Avatar de Richard_35
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    3 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 3 121
    Points : 4 596
    Points
    4 596
    Par défaut
    Bonjour Nlino,

    Quelques précisions :
    • Le n° de l'adresse est-il toujours en position 1 de ton enregistrement d'origine ?
    • Le n° de l'adresse est-il toujours sous la forme XXXXY ?
      • avec XXXX cadré à droite avec des 0 non significatifs ?
      • et Y toujours égal à blanc ?

  3. #3
    Nouveau Candidat au Club
    Femme Profil pro
    Technicien SIG
    Inscrit en
    Décembre 2011
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Technicien SIG
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Décembre 2011
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Bonjour

    Le n° de l'adresse est en général toujours en 1ere position, et sur 4 caractères, avec des 0 non significatifs (j'ai des numeros d'adresse type 1024 rue xxxx)
    Parfois je n'ai pas de numéro de rue (cas des hameaux et lieux-dits)

    Y toujours égal à blanc

    Je me rends compte de la complexité car il existe plusieurs formes d'adresse (avec ou sans numero, avec ou sans nom de voie, indication seulement du code postal et de la ville)

    Merci de ton aide

    Cordialement

    N L

  4. #4
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    12 763
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 12 763
    Points : 58 020
    Points
    58 020
    Billets dans le blog
    42
    Par défaut
    bonjour,

    et en partant de la fin de la chaîne de caractères...
    Séparer des éléments d'un champ dans des champs distincts (exemple : adresse) ?

  5. #5
    Expert confirmé Avatar de Richard_35
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    3 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 3 121
    Points : 4 596
    Points
    4 596
    Par défaut
    Bonjour Nlino et Fabien,

    Donc :
    • si ExtracChaîne(ADRESSE;5;1)=" " et Gauche(ADRESSE;4) compris entre "0000" et "9999", alors Gauche(ADRESSE;4) est un n° de voie ;
    • la suite devrait être aisée avec le lien fourni par Fabien (que je resalue au passage). L'astuce est de commencer le "balayage" de ADRESSE par la fin afin d'extraire le code postal.

    Avec le n° de voie et le code postal, tu devrais pouvoir extraire le nom de la voie et la ville.

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

    Vu que c'est sur une table, un code à essayer :

    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    Public Sub EclatageAdresse()
            ' éclatage d'une adresse de type
            ' 0023 RUE EISENHOWER 50120 EQUEURDREVILLE
            ' en deux champs Adresse1 et CPVILLE
            ' le tout est dans une table tbl_Adresse qui comporte un champ Adresse avec la ligne complète
     
     
            ' déclaration ne pas oublier de déclarer la bibliothèque DAO 3.6
     
            Dim db As DAO.Database
            Dim rst As DAO.Recordset
            Dim i As Integer
            Dim j As Integer
            Dim tabAdr() As String
            Dim strAdresse1 As String
            Dim strCpVille As String
     
            ' affectation
            Set db = CurrentDb
            Set rst = db.OpenRecordset("SELECT * FROM tbl_Adresse")
     
            ' parcours des enregistrements
            While Not rst.EOF
                ' on met la chaine complète dans un tableau
                tabAdr() = Split(rst("Adresse"))
                ' on parcourt le tableau
                For i = 0 To UBound(tabAdr())
                    ' on test si on trouve le code postal
                    If Len(tabAdr(i)) = 5 And IsNumeric(tabAdr(i)) Then
                        ' on a trouvé le code postal, on met à jour les enregistrements
                        If i = 0 Then  ' cas de ville + cp
                            For j = i To UBound(tabAdr())
                                 strCpVille = strCpVille & " " & tabAdr(j)
                            Next j
                        Else
                            For j = 0 To i - 1
                                strAdresse1 = strAdresse1 & " " & tabAdr(j)
                            Next j
                            For j = i To UBound(tabAdr())
                                strCpVille = strCpVille & " " & tabAdr(j)
                            Next j
                        End If
                    End If
                Next i
     
                rst.Edit
                    rst("Adresse1") = strAdresse1
                    rst("cpville") = strCpVille
                rst.Update
                strAdresse1 = ""
                strCpVille = ""
                rst.MoveNext
            Wend
            MsgBox "fin de traitement"
    End Sub
    J'ai pris un autre piste en utilisant la fonction Split.

    Philippe

  7. #7
    Nouveau Candidat au Club
    Femme Profil pro
    Technicien SIG
    Inscrit en
    Décembre 2011
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Technicien SIG
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Décembre 2011
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Merci Philippe

    J'ai testé le code et cela fonctionne.

    Merci beaucoup car je voyais l'affaire mal engagée

    Merci également à tout ceux qui m'ont répondu

    Je vous souhaite de bonnes fetes de fin d'années

    Cordialement

    Nadege

  8. #8
    Membre à l'essai
    Femme Profil pro
    Autre
    Inscrit en
    Octobre 2022
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 47
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Octobre 2022
    Messages : 17
    Points : 11
    Points
    11
    Par défaut Besoin d'aide complémentaire
    Bonjour Philippe
    Je relance ce sujet car c'est exactement ce dont j'ai besoin !!! Et ça fonctionne, Merci !!!
    Mais je dois également séparer le CODE POSTAL de la VILLE, et je ne comprends pas assez la fonction pour y arriver seule ...

    Merci d'avance pour toute l'aide apportée !!
    Bonne journée !

    Citation Envoyé par Invité Voir le message
    Bonjour

    Vu que c'est sur une table, un code à essayer :

    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    Public Sub EclatageAdresse()
            ' éclatage d'une adresse de type
            ' 0023 RUE EISENHOWER 50120 EQUEURDREVILLE
            ' en deux champs Adresse1 et CPVILLE
            ' le tout est dans une table tbl_Adresse qui comporte un champ Adresse avec la ligne complète
     
     
            ' déclaration ne pas oublier de déclarer la bibliothèque DAO 3.6
     
            Dim db As DAO.Database
            Dim rst As DAO.Recordset
            Dim i As Integer
            Dim j As Integer
            Dim tabAdr() As String
            Dim strAdresse1 As String
            Dim strCpVille As String
     
            ' affectation
            Set db = CurrentDb
            Set rst = db.OpenRecordset("SELECT * FROM tbl_Adresse")
     
            ' parcours des enregistrements
            While Not rst.EOF
                ' on met la chaine complète dans un tableau
                tabAdr() = Split(rst("Adresse"))
                ' on parcourt le tableau
                For i = 0 To UBound(tabAdr())
                    ' on test si on trouve le code postal
                    If Len(tabAdr(i)) = 5 And IsNumeric(tabAdr(i)) Then
                        ' on a trouvé le code postal, on met à jour les enregistrements
                        If i = 0 Then  ' cas de ville + cp
                            For j = i To UBound(tabAdr())
                                 strCpVille = strCpVille & " " & tabAdr(j)
                            Next j
                        Else
                            For j = 0 To i - 1
                                strAdresse1 = strAdresse1 & " " & tabAdr(j)
                            Next j
                            For j = i To UBound(tabAdr())
                                strCpVille = strCpVille & " " & tabAdr(j)
                            Next j
                        End If
                    End If
                Next i
     
                rst.Edit
                    rst("Adresse1") = strAdresse1
                    rst("cpville") = strCpVille
                rst.Update
                strAdresse1 = ""
                strCpVille = ""
                rst.MoveNext
            Wend
            MsgBox "fin de traitement"
    End Sub
    J'ai pris un autre piste en utilisant la fonction Split.

    Philippe

  9. #9
    Expert éminent Avatar de hyperion13
    Homme Profil pro
    Webplanneur
    Inscrit en
    Octobre 2007
    Messages
    4 273
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Réunion

    Informations professionnelles :
    Activité : Webplanneur

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 273
    Points : 6 582
    Points
    6 582
    Par défaut
    Salut
    Une solution avec les fct() texte en SQL
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    CpVille: Droite([adresse];NbCar([adresse])-InStrRev([adresse];" ";InStrRev([adresse];" ")-1))
    Cp: Val(Droite([adresse];NbCar([adresse])-InStrRev([adresse];" ";InStrRev([adresse];" ")-1)))
    Ville: Droite([adresse];NbCar([adresse])-InStrRev([adresse];" "))
    Images attachées Images attachées  

  10. #10
    Membre à l'essai
    Femme Profil pro
    Autre
    Inscrit en
    Octobre 2022
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 47
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Octobre 2022
    Messages : 17
    Points : 11
    Points
    11
    Par défaut Demande aide complémentaire - Eclatage Adresse
    Merci beaucoup Hyperion !!!

    Une petite aide supplémentaire requise, vu mon grand niveau de novice et d'apprentie sorcière ...
    Comment je dois rédiger ce code à la suite de mon actuel ?

    Merci pour toute l'aide apportée !!!

    Citation Envoyé par hyperion13 Voir le message
    Salut
    Une solution avec les fct() texte en SQL
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    CpVille: Droite([adresse];NbCar([adresse])-InStrRev([adresse];" ";InStrRev([adresse];" ")-1))
    Cp: Val(Droite([adresse];NbCar([adresse])-InStrRev([adresse];" ";InStrRev([adresse];" ")-1)))
    Ville: Droite([adresse];NbCar([adresse])-InStrRev([adresse];" "))

  11. #11
    Expert éminent Avatar de hyperion13
    Homme Profil pro
    Webplanneur
    Inscrit en
    Octobre 2007
    Messages
    4 273
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Réunion

    Informations professionnelles :
    Activité : Webplanneur

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 273
    Points : 6 582
    Points
    6 582
    Par défaut
    Salut
    Si par code actuel vous entendez le code du Post#6, alors désolé je suis passé par de simples requêtes avec les fonctions Texte disponibles. Il n'y a pas forcément nécessité de passer par DAO !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Voie: Gauche([adresse];InStrRev([adresse];" ";InStrRev([adresse];" ")-1))
    Cp: Val(Droite([adresse];NbCar([adresse])-InStrRev([adresse];" ";InStrRev([adresse];" ")-1)))
    Ville: Droite([adresse];NbCar([adresse])-InStrRev([adresse];" "))
    Query UpDate
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    UPDATE tbl_adresse SET voie = Left([adresse],InStrRev([adresse]," ",InStrRev([adresse]," ")-1)), cp = Val(Right([adresse],Len([adresse])-InStrRev([adresse]," ",InStrRev([adresse]," ")-1))), ville = Right([adresse],Len([adresse])-InStrRev([adresse]," "));
    Images attachées Images attachées  

  12. #12
    Membre éprouvé
    Homme Profil pro
    Développeur .net - Office - Quadiant
    Inscrit en
    Février 2020
    Messages
    594
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Développeur .net - Office - Quadiant
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Février 2020
    Messages : 594
    Points : 1 089
    Points
    1 089
    Par défaut
    Bonjour,

    Vous cherchez au premier espace en commençant par la fin.

    Mais vous faites quoi avec des villes qui ont plusieurs mots ?


    ONTAYG

  13. #13
    Expert éminent Avatar de hyperion13
    Homme Profil pro
    Webplanneur
    Inscrit en
    Octobre 2007
    Messages
    4 273
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Réunion

    Informations professionnelles :
    Activité : Webplanneur

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 273
    Points : 6 582
    Points
    6 582
    Par défaut
    Citation Envoyé par ONTAYG Voir le message
    ... Mais vous faites quoi avec des villes qui ont plusieurs mots ?
    et vous ?
    Toujours sans passer par DAO et en utilisant les fonctions texte et une fonction personnalisée.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Voie: Gauche([adresse];InStrRev([adresse];Droite(GetNumeric([adresse]);5))-1)
    Cp: Droite(GetNumeric([adresse]);5)
    Ville: Droite([adresse];NbCar([adresse])-InStrRev([adresse];Droite(GetNumeric([adresse]);5))-4)
    Dans un module standard
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Function GetNumeric(vfield As String)
    Dim StringLength As Integer
    StringLength = Len(vfield)
    For i = 1 To StringLength
        If IsNumeric(Mid(vfield, i, 1)) Then Result = Result & Mid(vfield, i, 1)
    Next i
    GetNumeric = Result
    End Function
    qry UpDate
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    UPDATE tbl_adresse SET voie = Left([adresse],InStrRev([adresse],Right(GetNumeric([adresse]),5))-1), cp = Right(GetNumeric([adresse]),5), ville = Right([adresse],Len([adresse])-InStrRev([adresse],Right(GetNumeric([adresse]),5))-4);
    Images attachées Images attachées  

  14. #14
    Membre à l'essai
    Femme Profil pro
    Autre
    Inscrit en
    Octobre 2022
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 47
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Octobre 2022
    Messages : 17
    Points : 11
    Points
    11
    Par défaut MERCI Hyperion !!
    Merci beaucoup !
    Je suis parvenue à mes fins grâce à toi !

    Citation Envoyé par hyperion13 Voir le message
    et vous ?
    Toujours sans passer par DAO et en utilisant les fonctions texte et une fonction personnalisée.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Voie: Gauche([adresse];InStrRev([adresse];Droite(GetNumeric([adresse]);5))-1)
    Cp: Droite(GetNumeric([adresse]);5)
    Ville: Droite([adresse];NbCar([adresse])-InStrRev([adresse];Droite(GetNumeric([adresse]);5))-4)
    Dans un module standard
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Function GetNumeric(vfield As String)
    Dim StringLength As Integer
    StringLength = Len(vfield)
    For i = 1 To StringLength
        If IsNumeric(Mid(vfield, i, 1)) Then Result = Result & Mid(vfield, i, 1)
    Next i
    GetNumeric = Result
    End Function
    qry UpDate
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    UPDATE tbl_adresse SET voie = Left([adresse],InStrRev([adresse],Right(GetNumeric([adresse]),5))-1), cp = Right(GetNumeric([adresse]),5), ville = Right([adresse],Len([adresse])-InStrRev([adresse],Right(GetNumeric([adresse]),5))-4);

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

Discussions similaires

  1. [AC-2003] Extraction chaine de caracteres
    Par alexkickstand dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 16/07/2009, 09h28
  2. [RegEx] Extraction chaine de caractere
    Par dafalri dans le forum Langage
    Réponses: 6
    Dernier message: 17/03/2006, 16h05
  3. [String] Extraction chaine de caractères
    Par beZor dans le forum Langage
    Réponses: 9
    Dernier message: 27/02/2006, 14h46
  4. extraction d'une chaine de caractere ...
    Par nicolasghaz dans le forum VBScript
    Réponses: 7
    Dernier message: 31/10/2005, 18h53
  5. [XSLT] Extraction de chaine de caractere
    Par Hugo001 dans le forum XSL/XSLT/XPATH
    Réponses: 11
    Dernier message: 28/10/2004, 08h27

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