'*************************************************
'décanté une addresse au format:
'[civilité], [nom et ou prenom],[adresse],[codepostal],[ville])
' patricktoulon exceldownload
'version 1.0
'Date version:28/02/2020
' s'utilise en formule ou en VBA
'**************************************************
Option Explicit
Public Function GlobalRegex1(cel As String, Argu As String) As String
Dim Matches, ccp&, temp$
Application.Volatile
With CreateObject("vbscript.regexp")
.Global = True: .IgnoreCase = True
Select Case Argu
'--------------------------------------------------------------------------------------
Case "civilité"
.Pattern = "^(mr\s(et|ou)\smme\s|mr\s|melle\s|m.\s|m\s|mme\s|dr\s|docteur\s)" ' doit commencer par
Set Matches = .Execute(cel)
If Matches.Count > 0 Then GlobalRegex1 = Trim(Matches(0))
'--------------------------------------------------------------------------------------
Case "adresse"
ccp = GlobalRegex1(cel, "codepostal")
.Pattern = "(\d{5})" 'tout jusqu'a une chaine de 5 chiffre
Set Matches = .Execute(cel)
If Matches.Count > 0 Then temp = Mid(cel, 1, InStrRev(cel, Matches(Matches.Count - 1)) - 1)
Debug.Print temp
'on relance le regex pour ne recupérer la chaine qu'a partir d'un numero ou du nom commun (rue,chemin,etc....)
'avec un pattern 2 options (xxxx abcdef...) ou ((rue/chemin/etc....) abcdefg....)
Set Matches = Nothing
.Pattern = "((\d{1,6})|rue|les|route|chemin|avenue|allée|allee|boulevard|impasse|place|lieu|résidence|residence|hameau|ferme|bar)"
Set Matches = .Execute(CStr(temp))
GlobalRegex1 = Mid(temp, InStr(1, temp, Matches(0)))
'--------------------------------------------------------------------------------------
Case "codepostal"
.Pattern = " \d{5} "
Set Matches = .Execute(cel)
If Matches.Count > 0 Then GlobalRegex1 = Trim(Matches(Matches.Count - 1))
'--------------------------------------------------------------------------------------
Case "ville"
.Pattern = " \d{5} .*$"
Set Matches = .Execute(cel)
If Matches.Count >= 1 Then GlobalRegex1 = Right(Matches(0), Len(Matches(0)) - 7)
'--------------------------------------------------------------------------------------
Case "nom"
'peut se faire eventuellement avec SUBSTITUE dans les cells
Dim z(1 To 4), I&: temp = cel
z(1) = GlobalRegex1(cel, "civilité")
z(2) = GlobalRegex1(cel, "codepostal")
z(3) = GlobalRegex1(cel, "adresse")
z(4) = GlobalRegex1(cel, "ville")
For I = 1 To 4: temp = Replace(temp, z(I), ""): Next
GlobalRegex1 = Trim(temp)
End Select
End With
End Function