OVH Cloud OVH Cloud

Convertir adresse complète dans une cellule en plusieurs colonnes!

5 réponses
Avatar
IssamIdj
Bonjour à tous,

Je m'arrache les cheveux pour essayer d'automatiser sur 800 adresses complètes chacune compilée dans une cellule et savoir arriver à isoler les différents éléments dans plusieurs colonnes, je m'explique, j'ai des cellules comme suit:
"7 rue du 29 juillet 75001 PARIS"
"74 rue Costes et Bellonte 57152 MARLY CEDEX"
"92 Boulevard sebastopol 75003 PARIS"
"Avenue de la motte 59811 LESQUIN CEDEX"

Et il me faudrait plusieurs colonnes avec:
1ère colonne: Adresse: Ex: 7 rue du 29 juillet
2ème colonne: Code postal: 75001
3ème colonne: Ville

Preneur si vous arrivez à craquer le problème!

Merci bcp

5 réponses

Avatar
MichD
Bonjour,
J'ai supposé que tes données étaient en Colonne A et débutaient à la
ligne 1 et que le nom de l'onglet de la feuille de calcul était "Feuil1"
Tu ouvres l'éditeur de code : Raccourci clavier : ALT + F11 et dans l'un
des modules du projetVBA, tu copies cette macro.
Attention, tu dois adapter le nom de l'onglet de la feuille si
différent de "Feuil1", La lettre A pour la colonne où sont tes données
et le 1 dans A1 pour le numéro de la ligne où débutent les données dans
cette ligne de code. Set Rg = .Range("A1:A" & .Range("A" &
.Rows.Count).End(xlUp).Row)
'-------------------------------------------
Sub test()
Dim Rg As Range, C As Range
Dim X As String, V As String, T As String
With Worksheets("Feuil1")
Set Rg = .Range("A1:A" & .Range("A" & .Rows.Count).End(xlUp).Row)
End With
For Each C In Rg
If C <> "" Then
T = C.Value
Do While Not IsNumeric(X)
X = Split(T, " ")(UBound(Split(T, " ")))
If IsNumeric(X) Then Exit Do
V = X & " " & V
T = Replace(T, " " & X, "")
Loop
C.Offset(, 3) = Left(V, Len(V) - 1)
C.Offset(, 2) = X
C.Offset(, 1) = Replace(T, " " & V & " " & X & " ", "")
T = "": X = "": V = ""
End If
Next
End Sub
'-------------------------------------------
MichD
Avatar
MichD
En passant, la macro inscrit le résultat dans les 3 colonnes adjacentes
d'où sont tes données. Attention, si ces colonnes ont déjà des données à
conserver!
MichD
Avatar
Jacquouille
Bonjour Denis
Tu as testé ce filet de macro? Chez moi, il y a une redite de ce que je
suppose être le code postal.
92 Boulevard sebastopol 75003 PARIS / 92 Boulevard sebastopol 75003 /
75003 / PARIS
Déjà merci
Jacques, testeur
" Le vin est au repas ce que le parfum est à la femme."
.
"MichD" a écrit dans le message de groupe de discussion :
qnnd3d$14qm$
En passant, la macro inscrit le résultat dans les 3 colonnes adjacentes
d'où sont tes données. Attention, si ces colonnes ont déjà des données à
conserver!
MichD
Avatar
MichD
Le 10/10/19 à 12:13, Jacquouille a écrit :
Bonjour Denis
Tu as testé ce filet de macro?  Chez moi, il y a une redite de ce que je
suppose être le code postal.
92 Boulevard sebastopol 75003 PARIS /   92 Boulevard sebastopol 75003 /
75003  /  PARIS
Déjà merci
Jacques, testeur
" Le vin est au repas ce que le parfum est à la femme."
.
"MichD"  a écrit dans le message de groupe de discussion :
qnnd3d$14qm$
En passant, la macro inscrit le résultat dans les 3 colonnes adjacentes
d'où sont tes données. Attention, si ces colonnes ont déjà des données à
conserver!
MichD

Bonjour Jacquouille,
Oui, je sais...il manque une ligne de code...Lorsque je donne un code
parfait, les gens ne reviennent pas, ils ont ce qu'ils voulaient.
Pourquoi perdre du temps à remercier? Ceci étant dit, ça fait longtemps
que je me suis fait à cette démarche. Ma réponse, pourquoi ne pas y
glisser un bogue de temps à autre? ;-))
La macro complète devrait être celle-ci :
'--------------------------------------
Sub test()
Dim Rg As Range, C As Range
Dim X As String, V As String, T As String
With Worksheets("Feuil1")
Set Rg = .Range("A1:A" & .Range("A" & .Rows.Count).End(xlUp).Row)
End With
For Each C In Rg
If C <> "" Then
T = C.Value
Do While Not IsNumeric(X)
X = Split(T, " ")(UBound(Split(T, " ")))
If IsNumeric(X) Then Exit Do
V = X & " " & V
T = Replace(T, " " & X, "")
Loop
C.Offset(, 3) = Left(V, Len(V) - 1)
C.Offset(, 2) = X
T = Replace(T, " " & X, "") 'C'était la ligne manquante!
C.Offset(, 1) = Replace(T, " " & V & " " & X & " ", "")
T = "": X = "": V = ""
End If
Next
End Sub
'--------------------------------------
MichD
Avatar
Jacquouille
Bonjour Denis,
Il est vrai qu'au niveau du suivi et des mercis, c'est assez rare ces
temps-ci. On ne sait même pas si le demandeur a lu la ou les réponses.
Autre temps, autres moeurs.
Merci d'avoir ré-écrit ta partition, rien que pour mon test.
La nouvelle ligne a bien sa place, bien au chaud.
- PS HS: J'ai vu une émission télé avec 2 de tes compatriotes: Messmer et R.
Charlebois. j'adore leur accent.
Bonne journée, voire bon WE.
Jacques
" Le vin est au repas ce que le parfum est à la femme."
.
"MichD" a écrit dans le message de groupe de discussion :
qno13l$4re$
Le 10/10/19 à 12:13, Jacquouille a écrit :
Bonjour Denis
Tu as testé ce filet de macro? Chez moi, il y a une redite de ce que je
suppose être le code postal.
92 Boulevard sebastopol 75003 PARIS / 92 Boulevard sebastopol 75003 /
75003 / PARIS
Déjà merci
Jacques, testeur
" Le vin est au repas ce que le parfum est à la femme."
.
"MichD" a écrit dans le message de groupe de discussion :
qnnd3d$14qm$
En passant, la macro inscrit le résultat dans les 3 colonnes adjacentes
d'où sont tes données. Attention, si ces colonnes ont déjà des données à
conserver!
MichD

Bonjour Jacquouille,
Oui, je sais...il manque une ligne de code...Lorsque je donne un code
parfait, les gens ne reviennent pas, ils ont ce qu'ils voulaient.
Pourquoi perdre du temps à remercier? Ceci étant dit, ça fait longtemps
que je me suis fait à cette démarche. Ma réponse, pourquoi ne pas y
glisser un bogue de temps à autre? ;-))
La macro complète devrait être celle-ci :
'--------------------------------------
Sub test()
Dim Rg As Range, C As Range
Dim X As String, V As String, T As String
With Worksheets("Feuil1")
Set Rg = .Range("A1:A" & .Range("A" & .Rows.Count).End(xlUp).Row)
End With
For Each C In Rg
If C <> "" Then
T = C.Value
Do While Not IsNumeric(X)
X = Split(T, " ")(UBound(Split(T, " ")))
If IsNumeric(X) Then Exit Do
V = X & " " & V
T = Replace(T, " " & X, "")
Loop
C.Offset(, 3) = Left(V, Len(V) - 1)
C.Offset(, 2) = X
T = Replace(T, " " & X, "") 'C'était la ligne manquante!
C.Offset(, 1) = Replace(T, " " & V & " " & X & " ", "")
T = "": X = "": V = ""
End If
Next
End Sub
'--------------------------------------
MichD