Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

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

17 réponses
Avatar
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é

10 réponses

1 2
Avatar
Thierry (ze Titi)
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

Avatar
Andre
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)" a écrit dans le
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





Avatar
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

Avatar
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


Avatar
Thierry (ze Titi)
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)" a écrit dans le 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





--
Cordialement,
Thierry

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



Avatar
Fabien
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)" a écrit dans le
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 ;-)




Avatar
Thierry (ze Titi)
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

Avatar
Michel_D
"Fabien" a écrit dans le message de news:471dc282$0$5066$
"Thierry (ze Titi)" a écrit dans le
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.




Avatar
Michel_D
"Michel_D" a écrit dans le message de news:ffkliq$8k9$

"Fabien" a écrit dans le message de news:471dc282$0$5066$
"Thierry (ze Titi)" a écrit dans le
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))





Avatar
Andre
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" a écrit dans le message de news:

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






1 2