Extraire le code postal d'une adresse

Bonsoir,

Pouvez vous m'aider à extraire le code postal d'une adresse qui est saisie dans la même cellule avec le nom de la rue, le code postal et la ville. Et si possible de partager la colonne en 3 : adresse, code postal et ville.

Je vous joins le fichier concerné.

Merci d'avance pour votre aide,

Joyeux noël à tous

Nizou

810extraire-cp.xls (16.50 Ko)

Bonjour Nizou ,Forum

Une solution, mais il doit y avoir plus simple.

1'401copie-de-extraire-cp.xls (18.00 Ko)

Bonjour,

par formules.

en B2: =SOMMEPROD(ESTNUM(STXT(SUBSTITUE(A2;" ";"|");LIGNE($1:$99);5)*1)*LIGNE($1:$99))

en C2: =GAUCHE(A2;B2-1)

en D2: =STXT(A2;B2;5)

en E2: =STXT(A2;B2+6;50)

à recopier vers le bas.

eric

1'391classeur1.zip (6.74 Ko)

Bonjour Bob et Eric,

Merci pour votre aide précieuse.

Je prends celle d'Eric qui me parait plus simple à mettre en place même si je ne comprends pas tout.

C'est des fonctions que je n'ai jamais utilisé, alors si vous pouvez m'expliquer un peu la logique j'en serais ravie.

En tout cas bravo à vous deux pour votre disponibilité pour aider les autres.

Merci encore et à bientôt

Nezha

Bonjour,

Formule un peu complexe et pas simple à expliquer.

Simplifions une adresse en exemple :

7 NIEPCE 75014 PARIS

Le but du jeu est de trouver la position de 5 chiffres consécutifs dans la chaine.

SUBSTITUE(A2;" ";"|") remplace les espaces par un autre caractère. Pour éviter que "01 234" soit vu comme un nombre par estnum()

LIGNE($1:$99) sert à générer une matrice des nombres de 1 à 99.

Saisis =LIGNE($1:$99) dans une cellule et valide, tu vois juste 1 comme résultat. Va en édition de la formule (le curseur dedans) et fais F9.

Là tu vois qu'en fait c'est une matrice (un ensemble de valeurs): ={1;2;3;...;98;99}.

Ca servira à se positionner dans la chaine à tous les emplacements possibles. A partir de la 6ème position par exemple on a PCE 7...

Au passage si tu sélectionnes une partie d'une formule et que tu fais F9 dessus, cette partie de formule sera évaluée. Très utile pour l'élaboration de telles formules.

Ne pas oublier de quitter par Echap sinon tu conserves cette évaluation

STXT(chaine;LIGNE($1:$99);5) extrait donc tous les ensembles 5 caractères consécutifs :

{"7|NIE";"|NIEP";"NIEPC";...;;"75014";"5014|";...}

Tu vois qu'il y en a un de particulièrement intéressant : "75014", c'est le seul à 5 chiffres et correspond au CP

*1 transforme les chaines en numérique :

({#VALEUR!;#VALEUR!;...;75014;#VALEUR!;...}

Le seul à pouvoir être converti est 75014, reste à faire le tri là dedans...

ESTNUM(...) retoune VRAI si numérique, FAUX autrement

ESTNUM(STXT(SUBSTITUE(A2;" ";"|");LIGNE($1:$99);5)*1) donne :

({FAUX;FAUX;...;VRAI;FAUX;...}

que l'on va multiplier par la matrice LIGNE($1:$99) pour avoir les positions de chaque VRAI. (FAUX=0, VRAI=1)

({FAUX;FAUX;...;VRAI;FAUX;...}*{1;2;...;10;0;...} donne :

{0;0;...;10;0;...}

Vu que théoriquement on n'a qu'on seul nombre différent de 0 on peut faire la somme de tous les éléments de la matrice pour obtenir ce seul nombre.

C'est fait par :

=SOMMEPROD({0;0;...;10;0;...}) qui donne 10 !!! Oufff

Il ne reste plus qu'à prendre les fragments de chaine qui nous intéressent par rapport à cette position.

Il ne te reste plus qu'à essayer de la refaire étape par étape....

eric

Bonjour Eric,

Merci pour tes explications et du temps passé pour me répondre.

Je me lance pour un essai pour voir si je peux le faire seule.

Je te tiendrais au courant de mon évolution.

Cordialement

Nezha

Bonjour NIZOU,

Voici quelques essais de formules

174exemple.xlsx (121.54 Ko)

Bonjour à tous

Bonjour NIZOU,

Voici quelques essais de formules

@fcyspm30 : Je pense que, compte tenu de l'ancienneté de la demande, NIZOU n'a plus besoin de votre proposition......

bonjour

modeste contribution tardive avec une formule matricielle light

=MAX(SIERREUR(SI(ESTNUM(STXT(A2;LIGNE($2:$100);5)*1)>70000;STXT(A2;LIGNE($2:$100);5)*1;"");0))

cordialement

Rechercher des sujets similaires à "extraire code postal adresse"