Trier des données arrivant sous notepad

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

30forum-excel-tableau.csv (577.00 Octets)

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 Sub

Questions

  • 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 ?
Rechercher des sujets similaires à "trier donnees arrivant notepad"