Séparation Adresse Excel
Résolu
Rockoff
-
pilas31 Messages postés 1878 Statut Contributeur -
pilas31 Messages postés 1878 Statut Contributeur -
Bonjour,
Tout d'abord j'ai cherché une solution à mon problème pendant pas mal de temps mais je n'ai pas trouvé de solution efficace , en effet j'ai besoin d'extraire la ville de ma colonne "adresse" mais voila je n'ai pas le format habituel RUE CP VILLE "9 avenue General De gaulle 75008 Paris" mais RUE VILLE CP "9 avenue General de Gaulle Paris 75008" ce qui m'empeche d'utiliser une formule pour scinder l'adresse après une suite de 5 chiffres...
Si quelqu'un peut m'éviter le calvaire de 14 768 lignes grâce à une petite macro ou formule :)
Merci d'avance !
Tout d'abord j'ai cherché une solution à mon problème pendant pas mal de temps mais je n'ai pas trouvé de solution efficace , en effet j'ai besoin d'extraire la ville de ma colonne "adresse" mais voila je n'ai pas le format habituel RUE CP VILLE "9 avenue General De gaulle 75008 Paris" mais RUE VILLE CP "9 avenue General de Gaulle Paris 75008" ce qui m'empeche d'utiliser une formule pour scinder l'adresse après une suite de 5 chiffres...
Si quelqu'un peut m'éviter le calvaire de 14 768 lignes grâce à une petite macro ou formule :)
Merci d'avance !
2 réponses
-
Voilà j'ai fait une petite macro exemple avec un algorithme en VBA:
Le fichier est un peu lourd car j'ai mis un onglet CP_VILLE dans lequel se trouvent tous les codes postaux associés aux villes (je pense qu'elle vient de l'INSEE).
Comme la liste des villes est sans tiret, sans apostrophe et qu'il y a ST à la place de SAINT. Je normalise au début l'adresse.
La macro à lancer s'appelle « EXTRAIRE_VILLE »
Quand il ne trouve pas il indique l'erreur en colonne 3
télécharger ici :
http://www.cijoint.fr/cjlink.php?file=cj201108/cij06iXBdv.xls
Me dire si c'est ok. C'est à retravailler en fonction des échecs rencontrés.
Elle n'est pas optimisée elle va "ramer" un peu ....
A+
-
Merci pour ta macro ! Cela fonctionne , il vrai que cela rame un peu ( 12 adresses sans ramer puis apres leger lag de 5s 6s et ça repart donc ça va ) , par contre y'aurait il une solution pour que la macro ne s'arrete pas lorsque qu'il ya une erreur d'incompatibilité de type ? en effet je me suis aperçus que parfois ( rarement) le code postal manque ou alors l'adresse se présente sous cette forme "9 avenue de strasbourg Paris 75003 FR" ce qui provoque l'arret de la macro.
J'ai l'impression de demander toujours trop, ce que tu as fait m'aide deja beaucoup !
Je te remercie pour ton aide ! -
Oui, je te propose de faire une gestion d'erreur en modifiant légèrement la macro comme cela :
le On error juste après le For
et le FIN: juste avant le next
For Ligne = 2 To DernLigne On Error GoTo FIN: ... ... FIN: If Err.Number <> 0 Then Cells(Ligne, 2) = "" Cells(Ligne, 3) = "Erreur Excel N° " & Err.Number End If Next Ligne End Sub
Le reste de la macro est inchangé. Si il se produit une erreur excel, il ne bloque pas il inscrit le numéro de l'erreur en colonne 3. -
-
Bonjour,
Je pense que tu as peut-être involontairement écrasé une instruction. Comme elle n'est pas trés longue je te redonne la totalité de la macro qui fonctionne chez moi:Sub EXTRAIRE_VILLE() Dim TabVille(100) Sheets("Adresses").Select DernLigne = Columns(1).Find("*", , , , xlByColumns, xlPrevious).Row For Ligne = 2 To DernLigne On Error GoTo FIN: 'initialisations NbVille = 0 For Ville = 1 To 100 TabVille(Ville) = "" Next Ville 'Adresse à tester on enlève les espaces avant et aprés Adresse = Trim(Cells(Ligne, 1)) 'on remplace les apostrophes par des espaces Adresse = Replace(Adresse, "'", " ") 'on remplace les tirets par des espaces Adresse = Replace(Adresse, "-", " ") 'on remplace les "SAINT" par "ST" Adresse = Replace(Adresse, "SAINT", "ST", 1, -1, 1) 'Extraire le CP CP = CLng(Mid(Adresse, Len(Adresse) - 4, 5)) 'Trouver les villes correspondantes For LigCP = 2 To 38949 If CP = CLng(Sheets("CP_VILLE").Cells(LigCP, 1)) Then NbVille = NbVille + 1 TabVille(NbVille) = Sheets("CP_VILLE").Cells(LigCP, 2) End If Next LigCP If NbVille <> 0 Then If NbVille = 1 Then 'Une seule ville pas de pb Cells(Ligne, 2) = TabVille(1) Cells(Ligne, 3) = "" Else 'il y a plus d'une ville on va essayer de trouver la bonne ' on teste la présence du nom de la ville dans la chaine initiale Ville_Trouv = 0 For Ville = 1 To NbVille If InStr(1, Adresse, TabVille(Ville), 1) <> 0 Then Ville_Trouv = Ville Exit For End If Next Ville If Ville_Trouv <> 0 Then Cells(Ligne, 2) = TabVille(Ville_Trouv) Cells(Ligne, 3) = "" Else 'Erreur : par trouvé de ville Cells(Ligne, 2) = Join(TabVille, " ") Cells(Ligne, 3) = "Echec choix de la ville" End If End If Else 'Erreur : pas trouvé le CP Cells(Ligne, 2) = "" Cells(Ligne, 3) = "Code Postal faux" End If FIN: If Err.Number <> 0 Then Cells(Ligne, 2) = "" Cells(Ligne, 3) = "Erreur Excel N° " & Err.Number End If Next Ligne End Sub
A+ -
-
-
Bonjour,
Il est possible de supprimer les cinq derniers caractères et d'essayer de retrouver la ville mais il n'y a pas de séparateurs fiable (car l'espace peut être dans le nom composé d'une ville).
Ma suggestion est la suivante. Télécharger un tableau de correspondance entre le code postal et la ville (on en trouve en téléchargement sous format excel avec 36 000 lignes). mettre ce tableau dans une feuille du classeur
Extraire le code postal de l'adresse avec une formule du type =DROITE(A1;5)
Puis avec un RECHERCHEV trouver dans le tableau de correspondance la ville.
A+
-
-
Oui, tu as raison, plusieurs villes peuvent avoir le même CP. Donc je ne vois pas de solution simple sauf faire un algorithme en VBA pour retrouver dans la liste des villes correspondant à ce CP celle qui se trouve dans l'adresse initiale mais il risque d'y avoir des échecs si la ville n'est pas exactement orthographiée de la même manière...
-
-
Merci pour vos réponses , je viens de tester la solution de Pilas31 et en effet il y 'a un leger problème pour les villes ayant des CP identiques. Je pense aussi que le VBA reste la derniere solution mais que la réalisation est difficile ( voir impossible ?) . Si quelqu'un passe par là et est tenté de m'aider :)
-
-