Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access
Access Forum d'entraide sur Microsoft Access. Avant de poster -> La F.A.Q Access
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 15/12/2011, 15h06   #1
Invité de passage
 
Femme Nadege
Technicien SIG
Inscription : décembre 2011
Messages : 3
Détails du profil
Informations personnelles :
Nom : Femme Nadege
Localisation : France, Manche (Basse Normandie)

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

Informations forums :
Inscription : décembre 2011
Messages : 3
Points : 0
Points : 0
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.
nlino est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/12/2011, 17h09   #2
Expert Confirmé
 
Avatar de Richard_35
 
Homme
Inscription : juillet 2007
Messages : 2 184
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Ille et Vilaine (Bretagne)

Informations forums :
Inscription : juillet 2007
Messages : 2 184
Points : 2 814
Points : 2 814
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 ?
__________________
Dis-nous et à bientôt,
Richard.
----------------------------------------------------------------------------------------------
En cas de résolution, et afin de faciliter la tâche des bénévoles, merci de cliquer sur .
et permettent aux forumeurs de cibler leur recherche dans une discussion : n'hésitez pas à voter !
Richard_35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/12/2011, 08h54   #3
Invité de passage
 
Femme Nadege
Technicien SIG
Inscription : décembre 2011
Messages : 3
Détails du profil
Informations personnelles :
Nom : Femme Nadege
Localisation : France, Manche (Basse Normandie)

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

Informations forums :
Inscription : décembre 2011
Messages : 3
Points : 0
Points : 0
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
nlino est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/12/2011, 10h00   #4
Expert Confirmé Sénior
 
Avatar de f-leb
 
Homme Fabien
Enseignant
Inscription : janvier 2009
Messages : 2 415
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 41
Localisation : France, Sarthe (Pays de la Loire)

Informations professionnelles :
Activité : Enseignant

Informations forums :
Inscription : janvier 2009
Messages : 2 415
Points : 4 447
Points : 4 447
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) ?
f-leb est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 16/12/2011, 10h13   #5
Expert Confirmé
 
Avatar de Richard_35
 
Homme
Inscription : juillet 2007
Messages : 2 184
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Ille et Vilaine (Bretagne)

Informations forums :
Inscription : juillet 2007
Messages : 2 184
Points : 2 814
Points : 2 814
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.
__________________
Dis-nous et à bientôt,
Richard.
----------------------------------------------------------------------------------------------
En cas de résolution, et afin de faciliter la tâche des bénévoles, merci de cliquer sur .
et permettent aux forumeurs de cibler leur recherche dans une discussion : n'hésitez pas à voter !
Richard_35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/12/2011, 10h37   #6
Rédacteur/Modérateur
 
Avatar de Philippe JOCHMANS
 
Homme Philippe JOCHMANS
Développeur informatique
Inscription : mai 2005
Messages : 17 625
Détails du profil
Informations personnelles :
Nom : Homme Philippe JOCHMANS
Âge : 44
Localisation : France, Loir et Cher (Centre)

Informations professionnelles :
Activité : Développeur informatique
Secteur : Communication - Médias

Informations forums :
Inscription : mai 2005
Messages : 17 625
Points : 30 959
Points : 30 959
Envoyer un message via MSN à Philippe JOCHMANS Envoyer un message via Skype™ à Philippe JOCHMANS
Bonjour

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

Code :
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
__________________
Détaillez vos questions, sinon vous aurez des réponses erronées et vous irez tout droit dans le et lisez les règles sinon
Si vous pensez commencer sans un livre, oublier : livres pour débuter
Vous pouvez consulter mes articles sur Access et PowerPoint
Le blog Office.

Inutile de m'envoyer un MP pour des questions techniques ou de me relancer , je n'y répondrais pas.
Philippe JOCHMANS est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 16/12/2011, 14h36   #7
Invité de passage
 
Femme Nadege
Technicien SIG
Inscription : décembre 2011
Messages : 3
Détails du profil
Informations personnelles :
Nom : Femme Nadege
Localisation : France, Manche (Basse Normandie)

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

Informations forums :
Inscription : décembre 2011
Messages : 3
Points : 0
Points : 0
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
nlino est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 05h13.


 
 
 
 
Partenaires

Hébergement Web