Trier des données arrivant sous notepad
p
Bonjour
je souhaite faire un tri de données qui m'arrivent d'un compte postal.
Malheureusement c'est assez compliqué.
je reçois les données ainsi
Versement postal Krauss Fabian (première cellule)
Rte des vignes 23 1806 St-Legier-Chiesaz Livre Pcac Taxes postales pour versements CHF 1.50 deuxième cellule)
et j'aimerai
Krauss Fabian
Rte des vignes 23
1806 St-Legier-Chiesaz
en fait la seule constante pour séparer la rue(ou la rte) du lieu est le numéro postal qui est toujours composé de 4 chiffres.
Je vous remercie de vos interventions et vous souhaite une belle journée
Bonjour patore,
Je t'apporte une solution partielle car il me manque des précisions. Regarde et dis-moi ce que tu en penses.
- Ouvrir le fichier ".csv" via Excel
- Ajouter un module dans l'éditeur VBA
- Faire un copier-coller de la macro suivante :
Sub Analyse()
Dim L1 As Currency, L As Currency, LigneMax As Currency, LSol As Currency
Dim PosCP As Currency, Chif As Currency, CTR As Byte
LSol = -2
'Ajout d'un nouvel onglet
'------------------------
Sheets.Add
Sheets(1).Name = "Solution"
Sheets("Solution").Select
Sheets("Solution").Move After:=Sheets(2)
Sheets("Données").Select
Range("A1").Select
'Calcul de la ligne la plus élevée de la feuille
'-----------------------------------------------
For L = 1 To 65536
If Sheets("Données").Cells(L, 2) = "" Then LigneMax = L - 1: Exit For
Next L
'Nom du client
'-------------
For L = 2 To LigneMax Step 2
If Left(Sheets("Données").Cells(L, 2), 6) = "Crédit" Then
LSol = LSol + 3
Sheets("Solution").Cells(LSol, 1) = Mid(Sheets("Données").Cells(L, 2), 8, 300)
End If
If Left(Sheets("Données").Cells(L, 2), 16) = "Versement postal" Then
LSol = LSol + 3
Sheets("Solution").Cells(LSol, 1) = Mid(Sheets("Données").Cells(L, 2), 18, 300)
End If
If Left(Sheets("Données").Cells(L, 2), 6) <> "Crédit" And Left(Sheets("Données").Cells(L, 2), 16) <> "Versement postal" Then
LSol = LSol + 3
Sheets("Solution").Cells(LSol, 1) = "*******************"
End If
Next L
'Mise en place de l'adresse
'--------------------------
LSol = -1
For L = 3 To LigneMax Step 2
PosCP = 0
For Chif = 1 To Len(Sheets("Données").Cells(L, 2))
If IsNumeric(Mid(Sheets("Données").Cells(L, 2), Chif, 1)) Then
CTR = CTR + 1
If CTR = 4 Then
PosCP = Chif - 3
CTR = 0
LSol = LSol + 3
Sheets("Solution").Cells(LSol, 1) = Left(Sheets("Données").Cells(L, 2), PosCP - 2)
Sheets("Solution").Cells(LSol + 1, 1) = Mid(Sheets("Données").Cells(L, 2), PosCP, 300)
Exit For
End If
If CTR <= 3 And Not IsNumeric(Mid(Sheets("Données").Cells(L, 2), Chif + 1, 1)) Then
CTR = 0
End If
End If
Next Chif
Next L
'Présentation de l'analyse
'-------------------------
Sheets("Solution").Select
Columns("A:A").EntireColumn.AutoFit
Range("A1").Select
MsgBox "Enregistrer le résultat en prenant le type de fichier : CLASSEUR MICROSOFT OFFICE EXCEL"
End SubQuestions
- Devant les prénom et nom de chaque personne, peut-il y avoir d'autres libellés que "Crédit" ou "Versement postal" ? NB : ma macro met des ************* dans le nom quand un autre libellé apparaît.
- Peut-il exister un nombre de 4 chiffres ou plus avant le code postal au risque de l'interpréter comme un code postal ?
- Comment arrêter l'adresse ? A-t-on toujours "Livre Pcac" dans chaque adresse juste derrière la ville ?