Microsoft 365 [Résolu] Separer Nom, Ligne d'adresse, Cp et Ville en VBA

McMidou84

XLDnaute Nouveau
Bonjour à tous,

Je sollicite votre aide pour trouver une macro capable de séparer par colonne une adresse du type :

M TRUQUE NATHANEL SYLVESTRE RUPERT 0012 IMPASSE DU SENS UNIQUE 27040 FAINFOND

Pour l'instant j'essaye avec cette logique (qui est une formule qui ne fonctionne pas encore ) :

Sub Extraire_ADRESSES_CODESPOSTAUX_VILLES()
Dim c As Range, t As Integer
Set c = Range("A2")
Do While c <> ""
For t = InStr(InStr(c, " "), c, " ") To Len(c)
Select Case Mid(c, t, 1)
Case "0" To "9"
Exit For
End Select
Next t
c(1, 2) = Mid(c, 1, t - 2)
c(1, 3) = Mid(c, t, 500)
Set c = c(2, 1)
Loop

End Sub

Private Sub CommandButton1_Click()
iR = Cells(65535, 1).End(xlUp).Row
For i = 1 To iR
Codep = ADCOD(Cells(i, 1))
iPos = InStr(Cells(i, 1), Codep)
Cells(i, 2) = Left(Cells(i, 1), iPos - 1)
Cells(i, 3) = Codep
Cells(i, 4) = Mid(Cells(i, 1), iPos + 6)
Next
End Sub

Private Function ADCOD(c)
Application.Volatile
Set obj = CreateObject("vbscript.regexp")
obj.Pattern = "\d{5}"
Set a = obj.Execute(c)
If a.Count > 0 Then ADCOD = a(0) Else codepostal = ""
End Function


Pouvez vous, s'il vous plait, me dire comment faire en sorte qu'elle fonctionne?

En vous remerciant par avance,

Bien cordialement

Midou
 

patricktoulon

XLDnaute Barbatruc
bonjour
si tes adresses sont toujours dans le même ordre

M. ou Mme PATATE 4 Rue Montesquieu C 325 95100 ARGENTEUIL
civilité /nom /adresse/ code postal/ ville

il te suffit de repérer le code postal qui sauf erreur de ma part en metropole comporte 5 chiffres
et de repérer mr ou mme ou melle
donc tout ce qui est entre civilité et cp est le nom et l'adresse
tout ce qui après cp est la ville
il te reste a déterminer le nom dans la portion nom et adresse
ce qui ne sera pas une sinécure avec des noms composés ;)
a moins que tes adresses commencent toujours par le n° de rue/chemin/boulevard etc.....
 

McMidou84

XLDnaute Nouveau
bonjour
si tes adresses sont toujours dans le même ordre

M. ou Mme PATATE 4 Rue Montesquieu C 325 95100 ARGENTEUIL
civilité /nom /adresse/ code postal/ ville

il te suffit de repérer le code postal qui sauf erreur de ma part en metropole comporte 5 chiffres
et de repérer mr ou mme ou melle
donc tout ce qui est entre civilité et cp est le nom et l'adresse
tout ce qui après cp est la ville
il te reste a déterminer le nom dans la portion nom et adresse
ce qui ne sera pas une sinécure avec des noms composés ;)
a moins que tes adresses commencent toujours par le n° de rue/chemin/boulevard etc.....

Oui mes adresses (par chance) commencent toute par un numero de rue :)
 

jmfmarques

XLDnaute Accro
Bonjour
Et ce sera ma seule intervention dans cette discussion :
Oui mes adresses (par chance) commencent toute par un numero de rue
En développement informatique, on ne compte JAMAIS sur la "chance". Et ce n'est pas parce-qu'aucune des données présentes n'est "différente", que tel sera le cas "demain" ! Attendez de "tomber sur une adresse du genre .... "km 3, route de Lyon...", ou encore (entre autres) "lieu dit machin-chouette ..." etc ...
Je ne connais personnellement aucun outil capable, dans ce domaine, de remplacer l' "appréciation humaine" !!! Et encore : dans certains cas, même l'appréciation humaine ne suffit pas à "transposer" sans risque.
Je n'ai rien d'autre à ajouter.
 

jmfmarques

XLDnaute Accro
pour civilité et cp j'ai
Et alors ?
Que feras de ce qu'il y a "entre" ces deux "données" ? Et qui pourrait être
"Emile Dupont. Ferme Les Gazelles Joyeuses, km 25" ?
ou encore :
Pas de civilité du tout !
Genre :
"Banque Profiteurs et Cie" ou "Sté Machin" ou (tout court) : "Machin" ?
Il est temps de commencer à y penser. Cela aidera à remettre un peu les pieds sur terre.
PS : je déplore vraiment d'avoir eu à faire un nouveau message pour ce qui (tout au moins pour moi) relevait du bon sens le plus élémentaire.
Continuez tous sans moi.
Amtitiés
 

patricktoulon

XLDnaute Barbatruc
re
regex
patern du CP
VB:
pattern="(\d{5}) ';' on prendra le matchs( matchs.count-1)
patterne de civilité à la neuneu
VB:
 .Pattern = "^(M. ou Mme|M. et Mme|Mr et Mme|M.|Mr|Melle|M.me|Monsieur|Madamme|Société|Entreprise) "
numero de rue
VB:
pattern="(\d{1,4}) ';' on prendra le matchs(0)

le reste formule
wagadougou ;)
comme je l'ai dis si le format est conforme a la demande
demo3.gif
 
Dernière édition:

jmfmarques

XLDnaute Accro
Bonjour GALOUGALOU
en partant du principe que l'adresse est normalisée
Pour être plus précis :
La normalisation peut différer d'un pays à l'autre
En France, elle est définie par AFNOR NF Z 10-011 et :
- ne contient bien évidemment pas la totalité de l'adresse dans un seul champ

- distingue la structure B to C (adresse d'un particulier) de la structure B to B (adresse d'une personne morale). La structure B to C ne comporte aucune civilité, mais directement le nom de la personne morale (ex : SOGABA, M.A.E.C., etc ...)

- dans un cas comme dans l'autre , les éléments de la structure (1 par ligne) doivent respecter un ordre précis.
 

patricktoulon

XLDnaute Barbatruc
re
a une formule indigeste ou même une chatte n'y retrouverais pas ces petits et certainement moins efficiente qu'un regex
en vba par contre avec un regex les choses deviennent plus simples
donnez moi un exemple de société avec le résultat souhaité ou comme il doit etre ;)
 

GALOUGALOU

XLDnaute Accro
bonjour mcmidou84 bonjour le fil
j'ai trouvé sur le site ce lien de 2011
à partir de cela, avec la formule du fil #20 jnp, j'ai essayé un classeur exemple
le nom et l'adresse sont mélangés, mais le code postal et la ville (et le cedex) sont isolés
peut-être l’ambryon d'une solution
cordialement
galougalou
 

Pièces jointes

  • extraire adresse par formule.xlsm
    20 KB · Affichages: 16

Discussions similaires

Réponses
12
Affichages
225
Réponses
6
Affichages
202
Réponses
12
Affichages
537

Statistiques des forums

Discussions
311 730
Messages
2 081 989
Membres
101 856
dernier inscrit
Marina40