XL pour MAC extraction complexe

danery

XLDnaute Nouveau
Bonjour à tous,
Je maitrise un peu les formules grace aux tutos.
J'ai trouvé des exemple de comptage à partir premier ou du dernier espace mais pas après x espaces.
Mais sur ci-dessous je bloque.
Comment extraire les adresses (numéro et rue) de différents types de cellules comme :
43 RUE NATIONALE 17250 ST PORCHAIRE
CABINET SERMENT 188 RUE PELLISSIER 74700 SALLANCHES
9 RUE PAUL VAILLANT COUTURIER 18400 ST FLORENT SUR CHER
22 RUE DU CHAMP DE MARS 62300 LENS
CABINET DENTAIRE 16 ALLEE DE LA CLAIRIERE 77820 LE CHATELET EN BRIE
Cordialement

J.Eynard
 

danery

XLDnaute Nouveau
Bonjour
c'est un exercice qui a déjà été tenté
il te sera impossible de traiter toutes les forme de chaîne
une adresse peut commencer par un numéro ou pas
ça peut être une rue, un chemin ,un boulevard,une impasse , ou même par le nom d'une résidence
quand aux codes postals il peuvent être à la fin comme avant la ville
et j'en passe et des meilleures
et pour couronner le tout tu es sous MAC ce qui fai que pour gerer un regex c'est possible mais une torture

cela dit si tu y tiens
voici 5 fonctions perso utilisable en vba et formule
le complément d'adresse si il y a doit être en premier ensuite le numéro ensuite l'adresse ensuite le cdepostal ensuite la ville

a mettre dans un module
VB:
Function code_Postal(v As String)
    Dim T: T = Split(v, " ")
    For I = UBound(T) To 0 Step -1
        If IsNumeric(T(I)) And Len(T(I)) >= 5 Then code_Postal = Val(T(I))
    Next
End Function
Function ville(v As String)
    Dim T, I&: T = Split(v, " ")
    For I = UBound(T) To 0 Step -1
        If IsNumeric(T(I)) And Len(T(I)) >= 5 Then ville = Split(v, T(I))(1): Exit For
    Next
End Function

Function adresseX(v As String)
    Dim Add$, T, I&: T = Split(v, " ")
    For I = 0 To UBound(T)
        If IsNumeric(T(I)) And Len(T(I)) < 5 Then Add = Split(v, T(I))(1)
        If IsNumeric(T(I)) And Len(T(I)) >= 5 Then Add = Split(Add, T(I))(0)
    Next
    adresseX = Add
End Function

Function Numero(v As String)
    Dim num$, T, I&: T = Split(v, " ")
    For I = 0 To UBound(T)
        If IsNumeric(T(I)) And Len(T(I)) < 5 Then num = T(I): Exit For
    Next
    Numero = num
End Function

Function complementADresse(v As String)
    Dim cmpad, T, I&: T = Split(v, " ")
    For I = 0 To UBound(T)
        If IsNumeric(T(I)) Then cmpad = Split(v, T(I))(0): Exit For
    Next
    complementADresse = cmpad
End Function
exemple pour le numero en formule dans une cellule à étendre à souhait
=numero(A2)
et pareil pour les autre fonctions

Regarde la pièce jointe 1119653

mais tu n'aura JAMAIS UNE GARANTIE A 100% DE RESULTAT PROBAN FAIRE ATTENTION!!!!!
Bonjour,
Tout d'abord merci de prendre le temps de m'aider.
J'ai copié ton code dans le vba de mon fichier mais lorsque que je saisi =Ville(C2) dans la cellule D2 j'obtiens #NOM?
 

patricktoulon

XLDnaute Barbatruc
re
demo.gif
 

Phil69970

XLDnaute Barbatruc
Bonjour à tous

Patrick super tes fonctions et hop dans la besace;)
Patrick ta fonction numéro de rue pourrait être pris en défaut dans le cas des numéros de rue au mètre et les numéro supérieur à 10 000, le cas doit être rare je te l'accorde vers chez moi le plus gros numéro que je connaisse c'est autour de 5 ou 6 000.

VB:
Function Numero(v As String)
    Dim num$, T, I&: T = Split(v, " ")
    For I = 0 To UBound(T)
        If IsNumeric(T(I)) And Len(T(I)) < 5 Then num = T(I): Exit For
    Next
    Numero = num
End Function

Et comme nous l'avons écris :
Comme je l'ai écrit au post #4 il y a des cas ou il faudra le faire à la main
mais tu n'aura JAMAIS UNE GARANTIE A 100% DE RESULTAT PROBAN FAIRE ATTENTION!!!!!

@Phil69970
 

Statistiques des forums

Discussions
312 294
Messages
2 086 895
Membres
103 404
dernier inscrit
sultan87