OVH Cloud OVH Cloud

reconnaitre les lettres et les chiffres dans une chaîne de caractères

25 réponses
Avatar
Eric FROGER
Bonsoir,

J'ai besoin pour distinguer les codes postaux étrangers des codes français
dans un champ d'identifier ceux qui contiennent des lettres et des chiffres
dans la chaîne de caractères, soit par une requête, soit par un bout de
code. Quelqu'un aurait une idée ?

Merci de vos retours.

Eric

10 réponses

1 2 3
Avatar
Blaise Cacramp
Selon : Bonjour ou bonsoir

On retombe donc sur la création de 2 champs distincts (CPFrance et
CPEtranger) surtout que si on souhaite que le CPFrance soit correctement
saisi (5 caractères).



Surtout pas !

Les solutions sont variables suivant l'étendue et le nombre de fiches.
*Mais pas deux champs pour la même chose*.
Pour ce qui est des « *bidouilles* VBA », je dirais que le VBA sert à cela :
créer des fonctions et procédures pour contrôler au plus fin ce qu'Access ne
sait pas faire nativement.

Je vais même te dire que ce mot « *bidouilles* » m'a vexé : je fais cela
quasi à longueur de journée...
1/ pour le plus grand bien des utilisateurs lambda ;
2/ pour éviter les erreurs d'encodage, créer des gardes-fous, tout
simplement.

Cdt, Blaise
---- ---- ----


"ejc" <~ a écrit dans le message de news:

Salut,
Et pour la Corse (2Axxx, 2Bxxx), ça donne quoi ? (et je pense qu'il n'y a
pas que la Corse)


On retombe donc sur la création de 2 champs distincts (CPFrance et
CPEtranger) surtout que si on souhaite que le CPFrance soit correctement
saisi (5 caractères).
C'est peut-être possible de ne créer qu'un seul champ à conditions de
mettre des "bidouilles VBA"dans tous les sens, sans réel bénéfice par
rapport à ce qu'on souhaite en final.
Ce n'est que mon avis...
Jero


"db" a écrit dans le message de news:

Blaise Cacramp a écrit :
Selon : Bonjour ou bonsoir

J'ai ouï dire que les codes postaux allaient être revus et harmonisés
(au niveau européen ?) en incluant la tournée du facteur comme en UK et
au Canada, je crois. Donc voir plus loin que maintenant. Sinon :

Sub Test_CP()
Dim sCP As String
sCP = InputBox("Entrez un code postal")
If Format(Val(sCP), "00000") = sCP Then
MsgBox "Code postal à 5 chiffres"
Else
MsgBox "pas code postal français"
End If
End Sub





Et pour la Corse (2Axxx, 2Bxxx), ça donne quoi ?

db






Avatar
ejc
Salut
Propose donc une solution ! (viable...) et arrête de nous expliquer ce qu'il
faut faire ou pas...
Et si, avec un seul champ CP, on peut savoir si c'est français ou pas, alors
tu le donnes ton code... et ta solution (mois j'en ai proposé une, elle est
où la tienne ? t'as un exemple ?)
Excuse-moi, ça fait plus de 25 ans que je fais de la programmation, je ne
suis pas plus doué qu'un autre, mais j'attends avec plaisir ce que tu
proposes.
note : je serais le premier à le reconnaître (en informatique, mieux vaut
rester modeste si on veut progresser ;>))
Salut et sans rancune,
Jero
"Blaise Cacramp" a écrit dans le message de news:
OX$t$
Selon : Bonjour ou bonsoir

On retombe donc sur la création de 2 champs distincts (CPFrance et
CPEtranger) surtout que si on souhaite que le CPFrance soit correctement
saisi (5 caractères).



Surtout pas !

Les solutions sont variables suivant l'étendue et le nombre de fiches.
*Mais pas deux champs pour la même chose*.
Pour ce qui est des « *bidouilles* VBA », je dirais que le VBA sert à cela
: créer des fonctions et procédures pour contrôler au plus fin ce
qu'Access ne sait pas faire nativement.

Je vais même te dire que ce mot « *bidouilles* » m'a vexé : je fais cela
quasi à longueur de journée...
1/ pour le plus grand bien des utilisateurs lambda ;
2/ pour éviter les erreurs d'encodage, créer des gardes-fous, tout
simplement.

Cdt, Blaise
---- ---- ----


"ejc" <~ a écrit dans le message de news:

Salut,
Et pour la Corse (2Axxx, 2Bxxx), ça donne quoi ? (et je pense qu'il n'y
a pas que la Corse)


On retombe donc sur la création de 2 champs distincts (CPFrance et
CPEtranger) surtout que si on souhaite que le CPFrance soit correctement
saisi (5 caractères).
C'est peut-être possible de ne créer qu'un seul champ à conditions de
mettre des "bidouilles VBA"dans tous les sens, sans réel bénéfice par
rapport à ce qu'on souhaite en final.
Ce n'est que mon avis...
Jero


"db" a écrit dans le message de news:

Blaise Cacramp a écrit :
Selon : Bonjour ou bonsoir

J'ai ouï dire que les codes postaux allaient être revus et harmonisés
(au niveau européen ?) en incluant la tournée du facteur comme en UK et
au Canada, je crois. Donc voir plus loin que maintenant. Sinon :

Sub Test_CP()
Dim sCP As String
sCP = InputBox("Entrez un code postal")
If Format(Val(sCP), "00000") = sCP Then
MsgBox "Code postal à 5 chiffres"
Else
MsgBox "pas code postal français"
End If
End Sub





Et pour la Corse (2Axxx, 2Bxxx), ça donne quoi ?

db










Avatar
ejc
Salut,
Je ne vois pas, en fonction de la question posée, notre ami Eric Foger, qui
apparemment a disparu de la discussion mettre ça en place (les expressions
régulières).
Tout ça reste évidemment très théorique, mais... : on attend ta solution
;>) ; dans le même pays, le format n'est pas le même
(http://fr.wikipedia.org/wiki/Codes_postaux_britanniques)


Conclusion : faire attention aux "solutions théoriques" ; y être confronté
c'est mieux...pour voir ce qu'on peut mettre en place.
Je n'ai pas, à ce jour, trouvé mieux que de distinguer les 2 codes postaux.
J'attends toujours avec plaisir et intérêt la solution "universelle".
A+
Jero

Jero
"db" a écrit dans le message de news:
%
ejc a écrit :
Salut,
J'ai été confronté au même pb. que toi...
En premier lieu j'ai créé une table Ville_CP_Pays avec 4 champs (Ville,
Pays, CPFrance,CPEtranger )
La solution (bonne ou pas) est de créer 2 champs pour les codes postaux
(CPFrance et CPEtranger par ex.) sinon, je ne vois pas bien la solution
(surtout si tu souhaites que les CP français soit de longueur fixe de 5
caractères, que d'autres dans certains pays n'ont pas de longueur
déterminée, etc.)
Dans le formulaire de saisie, j'ai donc le contrôle "PAYS" et en fonction
du pays sélectionné (France ou autre), un seul des 2 champs (CPFrance et
CPEtranger) est activé.
Ensuite, pour afficher les villes et les CP, tu crées une requête avec un
champ calculé : CP:[CPFrance] & [CPEtranger] (dans la messure où l'un des
2 champs est vide, ça roule)
Si tu veux (ou si ça peut intéresser d'autres personnes) je peux vous
envoyer la chose (il suffira de me dire comment - ci-joint ?)



Bonsoir,

Il me semble que, si je devais traiter ce problème, je ne mettrais qu'un
seul champ CodePostal et que je créerais une table qui contiendrait la
liste des pays et le format des codes postaux à associer au pays. Ce
format pourrait être un masque de saisie à mettre en place sur le champ
code postal "à la volée" après la saisie du pays, ou (voire "et") une
'expression régulière' (RegExp, cher au monde Unix, mais tellement
pratique :-)) qui permettrait de vérifier la saisie sur l'AfterUpdate de
la saisie du code postal.
Pour les expressions régulières dans Access, voir ici :
http://cafeine.developpez.com/access/tutoriel/regexp/
Les requêtes resteraient simples, et il suffit juste de mettre en place le
contrôle après la saisie.

Tout ça reste évidemment très théorique, mais c'est très probablement ce
que j'essaierais de mettre en place.

db


Avatar
db
ejc a écrit :
Salut,
Je ne vois pas, en fonction de la question posée, notre ami Eric Foger, qui
apparemment a disparu de la discussion mettre ça en place (les expressions
régulières).
Tout ça reste évidemment très théorique, mais... : on attend ta solution
;>) ; dans le même pays, le format n'est pas le même
(http://fr.wikipedia.org/wiki/Codes_postaux_britanniques)


Conclusion : faire attention aux "solutions théoriques" ; y être confronté
c'est mieux...pour voir ce qu'on peut mettre en place.
Je n'ai pas, à ce jour, trouvé mieux que de distinguer les 2 codes postaux.
J'attends toujours avec plaisir et intérêt la solution "universelle".



Désolé de vous avoir vexé, je cherchais juste à apporter une
contribution au problème. Mais, s'il faut avoir des jugements définitifs
comme vous semblez les aimer, alors je suis sûr au moins d'une chose :
la solution universelle n'est forcément pas d'avoir deux champs pour la
même information. En plus, la France d'un côté et le reste du monde de
l'autre, ça a plutôt tendance à m'amuser, à vrai dire :-)

db
Avatar
ejc
Salut,
Mais, s'il faut avoir des jugements définitifs comme vous semblez les
aimer... Non, pas du tout...


Sincérement, et sans aucune animosité de ma part, si on veut que les codes
postaux français soient saisis correctement (5 caractères, etc.) et que pour
les autres, il n'y ai pas de règle) et si en plus vous avez une solution, je
suis preneur...
En plus, la France d'un côté et le reste du monde de l'autre, ça a plutôt
tendance à m'amuser... Je sens dans cette remarque une certaine
connotation... "nationaliste" (voire autre chose)


Je ne suis pas sûr que cette remarque apporte qqchose à notre "amicale"
discussion.
Dans mon formulaire de saisie des villes j'ai les champs suivants :
NomVille;NomPays;CPFrançais;CPEtranger
Je saisie une nouvelle ville... Je saisie un pays... et fonction de ça
j'active soit le CPFrançais, soit le CPEtranger
Si c'est le CPFrançais qui est activé, j'applique une règle de saisie (un
format...)
Certainement, qu'un seul champ CP... pourrait suffire (avec du VBA), mais -
et je le répète - est-ce que ça en vaut le coup ?
N'oublie pas, derrière ça il y a souvent un mailing ; du genre "Je fais une
opération de com. auprès de mes clients du département de ..., auprès de mes
clients étrangers, que sais-je encore...
Cordialement,
Jero

"db" a écrit dans le message de news:
%
ejc a écrit :
Salut,
Je ne vois pas, en fonction de la question posée, notre ami Eric Foger,
qui apparemment a disparu de la discussion mettre ça en place (les
expressions régulières).
Tout ça reste évidemment très théorique, mais... : on attend ta solution
;>) ; dans le même pays, le format n'est pas le même
(http://fr.wikipedia.org/wiki/Codes_postaux_britanniques)


Conclusion : faire attention aux "solutions théoriques" ; y être
confronté c'est mieux...pour voir ce qu'on peut mettre en place.
Je n'ai pas, à ce jour, trouvé mieux que de distinguer les 2 codes
postaux. J'attends toujours avec plaisir et intérêt la solution
"universelle".



Désolé de vous avoir vexé, je cherchais juste à apporter une contribution
au problème. Mais, s'il faut avoir des jugements définitifs comme vous
semblez les aimer, alors je suis sûr au moins d'une chose : la solution
universelle n'est forcément pas d'avoir deux champs pour la même
information. En plus, la France d'un côté et le reste du monde de l'autre,
ça a plutôt tendance à m'amuser, à vrai dire :-)

db


Avatar
Michel__D
Bonjour,

Je ne vois pas moi aussi l'intérèt d'avoir 2 champs distincts pour le
stockage du code postal, normalement la saisie du pays doit activer
le contrôle adéquat sur le code postal et le contrôle le plus efficace
concernant les codes français est d'avoir une table qui les recense tous
ensuite une simple recherche dans cette table placé au niveau de
l'évenement avant mise à jour pourrait faire l'affaire.


ejc a écrit :
Salut,
Mais, s'il faut avoir des jugements définitifs comme vous semblez les
aimer... Non, pas du tout...


Sincérement, et sans aucune animosité de ma part, si on veut que les codes
postaux français soient saisis correctement (5 caractères, etc.) et que pour
les autres, il n'y ai pas de règle) et si en plus vous avez une solution, je
suis preneur...
En plus, la France d'un côté et le reste du monde de l'autre, ça a plutôt
tendance à m'amuser... Je sens dans cette remarque une certaine
connotation... "nationaliste" (voire autre chose)


Je ne suis pas sûr que cette remarque apporte qqchose à notre "amicale"
discussion.
Dans mon formulaire de saisie des villes j'ai les champs suivants :
NomVille;NomPays;CPFrançais;CPEtranger
Je saisie une nouvelle ville... Je saisie un pays... et fonction de ça
j'active soit le CPFrançais, soit le CPEtranger
Si c'est le CPFrançais qui est activé, j'applique une règle de saisie (un
format...)
Certainement, qu'un seul champ CP... pourrait suffire (avec du VBA), mais -
et je le répète - est-ce que ça en vaut le coup ?
N'oublie pas, derrière ça il y a souvent un mailing ; du genre "Je fais une
opération de com. auprès de mes clients du département de ..., auprès de mes
clients étrangers, que sais-je encore...
Cordialement,
Jero

"db" a écrit dans le message de news:
%
ejc a écrit :
Salut,
Je ne vois pas, en fonction de la question posée, notre ami Eric Foger,
qui apparemment a disparu de la discussion mettre ça en place (les
expressions régulières).
Tout ça reste évidemment très théorique, mais... : on attend ta solution
;>) ; dans le même pays, le format n'est pas le même
(http://fr.wikipedia.org/wiki/Codes_postaux_britanniques)


Conclusion : faire attention aux "solutions théoriques" ; y être
confronté c'est mieux...pour voir ce qu'on peut mettre en place.
Je n'ai pas, à ce jour, trouvé mieux que de distinguer les 2 codes
postaux. J'attends toujours avec plaisir et intérêt la solution
"universelle".


Désolé de vous avoir vexé, je cherchais juste à apporter une contribution
au problème. Mais, s'il faut avoir des jugements définitifs comme vous
semblez les aimer, alors je suis sûr au moins d'une chose : la solution
universelle n'est forcément pas d'avoir deux champs pour la même
information. En plus, la France d'un côté et le reste du monde de l'autre,
ça a plutôt tendance à m'amuser, à vrai dire :-)

db






Avatar
db
ejc a écrit :

Je ne suis pas sûr que cette remarque apporte qqchose à notre "amicale"
discussion.



Je vous l'accorde :-)

Dans mon formulaire de saisie des villes j'ai les champs suivants :
NomVille;NomPays;CPFrançais;CPEtranger
Je saisie une nouvelle ville... Je saisie un pays... et fonction de ça
j'active soit le CPFrançais, soit le CPEtranger
Si c'est le CPFrançais qui est activé, j'applique une règle de saisie (un
format...)
Certainement, qu'un seul champ CP... pourrait suffire (avec du VBA), mais -
et je le répète - est-ce que ça en vaut le coup ?



La question n'est pas de savoir si ça vaut le coup ou pas, mais de se
demander quelle est la bonne structure de données et celle-ci ne dépend
pas du SGBD et encore moins du langage. En l'espèce, si un stagiaire me
proposait deux champs pour les codes postaux, je le renverrais
immédiatement à ses chères études.

N'oublie pas, derrière ça il y a souvent un mailing ; du genre "Je fais une
opération de com. auprès de mes clients du département de ..., auprès de mes
clients étrangers, que sais-je encore...



Jusqu'à preuve du contraire, ce qui peut caractériser un code postal
français, anglais, etc., ce n'est pas son format, c'est le pays où se
trouve la ville auquel il s'applique. Il n'y a aucune difficulté en
access à activer ou pas un masque de saisie en fonction du pays. A la
limite, vous pouvez définir deux zones différentes dans le formulaire,
mais liées au même champ.
Et pour le mailing, je ne vois pas la difficulté : choisir le pays et le
département ne me semble pas d'une difficulté insurmontable.


db
Avatar
Blaise Cacramp
Selon : Bonjour ou bonsoir

tu le donnes ton code... et ta solution (mois j'en ai proposé une, elle
est où la tienne ? t'as un exemple ?)



Juste en dessous, le 3 à 13h25


Cdt, Blaise
---- ---- ----


"ejc" <~ a écrit dans le message de news:

Salut
Propose donc une solution ! (viable...) et arrête de nous expliquer ce
qu'il faut faire ou pas...
Et si, avec un seul champ CP, on peut savoir si c'est français ou pas,
alors tu le donnes ton code... et ta solution (mois j'en ai proposé une,
elle est où la tienne ? t'as un exemple ?)
Excuse-moi, ça fait plus de 25 ans que je fais de la programmation, je ne
suis pas plus doué qu'un autre, mais j'attends avec plaisir ce que tu
proposes.
note : je serais le premier à le reconnaître (en informatique, mieux vaut
rester modeste si on veut progresser ;>))
Salut et sans rancune,
Jero
"Blaise Cacramp" a écrit dans le message de news:
OX$t$
Selon : Bonjour ou bonsoir

On retombe donc sur la création de 2 champs distincts (CPFrance et
CPEtranger) surtout que si on souhaite que le CPFrance soit correctement
saisi (5 caractères).



Surtout pas !

Les solutions sont variables suivant l'étendue et le nombre de fiches.
*Mais pas deux champs pour la même chose*.
Pour ce qui est des « *bidouilles* VBA », je dirais que le VBA sert à
cela : créer des fonctions et procédures pour contrôler au plus fin ce
qu'Access ne sait pas faire nativement.

Je vais même te dire que ce mot « *bidouilles* » m'a vexé : je fais cela
quasi à longueur de journée...
1/ pour le plus grand bien des utilisateurs lambda ;
2/ pour éviter les erreurs d'encodage, créer des gardes-fous, tout
simplement.

Cdt, Blaise
---- ---- ----


"ejc" <~ a écrit dans le message de news:

Salut,
Et pour la Corse (2Axxx, 2Bxxx), ça donne quoi ? (et je pense qu'il n'y
a pas que la Corse)


On retombe donc sur la création de 2 champs distincts (CPFrance et
CPEtranger) surtout que si on souhaite que le CPFrance soit correctement
saisi (5 caractères).
C'est peut-être possible de ne créer qu'un seul champ à conditions de
mettre des "bidouilles VBA"dans tous les sens, sans réel bénéfice par
rapport à ce qu'on souhaite en final.
Ce n'est que mon avis...
Jero


"db" a écrit dans le message de news:

Blaise Cacramp a écrit :
Selon : Bonjour ou bonsoir

J'ai ouï dire que les codes postaux allaient être revus et harmonisés
(au niveau européen ?) en incluant la tournée du facteur comme en UK
et au Canada, je crois. Donc voir plus loin que maintenant. Sinon :

Sub Test_CP()
Dim sCP As String
sCP = InputBox("Entrez un code postal")
If Format(Val(sCP), "00000") = sCP Then
MsgBox "Code postal à 5 chiffres"
Else
MsgBox "pas code postal français"
End If
End Sub





Et pour la Corse (2Axxx, 2Bxxx), ça donne quoi ?

db














Avatar
Blaise Cacramp
Selon : Bonjour ou bonsoir

Hé là !
Je lis par ailleurs, sur http://fr.wikipedia.org/wiki/Code_postal_en_France,
que «En Corse, les codes postaux commencent par 20, le découpage de l'île en
deux départements n'ayant pas entraîné de modification des codes postaux.»

Donc ma première solution est bonne sauf que sur
http://fr.wikipedia.org/wiki/Code_postal, on peut voir que les français ne
sont pas les seuls à utiliser un code à 5 chiffres.
En définitive, c'est Michel_D qui propose la meilleure solution : disposer
d'une table avec les codes postaux.

Voir une solution ici : http://cjoint.com/?keqOsZwKWX. La base MDB contient
les codes postaux belges, l'Url pointe la liste des codes postaux français


Cdt, Blaise
---- ---- ----


"ejc" <~ a écrit dans le message de news:

Salut,
Et pour la Corse (2Axxx, 2Bxxx), ça donne quoi ? (et je pense qu'il n'y a
pas que la Corse)


On retombe donc sur la création de 2 champs distincts (CPFrance et
CPEtranger) surtout que si on souhaite que le CPFrance soit correctement
saisi (5 caractères).
C'est peut-être possible de ne créer qu'un seul champ à conditions de
mettre des "bidouilles VBA"dans tous les sens, sans réel bénéfice par
rapport à ce qu'on souhaite en final.
Ce n'est que mon avis...
Jero


"db" a écrit dans le message de news:

Blaise Cacramp a écrit :
Selon : Bonjour ou bonsoir

J'ai ouï dire que les codes postaux allaient être revus et harmonisés
(au niveau européen ?) en incluant la tournée du facteur comme en UK et
au Canada, je crois. Donc voir plus loin que maintenant. Sinon :

Sub Test_CP()
Dim sCP As String
sCP = InputBox("Entrez un code postal")
If Format(Val(sCP), "00000") = sCP Then
MsgBox "Code postal à 5 chiffres"
Else
MsgBox "pas code postal français"
End If
End Sub





Et pour la Corse (2Axxx, 2Bxxx), ça donne quoi ?

db






Avatar
ejc
Salut,
En définitive, c'est Michel_D qui propose la meilleure solution : disposer
d'une table avec les codes postaux. : je ne mets pas du tout en cause la
compétence de Michel_D, donc une table avec déjà - de mémoire - 37000 codes
postaux français, plus les xxx codes postaux de la Belgique, plus les xxx
codes postaux de l'Italie, plus...


Si vous pensez que c'est une bonne solution, je vous la laisse (encore une
fois, vous avez essayé ?)
A-
Jero

"Blaise Cacramp" a écrit dans le message de news:

Selon : Bonjour ou bonsoir

Hé là !
Je lis par ailleurs, sur
http://fr.wikipedia.org/wiki/Code_postal_en_France,
que «En Corse, les codes postaux commencent par 20, le découpage de l'île
en
deux départements n'ayant pas entraîné de modification des codes postaux.»

Donc ma première solution est bonne sauf que sur
http://fr.wikipedia.org/wiki/Code_postal, on peut voir que les français ne
sont pas les seuls à utiliser un code à 5 chiffres.
En définitive, c'est Michel_D qui propose la meilleure solution : disposer
d'une table avec les codes postaux.

Voir une solution ici : http://cjoint.com/?keqOsZwKWX. La base MDB
contient les codes postaux belges, l'Url pointe la liste des codes postaux
français


Cdt, Blaise
---- ---- ----


"ejc" <~ a écrit dans le message de news:

Salut,
Et pour la Corse (2Axxx, 2Bxxx), ça donne quoi ? (et je pense qu'il n'y
a
pas que la Corse)


On retombe donc sur la création de 2 champs distincts (CPFrance et
CPEtranger) surtout que si on souhaite que le CPFrance soit correctement
saisi (5 caractères).
C'est peut-être possible de ne créer qu'un seul champ à conditions de
mettre des "bidouilles VBA"dans tous les sens, sans réel bénéfice par
rapport à ce qu'on souhaite en final.
Ce n'est que mon avis...
Jero


"db" a écrit dans le message de news:

Blaise Cacramp a écrit :
Selon : Bonjour ou bonsoir

J'ai ouï dire que les codes postaux allaient être revus et harmonisés
(au niveau européen ?) en incluant la tournée du facteur comme en UK et
au Canada, je crois. Donc voir plus loin que maintenant. Sinon :

Sub Test_CP()
Dim sCP As String
sCP = InputBox("Entrez un code postal")
If Format(Val(sCP), "00000") = sCP Then
MsgBox "Code postal à 5 chiffres"
Else
MsgBox "pas code postal français"
End If
End Sub





Et pour la Corse (2Axxx, 2Bxxx), ça donne quoi ?

db











1 2 3