


Option Explicit
Sub SepareAdresse()
Dim WkSource As Worksheet, WkDest As Worksheet
Dim Colsource As Integer, LigSource As Integer, Lig As Long, UB As Byte
Dim ColDest As Integer, LigDest As Long, TB, i As Integer, e As Integer
Dim OrdreDest()
Set WkSource = Sheets("Feuil1") 'Feuille où se trouve les adresses à séparer
'Note : si les adresses sont dans un autre classeur vous pouvez initialiser par
'Set WkSource = Workbooks("ClasseurSource.xls").Sheets("Feuil1")
Colsource = 2 'colonne où se trouve les adresses à séparer - ici "B"
LigSource = 4 'Première ligne où se trouve les adresses à séparer - ici "4"
Set WkDest = Sheets("Feuil2") 'Feuille où mettre les données séparées
'Note : si les destinations sont dans un autre classeur vous pouvez initialiser par
'Set WkDest = Workbooks("ClasseurDest.xls").Sheets("Feuil2")
ColDest = 3 'Première colonne où mettre les adresses séparées - ici "C"
LigDest = 3 'Première ligne où mettre les adresses séparées
'Changer l'ordre des cellules
'Exemple pour avoir
'rue des Abeilles | 143 | Bt 3 | 65677 | LaVille
OrdreDest = Array(1, 0, 2, 3, 4)
'Dans l'exemple nous ne modifierons pas l'ordre des colonnes,
'Si il y a des adresses avec et sans boite postale, sélectionnez 4 colonnes
OrdreDest = Array(0, 1, 2, 3, 4)
'S'il n' y a jamais de BP, mettre une colonne en moins
'OrdreDest = Array(0, 1, 2, 3)
With WkSource
For Lig = LigSource To .Cells(65536, Colsource).End(xlUp).Row
On Error GoTo Erreur ' au cas où une adresse serait invalide
TB = Split(.Cells(Lig, Colsource), " ")
UB = UBound(TB)
For i = 1 To UB
If Not IsNumeric(TB(i + 1)) Then
If i > 1 Then TB(1) = TB(1) & " " & TB(i)
Else
Exit For
End If
Next i
If UBound(TB) < 4 Then
ReDim Preserve TB(4)
TB(4) = TB(3): TB(3) = TB(2)
End If
If TB(i + 1) < 300 Then 'il y a une boite postale
If UBound(OrdreDest) = 4 Then
TB(2) = TB(i) & " " & TB(i + 1)
TB(3) = TB(i + 2): TB(4) = TB(i + 3)
Else 'mais il ne faut pas l'afficher
TB(2) = TB(UBound(TB) - 1): TB(3) = TB(UBound(TB))
End If
Else ' pas de boite postale
If i > 1 Then TB(1) = TB(1) & " " & TB(i)
If UBound(OrdreDest) = 4 Then 'la BP est optionnelle mais n'est pas présente
TB(2) = ""
TB(3) = TB(UBound(TB) - 1): TB(4) = TB(UBound(TB))
Else
TB(2) = TB(UBound(TB) - 1): TB(3) = TB(UBound(TB))
End If
End If
For e = 0 To UBound(OrdreDest)
WkDest.Cells(LigDest, ColDest).Offset(, OrdreDest(e)) = TB(e)
Next e
LigDest = LigDest + 1
Passe:
Next Lig
End With
Exit Sub
Erreur:
Resume Passe
End Sub
Combien cela coûte-t-il au total ? Quelles aides apportent l'état et les acteurs du marché pour alléger cette charge non choisie ? Tous les détails sur Commentçamarche.net.