VBA récupérer des chaînes à partir d'un mot
Bonsoir,
Je cherche à découper une adresse en isolant
dans une 1ère colonne le numéro
dans une 2ème colonne le type de voie (rue, avenue, etc)
et dans une 3ème colonne le nom de la voie (qui peut comporter plusieurs mots ex : du Général de Gaulle)
J'ai réussi à obtenir le résultat attendu pour les deux premières colonnes, mais ne parviens pas à remplir la troisième. En réalité, je pense ne pas avoir bien compris la manipulation de Split.
Le code suivant fonctionne donc très bien mais reste incomplet. Qui pourra me dire comment faire pour remplir la troisième colonne, aussi simplement que je l'ai fait avec les deux premières ?
A celui-là ou celle-là, d'avance, je dis : merci !
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| Sub typeVoie()
Dim compteur As Integer
compteur = 3
Range("E3").Select
While Not IsEmpty(ActiveCell.Offset(0, -4))
If ActiveCell.Offset(0, -4).Value Like "*rue*" Then
ActiveCell.Formula = "rue"
ActiveCell.Offset(0, -1) = Split(ActiveCell.Offset(0, -4), "rue")
ElseIf ActiveCell.Offset(0, -4).Value Like "*avenue*" Then
ActiveCell.Formula = "avenue"
ActiveCell.Offset(0, -1) = Split(ActiveCell.Offset(0, -4), "avenue")
ElseIf ActiveCell.Offset(0, -4).Value Like "*boulevard*" Then
ActiveCell.Formula = "boulevard"
ActiveCell.Offset(0, -1) = Split(ActiveCell.Offset(0, -4), "boulevard")
End If
Cells(compteur, 5).Select
compteur = compteur + 1
Wend
End Sub |
re avec regular expression
re
voila je t'ai fait un exemple générique
tu a 4 adresses en demo elles fonctionnent toutes
Code:
1 2 3 4 5 6 7 8 9 10 11
| Sub test()
Dim chaine As String
chaine = "Mr Dupont André 2222 Rue du Général de Gaulle 75000 Paris"
'chaine = "Mr trucbidule chouette 533 allée des maroniers 83242 toulon"
'chaine = "Mr machin droledechose 02 boulevard des armaris 83520 la seyne sur mer"
'chaine = "Mr carton mancheaabalais 55 quai des derrieres retournés 83660 la lavalette du var"
mesdonnée = chainevalide(chaine, "( )+[0-9]+[0-9]+( )")
texte = " numero de l'adresse est : " & mesdonnée(0) & vbCrLf
texte = texte & "l'adresse est : " & Split(Split(chaine, mesdonnée(0))(1), mesdonnée(1))(0)
MsgBox texte
End Sub |
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| Function chainevalide(txt As String, matrice, Optional cas = True) As Variant
Dim Matches, ReG
Set ReG = CreateObject("VBScript.RegExp")
With ReG
.Global = True: .Pattern = matrice: .IgnoreCase = cas
Set Matches = .Execute(txt)
ReDim tablo(Matches.Count): i = 0
For Each Match In Matches
tablo(i) = Trim(Match.Value)
i = i + 1
Next
End With
chainevalide = tablo
Set ReG = Nothing
End Function |
ps:
la commande générique fonctionne aussi
Code:
mesdonnée = chainevalide(chaine, "\d+")