Extraire code postal d'une adresse

Salut!

J'aimerais récupérer les deux premiers chiffres des codes postaux de chaque adresse de mon tableau. Mes essais n'ont pas aboutis. voici un exemple d'une partie de tableau.

Merci pour votre aide !

Z.i. Les Grands Prés - Route Du Pont De L'arche - 76320
Saint-Pierre-lès-Elbeuf
427 Route Du Medoc - 33520 Bruges
Rd2076 Route De Vierzon - 18230 Saint-Doulchard
Avenue De L'aquitaine Centre Commercial Grand Tour - 33560 Sainte-Eulalie
110Bis Av Jean Jaures - 33600 Pessac
Route Nationale 198 Route Du 9 Septembre - 20240 Ghisonaccia
Route De Bordeaux - 33740 Arès
11 Avenue De La 51E - Highland Dividion - 76460 Saint-Valery-en-Caux
100 Route De Bordeaux - 33850 Léognan

Bonjour;

Pour l'adresse en A1, une formule matricielle pour extraire le code postal :

=STXT(A1;(NBCAR(A1)-EQUIV(VRAI;ESTNUM(--(STXT(A1;NBCAR(A1)-LIGNE($1:$254);1)));0)-4);5)

A valider par Ctrl+Maj+Entrée

Pour les 2 premiers caractères remplacer 5 par 2

Bonjour,

avec une "expression régulière"

Function CP(cel As Range)
  CP = 0
  On Error Resume Next
  Set obj = CreateObject("vbscript.regexp")
  obj.Pattern = "([0-9]){5}"
  Set res = obj.Execute(cel.Value)
  CP = res(0)
End Function
85code-postal.xlsm (14.99 Ko)

mais l'idée de Patrice est très bonne !

Bonjour, vos solutions sont supers mais certaines lignes ne marchent pas comme celle ci et je ne comprends pas pourquoi.

Auchan Marseille 10e57 Boulevard Romain Rolland - 13010 Marseille 10ele

Bonjour et bienvenue,

Merci de joindre un fichier pour aune aide adaptée.

Tu en profiteras pour indiquer ta version Excel dans ton profil.

Cdlt.

Bonjour à tous

La fonction de Steelson traite bien la dernière adresse.

Par formules d'autres solutions posent problème avec les rues portant le nom de dates

On peut aussi traiter par PowerQuery mais puisque la fonction personnalisée fonctionne...

Bonjour, vos solutions sont supers mais certaines lignes ne marchent pas comme celle ci et je ne comprends pas pourquoi.

Auchan Marseille 10e57 Boulevard Romain Rolland - 13010 Marseille 10ele
capture d ecran 50

Salut !

j'ai trouvé une solution avec des formules non matricielles:

=SIERREUR(GAUCHE(DROITE(SUBSTITUE(A1;" - ";"";1);NBCAR(SUBSTITUE(A1;" - ";"";1))-NBCAR(GAUCHE(SUBSTITUE(A1;" - ";"";1);TROUVE(" - ";SUBSTITUE(A1;" - ";"";1);1)))-2);5);GAUCHE(DROITE(A1;NBCAR(A1)-NBCAR(GAUCHE(A1;TROUVE(" - ";A1;1)))-2);5))

Cette formule fonctionne à partir du moment ou il n'y a pas plus de 2 occurrences de la chaine " - ". (espace - espace).

Ce que j'ai fait c'est faire en sorte que la chaine " - " n'apparaisse qu'avant le code postal, et après j'ai découpé ça.

A dispo pour plus de précisions

image

Bonjour

@RMpawa

Si effectivement le CP est toujours précédé de " - " c'est une solution

Je vais quand même prêcher pour ma paroisses ... je pense que ce cas est encore un cas simple pour les expressions régulières

([0-9]){5}

ce qui veut dire 5 chiffres consécutifs, sachant que les départements comme l'Ain, Aisne etc ... commencent bien par un 0.

Mais c'est une solution ... au demandeur de choisir celle qui lui convient et qu'il maîtrise le mieux.

RE

Je vais quand même prêcher pour ma paroisses ... je pense que ce cas est encore un cas simple pour les expressions régulières

([0-9]){5}
...
Je l'ai déjà recommandée : il reste le cas d'un numéro de rue de 5 chiffres, assez rare en France mais possible.
La découpe de chaînes peu structurées est toujours délicate

Dans ce cas, on pourrait ne prendre que la dernière occurrence trouvée !

Function CP(cel As Range)
Application.Volatile
  CP = 0
  On Error Resume Next
  Set obj = CreateObject("vbscript.regexp")
  obj.Global = True
  obj.Pattern = "([0-9]){5}"
  Set res = obj.Execute(cel.Value)
  CP = res(res.Count - 1)
End Function

sans que ce soit non plus une certitude absolue !

Rechercher des sujets similaires à "extraire code postal adresse"