Eh bien voilà une méthode sur laquelle tu peux te pencher :
- splitter la chaîne à traiter (sur l'espace par défaut) :
ch = Split(.Range("A5"))
Le point devant Range, destiné à référer à la feuille (laquelle à mettre sous bloc With).
- remonter les éléments jusqu'à ce qu'on trouve "RUE" :
For i = UBound(ch) - 1 To 1
If ch(i) <> "RUE" Then
ch(UBound(ch)) = ch(i) & " " & ch(UBound(ch))
ch(i) = ""
Else
Exit For
End If
Next i
On ajoute les éléments dans le dernier en les supprimant.
- recomposer la chaîne avec un autre séparateur :
ch = Join(ch, "@")
On aura 2 ou plus "@" à la suite là où l'on a supprimé des éléments.
- réduire les successions de séparateurs à 1 :
Do While InStr(1, ch, "@@") > 0
ch = Replace(ch, "@@", "@")
Loop
- resplitter sur le nouveau séparateur :
ch = Split(ch, "@")
On obtient un tableau qu'il n'y a plus qu'à affecter.
- affecter :
.Range("E5").Resize(, UBound(ch) + 1).Value = ch
Voilà ! Tu as quasiment tout ton code écrit, ne te reste que les déclarations de procédure (Sub...) et de variable (ch, i) [ch ne doit pas être typée, et i en Integer (i%)], et mentionner la feuille.
Bien sûr, pour traiter plusieurs lignes, il sera sans doute préférable d'utiliser Cells, après dimensionnement du tableau à traiter, ajouter une variable de boucle... mais tout ça c'est du banal, concentre-toi sur la méthode de traitement de la ligne...
Cordialement.