séparation d'un champ, dans une table Acces

Le
Andre
Bonjour à toutes et tous,

Voilà, je suis un grand néophyte qui comprends vite quand on lui a expliqué
longtemps.
J'ai reçu une table Access 2003 dans laquelle un cham "adresse" a été rempli
avec le nom de la rue, suivi après une virgule du n° de l'immeuble.
Pour des raisons de tri, je souhaite créer un champ n° et scinder le champ
"adresse" en supprimant la , et le n° pour l'injecter dans le nouveau champ
"n°".
Est-il possible de réaliser cette opération en une fois pour toute la table?
Déjà merci pour vos avis éclairés
André
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 2
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Thierry (ze Titi)
Le #6387091
Bonjour Andre !

Si tu as déjà créé ton champ, tu peux utiliser une fonction du style de
ce qui suit. A coller dans un nouveau module et à exécuter une seule
fois.

Sub scinderAdresse()
dim rs As DAO.Recordset
dim aux As Integer
Set rs=CurrentDb.OpenRecordset("laTable",dbOpenDynaset)
rs.MoveLast:rs.MoveFirst
While Not rs.EOF
aux=InStr(rs!adresse,",")
If aux<>0 Then
rs.Edit
rs!adresse=Left(rs!adresse,aux-1)
rs![n°]=mid(rs!adresse,aux+1)
rs.Update
End If
rs.MoveNext
Wend
Set rs=Nothing
End Sub

A tester...

Message du lundi 22/10/2007

Bonjour à toutes et tous,

Voilà, je suis un grand néophyte qui comprends vite quand on lui a expliqué
longtemps.
J'ai reçu une table Access 2003 dans laquelle un cham "adresse" a été rempli
avec le nom de la rue, suivi après une virgule du n° de l'immeuble.
Pour des raisons de tri, je souhaite créer un champ n° et scinder le champ
"adresse" en supprimant la , et le n° pour l'injecter dans le nouveau champ
"n°".
Est-il possible de réaliser cette opération en une fois pour toute la table?
Déjà merci pour vos avis éclairés
André


--
Cordialement,
Thierry

Tout pour réussir avec Access :
http://www.mpfa.info

Andre
Le #6387021
Bonsoir Titi,

Merci pour cette réponse rapide.
Malheureusement, cela ne fonctionne qu'à moitié. Je m'explique :
J'ai remplacé les noms de champ et le nom de la table par la mienne.
J'ai exécuté le module qui a enlevé tous les numéros dans le champ "Adresse"
de la table MAIS ne les a pas replacés dans le champ "No"
Merci pour l'aide.
André

"Thierry (ze Titi)" message de news:
Bonjour Andre !

Si tu as déjà créé ton champ, tu peux utiliser une fonction du style de ce
qui suit. A coller dans un nouveau module et à exécuter une seule fois.

Sub scinderAdresse()
dim rs As DAO.Recordset
dim aux As Integer
Set rs=CurrentDb.OpenRecordset("laTable",dbOpenDynaset)
rs.MoveLast:rs.MoveFirst
While Not rs.EOF
aux=InStr(rs!adresse,",")
If aux<>0 Then
rs.Edit
rs!adresse=Left(rs!adresse,aux-1)
rs![n°]=mid(rs!adresse,aux+1)
rs.Update
End If
rs.MoveNext
Wend
Set rs=Nothing
End Sub

A tester...

Message du lundi 22/10/2007

Bonjour à toutes et tous,

Voilà, je suis un grand néophyte qui comprends vite quand on lui a
expliqué longtemps.
J'ai reçu une table Access 2003 dans laquelle un cham "adresse" a été
rempli avec le nom de la rue, suivi après une virgule du n° de
l'immeuble.
Pour des raisons de tri, je souhaite créer un champ n° et scinder le
champ "adresse" en supprimant la , et le n° pour l'injecter dans le
nouveau champ "n°".
Est-il possible de réaliser cette opération en une fois pour toute la
table?
Déjà merci pour vos avis éclairés
André


--
Cordialement,
Thierry

Tout pour réussir avec Access :
http://www.mpfa.info





Phil
Le #6386981
Bonjour à toutes et tous,

Voilà, je suis un grand néophyte qui comprends vite quand on lui a expliqué
longtemps.
J'ai reçu une table Access 2003 dans laquelle un cham "adresse" a été rempli
avec le nom de la rue, suivi après une virgule du n° de l'immeuble.
Pour des raisons de tri, je souhaite créer un champ n° et scinder le champ
"adresse" en supprimant la , et le n° pour l'injecter dans le nouveau champ
"n°".
Est-il possible de réaliser cette opération en une fois pour toute la table?
Déjà merci pour vos avis éclairés
André


Bonsoir,

je te propose
1) de créer une première requète sélection basée sur ta table avec tous
ses champs (ou seulement ceux qui te sont utiles) auxquel tu ajoutes un
champs calculé composé comme Position : DansChaîne([adresse];",")
(n'oublies pas l'accent circonflexe sur le i de chaine)
cela te donne la position de la virgule pour chaque enregistrement.

2) tu créé une seconde requète basée sur la première avec deux champs
supplémentaires
le premier comme AdrCourte:left([adresse];position-1)
le second comme N°:mid([adresse];position+1)

Connaissant la position de la virgule il est aisé de couper le champ en
deux. Vérifies si c'est bien position-1 et +1 et adaptes si besoin.

Bonne réception
Phil

Phil
Le #6386971
Bonjour à toutes et tous,

Voilà, je suis un grand néophyte qui comprends vite quand on lui a expliqué
longtemps.
J'ai reçu une table Access 2003 dans laquelle un cham "adresse" a été
rempli avec le nom de la rue, suivi après une virgule du n° de l'immeuble.
Pour des raisons de tri, je souhaite créer un champ n° et scinder le champ
"adresse" en supprimant la , et le n° pour l'injecter dans le nouveau champ
"n°".
Est-il possible de réaliser cette opération en une fois pour toute la
table?
Déjà merci pour vos avis éclairés
André


Bonsoir,

je te propose
1) de créer une première requète sélection basée sur ta table avec tous ses
champs (ou seulement ceux qui te sont utiles) auxquel tu ajoutes un champs
calculé composé comme Position : DansChaîne([adresse];",")
(n'oublies pas l'accent circonflexe sur le i de chaine)
cela te donne la position de la virgule pour chaque enregistrement.

2) tu créé une seconde requète basée sur la première avec deux champs
supplémentaires
le premier comme AdrCourte:left([adresse];position-1)
le second comme N°:mid([adresse];position+1)

Connaissant la position de la virgule il est aisé de couper le champ en deux.
Vérifies si c'est bien position-1 et +1 et adaptes si besoin.

Bonne réception
Phil


pour être plus complet tu peux ajouter la fonction Trim pour exclure
les espaces parasites devant et derrière les parties du champs
"adresse" tronqués
les champs deviennent
AdrCourte:trim(left([adresse];position-1))
N°:trim(mid([adresse];position+1))

Phil


Thierry (ze Titi)
Le #6386921
Oops ! Désolé... J'espère que tu as une sauvegarde de tes données...
Concernant ce désagrément, le problème doit se situer au niveau de la
ligne
rs![n°]=mid(rs!adresse,aux+1)
Essaie avec :
rs.Fields("No")=mid(rs!adresse,aux+1)
Vérifie tout de même l'orthographe des champs...

En ce jour mémorable du lundi 22/10/2007, tu as émis l'idée suivante:
Bonsoir Titi,

Merci pour cette réponse rapide.
Malheureusement, cela ne fonctionne qu'à moitié. Je m'explique :
J'ai remplacé les noms de champ et le nom de la table par la mienne.
J'ai exécuté le module qui a enlevé tous les numéros dans le champ "Adresse"
de la table MAIS ne les a pas replacés dans le champ "No"
Merci pour l'aide.
André

"Thierry (ze Titi)" de news:
Bonjour Andre !

Si tu as déjà créé ton champ, tu peux utiliser une fonction du style de ce
qui suit. A coller dans un nouveau module et à exécuter une seule fois.

Sub scinderAdresse()
dim rs As DAO.Recordset
dim aux As Integer
Set rs=CurrentDb.OpenRecordset("laTable",dbOpenDynaset)
rs.MoveLast:rs.MoveFirst
While Not rs.EOF
aux=InStr(rs!adresse,",")
If aux<>0 Then
rs.Edit
rs!adresse=Left(rs!adresse,aux-1)
rs![n°]=mid(rs!adresse,aux+1)
rs.Update
End If
rs.MoveNext
Wend
Set rs=Nothing
End Sub

A tester...

Message du lundi 22/10/2007

Bonjour à toutes et tous,

Voilà, je suis un grand néophyte qui comprends vite quand on lui a
expliqué longtemps.
J'ai reçu une table Access 2003 dans laquelle un cham "adresse" a été
rempli avec le nom de la rue, suivi après une virgule du n° de l'immeuble.
Pour des raisons de tri, je souhaite créer un champ n° et scinder le champ
"adresse" en supprimant la , et le n° pour l'injecter dans le nouveau
champ "n°".
Est-il possible de réaliser cette opération en une fois pour toute la
table?
Déjà merci pour vos avis éclairés
André


-- Cordialement,
Thierry

Tout pour réussir avec Access :
http://www.mpfa.info





--
Cordialement,
Thierry

Tout pour réussir avec Access :
http://www.mpfa.info



Fabien
Le #6386731
Oops ! Désolé... J'espère que tu as une sauvegarde de tes données...
Concernant ce désagrément, le problème doit se situer au niveau de la ligne
rs![n°]=mid(rs!adresse,aux+1)
Essaie avec :
rs.Fields("No")=mid(rs!adresse,aux+1)
Vérifie tout de même l'orthographe des champs...

En ce jour mémorable du lundi 22/10/2007, tu as émis l'idée suivante:
Bonsoir Titi,

Merci pour cette réponse rapide.
Malheureusement, cela ne fonctionne qu'à moitié. Je m'explique :
J'ai remplacé les noms de champ et le nom de la table par la mienne.
J'ai exécuté le module qui a enlevé tous les numéros dans le champ
"Adresse" de la table MAIS ne les a pas replacés dans le champ "No"
Merci pour l'aide.
André

"Thierry (ze Titi)" message de news:
Bonjour Andre !

Si tu as déjà créé ton champ, tu peux utiliser une fonction du style
de ce qui suit. A coller dans un nouveau module et à exécuter une
seule fois.

Sub scinderAdresse()
dim rs As DAO.Recordset
dim aux As Integer
Set rs=CurrentDb.OpenRecordset("laTable",dbOpenDynaset)
rs.MoveLast:rs.MoveFirst
While Not rs.EOF
aux=InStr(rs!adresse,",")
If aux<>0 Then
rs.Edit
rs!adresse=Left(rs!adresse,aux-1)
rs![n°]=mid(rs!adresse,aux+1)
rs.Update
End If
rs.MoveNext
Wend
Set rs=Nothing
End Sub

A tester...

Message du lundi 22/10/2007

Bonjour à toutes et tous,

Voilà, je suis un grand néophyte qui comprends vite quand on lui a
expliqué longtemps.
J'ai reçu une table Access 2003 dans laquelle un cham "adresse" a
été rempli avec le nom de la rue, suivi après une virgule du n° de
l'immeuble.
Pour des raisons de tri, je souhaite créer un champ n° et scinder le
champ "adresse" en supprimant la , et le n° pour l'injecter dans le
nouveau champ "n°".
Est-il possible de réaliser cette opération en une fois pour toute
la table?
Déjà merci pour vos avis éclairés
André


-- Cordialement,
Thierry

Tout pour réussir avec Access :
http://www.mpfa.info





Bonjour,

Puis-je ?
rs!adresse=Left(rs!adresse,aux-1)
rs![n°]=mid(rs!adresse,aux+1)
AIe !!
Si RS!Adresse contient 25 , rue de la joie
alors aprés rs!adresse=Left(rs!adresse,aux-1) Adressse ne contient plus
que 25 et le rs![n°]=mid(rs!adresse,aux+1) qui suit ne donne plus rien.
Ou alors j'ai pas compris ;-)

M'est d'avis qu'un Dim MonAdresse as string
et un
MonAdresse= Rst!Adresse
rs![N°]=Left(Monadresse,aux-1)
rs!adresse=mid(MonAdresse,aux+1)

devrait faire l'affaire ;-)




Thierry (ze Titi)
Le #6386721
Bonjour,


Bonjour Fabien !

Puis-je ?


Je t'en prie, d'autant que tu as 1000 fois raison ! Tu devrais
intervenir plus souvent...

--
Cordialement,
Thierry

Tout pour réussir avec Access :
http://www.mpfa.info

Michel_D
Le #6386651
"Fabien"
"Thierry (ze Titi)" message de news:
Bonjour Andre !

Si tu as déjà créé ton champ, tu peux utiliser une fonction du style
de ce qui suit. A coller dans un nouveau module et à exécuter une
seule fois.

Sub scinderAdresse()
dim rs As DAO.Recordset
dim aux As Integer
Set rs=CurrentDb.OpenRecordset("laTable",dbOpenDynaset)
rs.MoveLast:rs.MoveFirst
While Not rs.EOF
aux=InStr(rs!adresse,",")
If aux<>0 Then
rs.Edit
rs!adresse=Left(rs!adresse,aux-1)
rs![n°]=mid(rs!adresse,aux+1)
rs.Update
End If
rs.MoveNext
Wend
Set rs=Nothing
End Sub

A tester...




Bonjour,

Puis-je ?
rs!adresse=Left(rs!adresse,aux-1)
rs![n°]=mid(rs!adresse,aux+1)
AIe !!
Si RS!Adresse contient 25 , rue de la joie
alors aprés rs!adresse=Left(rs!adresse,aux-1) Adressse ne contient plus
que 25 et le rs![n°]=mid(rs!adresse,aux+1) qui suit ne donne plus rien.
Ou alors j'ai pas compris ;-)

M'est d'avis qu'un Dim MonAdresse as string
et un
MonAdresse= Rst!Adresse
rs![N°]=Left(Monadresse,aux-1)
rs!adresse=mid(MonAdresse,aux+1)

devrait faire l'affaire ;-)



Ou intervertir les deux lignes suivantes :
rs!adresse=Left(rs!adresse,aux-1)
rs![n°]=mid(rs!adresse,aux+1)

ce qui donne :
rs![n°]=mid(rs!adresse,aux+1)
rs!adresse=Left(rs!adresse,aux-1)

On comble ainsi le nouveau champ en premier et on change
le champ source en dernier et l'honneur est sauf.




Michel_D
Le #6386641
"Michel_D"

"Fabien"
"Thierry (ze Titi)" message de news:
Bonjour Andre !

Si tu as déjà créé ton champ, tu peux utiliser une fonction du style
de ce qui suit. A coller dans un nouveau module et à exécuter une
seule fois.

Sub scinderAdresse()
dim rs As DAO.Recordset
dim aux As Integer
Set rs=CurrentDb.OpenRecordset("laTable",dbOpenDynaset)
rs.MoveLast:rs.MoveFirst
While Not rs.EOF
aux=InStr(rs!adresse,",")
If aux<>0 Then
rs.Edit
rs!adresse=Left(rs!adresse,aux-1)
rs![n°]=mid(rs!adresse,aux+1)
rs.Update
End If
rs.MoveNext
Wend
Set rs=Nothing
End Sub

A tester...




Bonjour,

Puis-je ?
rs!adresse=Left(rs!adresse,aux-1)
rs![n°]=mid(rs!adresse,aux+1)
AIe !!
Si RS!Adresse contient 25 , rue de la joie
alors aprés rs!adresse=Left(rs!adresse,aux-1) Adressse ne contient plus
que 25 et le rs![n°]=mid(rs!adresse,aux+1) qui suit ne donne plus rien.
Ou alors j'ai pas compris ;-)

M'est d'avis qu'un Dim MonAdresse as string
et un
MonAdresse= Rst!Adresse
rs![N°]=Left(Monadresse,aux-1)
rs!adresse=mid(MonAdresse,aux+1)

devrait faire l'affaire ;-)



Ou intervertir les deux lignes suivantes :
rs!adresse=Left(rs!adresse,aux-1)
rs![n°]=mid(rs!adresse,aux+1)

ce qui donne :
rs![n°]=mid(rs!adresse,aux+1)
rs!adresse=Left(rs!adresse,aux-1)

On comble ainsi le nouveau champ en premier et on change
le champ source en dernier et l'honneur est sauf.



Voila ce que cela donne de copier sans vérifier, donc remplacer par :
rs![n°]=Trim(Left(rs!adresse,aux-1))
rs!adresse=Trim(Mid(rs!adresse,aux+1))





Andre
Le #6386521
Merci Phil pour ton intervention. Malheureusement, comme je le disais, je
suis réellement néophyte. J'ai fait ce que tu as écrit et ... aucun
changement.
Merci pour ta peine André
"Phil"
Bonjour à toutes et tous,

Voilà, je suis un grand néophyte qui comprends vite quand on lui a
expliqué longtemps.
J'ai reçu une table Access 2003 dans laquelle un cham "adresse" a été
rempli avec le nom de la rue, suivi après une virgule du n° de
l'immeuble.
Pour des raisons de tri, je souhaite créer un champ n° et scinder le
champ "adresse" en supprimant la , et le n° pour l'injecter dans le
nouveau champ "n°".
Est-il possible de réaliser cette opération en une fois pour toute la
table?
Déjà merci pour vos avis éclairés
André


Bonsoir,

je te propose
1) de créer une première requète sélection basée sur ta table avec tous
ses champs (ou seulement ceux qui te sont utiles) auxquel tu ajoutes un
champs calculé composé comme Position : DansChaîne([adresse];",")
(n'oublies pas l'accent circonflexe sur le i de chaine)
cela te donne la position de la virgule pour chaque enregistrement.

2) tu créé une seconde requète basée sur la première avec deux champs
supplémentaires
le premier comme AdrCourte:left([adresse];position-1)
le second comme N°:mid([adresse];position+1)

Connaissant la position de la virgule il est aisé de couper le champ en
deux. Vérifies si c'est bien position-1 et +1 et adaptes si besoin.

Bonne réception
Phil


pour être plus complet tu peux ajouter la fonction Trim pour exclure les
espaces parasites devant et derrière les parties du champs "adresse"
tronqués
les champs deviennent
AdrCourte:trim(left([adresse];position-1))
N°:trim(mid([adresse];position+1))

Phil






Publicité
Poster une réponse
Anonyme