Extraction champs adresse variable (international)

argentin

XLDnaute Nouveau
Hello,
J'ai besoin d'extraire des données d'adresse (rue, numéro, ville, code postal) à partir de données variables, présentées comme suit :

Cape Town Opera<br>1-10 DF Malan Street<br>Foreshore<br>Cape Town 8001
Komische Oper Berlin<br>Behrenstr 55<br>10117 Berlin
Teatro Argentino<br>Centro de las Artes<br>Avenida 51<br>La Plata

J'ai donc d'abord un nom de salle, puis des champs entre balise <br> pour l'adresse : soit un, soit deux. Enfin, j'ai un champ avec un code postal puis une ville, ou une ville puis un code postal, et parfois juste une ville ...

Je ne pourrai peut être pas tout faire en formule, mais dégrossir le truc serait super !

J'ai besoin au final d'avoir une colonne pour le lieu, un colonne pour adresse 1, une colonne adresse 2, une colonne code postal, et une colonne ville !
 

Efgé

XLDnaute Barbatruc
Re : Extraction champs adresse variable (international)

Bonjour argentin et bienvenu sur le forum

Il est toujours plus simple de fournir un petit fichier exemple, annonyme, pour pouvoir faire des propositions adaptées.

Si ta liste d'adresse est en colonne A qu'elle commence en $A$1 et que ta feuille s'appelle Feuil1:
Une proposition par macro :
VB:
Sub test()
Dim i&, T As Variant
With Sheets("Feuil1")
    For i = 1 To .Cells(.Rows.Count, 1).End(3).Row
        T = Split(.Cells(i, 1), " < br > ")
        .Cells(i, 2).Resize(, UBound(T) + 1) = T
    Next i
    .Columns.AutoFit
End With
End Sub
Cordialement
 

argentin

XLDnaute Nouveau
Re : Extraction champs adresse variable (international)

Merci, oui désolé voici le petit fichier test.
Je regarde vos solutions.
Je pensais qu'on pourrait avec des formules mais cela est peut être trop complexe.
 

Pièces jointes

  • extraction lieux test.xlsx
    9.2 KB · Affichages: 40

david84

XLDnaute Barbatruc
Re : Extraction champs adresse variable (international)

Bonjour,
par formule :
Code:
=SI(COLONNE(A:A)<=NBCAR(SUBSTITUE($A1;"<br>";"/"))-NBCAR(SUBSTITUE(SUBSTITUE($A1;"<br>";"/");"/";""))+1;STXT(SUBSTITUE("<br>"&$A1&"<br>";"<br>";"/";COLONNE(A:A));CHERCHE("/";SUBSTITUE("<br>"&$A1&"<br>";"<br>";"/";COLONNE(A:A)))+1;CHERCHE("/";SUBSTITUE("<br>"&$A1&"<br>";"<br>";"/";COLONNE(B:B)))-CHERCHE("/";SUBSTITUE("<br>"&$A1&"<br>";"<br>";"/";COLONNE(A:A)))-4);"")
A+

Edit : mais tu peux également y arriver sans formule ni macro :
- en remplaçant <br> par un signe ($ par exemple)=>commande Rechercher-remplacer
- en utilisant Convertir (onglet Données)=>Délimité=>Autre : $
 

Pièces jointes

  • Extraction.xls
    35 KB · Affichages: 38
  • Extraction.xls
    35 KB · Affichages: 35
  • Extraction.xls
    35 KB · Affichages: 34
Dernière édition:

gilbert_RGI

XLDnaute Barbatruc
Re : Extraction champs adresse variable (international)

vous pouvez tester aussi la valeur de l'extraction si elle est numérique ou non dans le cas où elle est numérique la placer dans la colonne CP par exemple quoique tous les CP ne soient pas numériques:)
 

argentin

XLDnaute Nouveau
Re : Extraction champs adresse variable (international)

Merci david84, du coup avec la macro de gilbert_RGI j'ai mes colonnes bien séparées. Je suis en train de les organiser, et il me reste donc à séparer le code postal de la ville, avec tous les formats exotiques internationaux (cf fichier).
L'exemple n'a que 200 lignes, mais j'en ai bien bien plus à traiter...
 

Pièces jointes

  • extraction CP Villes.xlsx
    15.8 KB · Affichages: 31

david84

XLDnaute Barbatruc
Re : Extraction champs adresse variable (international)

Un essai en utilisant une fonction personnalisée basée sur une expression rationnelle pour extraire les villes et l'utilisation de la fonction SUBSTITUE pour les codes postaux :
Code:
Function Ville(c As String) As String
Dim oRegExp As Object
Set oRegExp = CreateObject("vbscript.regexp")
oRegExp.Pattern = "([A-Z](-|\s))?[0-9]{4,6}\s?"
If oRegExp.test(c) Then Ville = oRegExp.Replace(c, "") Else Ville = c
End Function
A+
 

Pièces jointes

  • extraction CP Villes.xls
    72.5 KB · Affichages: 27

argentin

XLDnaute Nouveau
Re : Extraction champs adresse variable (international)

Un essai en utilisant une fonction personnalisée basée sur une expression rationnelle pour extraire les villes et l'utilisation de la fonction SUBSTITUE pour les codes postaux :
Code:
Function Ville(c As String) As String
Dim oRegExp As Object
Set oRegExp = CreateObject("vbscript.regexp")
oRegExp.Pattern = "([A-Z](-|\s))?[0-9]{4,6}\s?"
If oRegExp.test(c) Then Ville = oRegExp.Replace(c, "") Else Ville = c
End Function
A+

Merci, ca marche pour la grande majorité de mon fichier, et évidemment les codes postaux canadiens du genre CF10 5AL ne fonctionnent pas du coup. Mais ca aura permis d'industraliser 80% du fichier donc un grand merci :)
 

Efgé

XLDnaute Barbatruc
Re : Extraction champs adresse variable (international)

Re
Bonjour David :)
Et moi qui avais peur d'avoir proposé un code un peu ésotérique :D

Ca fait plaisir de re croiser un motif d'expression régulière sur le forum. :)
(Bon maintenant j'ai la semaine pour comprendre.... )
Cordialement
 

david84

XLDnaute Barbatruc
Re : Extraction champs adresse variable (international)

... et évidemment les codes postaux canadiens du genre CF10 5AL ne fonctionnent pas du coup.
Je n'en vois pas dans ton fichier exemple donc comment veux-tu que je puisse le prévoir ?
J'ai besoin d'exemples précis pour caler un motif opérationnel.
Et moi qui avais peur d'avoir proposé un code un peu ésotérique
il est bien ton code ! Mais comme argentin attendait une formule j'ai fait une formule, puis comme la demande a changé j'ai fait une formule...personnalisée !
Ca fait plaisir de re croiser un motif d'expression régulière sur le forum.
(Bon maintenant j'ai la semaine pour comprendre.... )
Si tu as des questions ou interrogations je suis à ta disposition pour éclairer ta lanterne. Le RegExp c'est puissant mais il faut y passer un peu de temps avant de commencer à s'amuser avec. Mais passé ce temps de familiarisation c'est un outil qui peut rendre bien des services.
A+
 

Discussions similaires