Sub Macro1()
' début déclaration de variables
Dim dossier As String, fichier As String
Dim ligne1 As String, ligne2 As String
Dim compteur As Integer, J As Integer
' fin déclaration de variables
' ThisWorkbook.Path & "\" retourne le nom du chemin du dossier dans lequel
' se trouve le fichier texte et le fichier Excel contenant la macro
dossier = ThisWorkbook.Path & "\"
' On ajoute le nom du fichier au chemin pour avoir
' l'emplacement complet du fichier sur le disque.
fichier = dossier & "test.txt"
' On ouvre ce fichier en lecture (For Input)
' Pour écrire dans un fichier texte on aurait utilisé For Output
Open fichier For Input As #1
' On lit les 3 premières lignes du fichier texte sans les traiter
' elles correspondent aux lignes des titres
For J = 1 To 3
Input #1, ligne2
Next J
' On lit la 1ère ligne des données du fichier texte et on la traite
Input #1, ligne2
' on va écrire la 1ère ligne des données sur la ligne 3
' parce qu'on se réserve les 2 premières pour les titres
Call Extraction(ligne2, 3)
' On cherche la dernière ligne non vide du fichier texte
While Not EOF(1)
' EOF(1) signifie End Of File (fin de fichier)du registre #1
' (celui qu'on a ouvert pour lire le fichier texte)
Input #1, ligne1
' Trim permet de supprimer des espaces vides de début et de fin de chaîne
' si ligne1 vaut " AZERTY " Trim(ligne1) vaut "AZERTY"
If Trim(ligne1) <> "" Then ligne2 = Trim(ligne1)
Wend
' On a lu toutes les lignes du fichier texte et mémorisé
' dans ligne2 la dernière ligne non vide du fichier
' on va écrire la dernière ligne des données sur la ligne 4
Call Extraction(ligne2, 4)
' On referme le fichier texte qu'on avait ouvert
Close #1
End Sub
Private Sub Extraction(ligne2, numligne)
Dim ligne1 As String
Dim J As Integer
Dim Tableau As Variant
' On met en place un séparateur fixe
' Le point-virgule sert à séparer les colonnes dans un fichier CSV
' On commence par les chaînes de 5 espaces et on termine par les chaînes de 1 espace
For J = 5 To 1 Step -1
' on remplace les chaînes de 5,4,3,2 et 1 espace par des point-virgules
' Le point-virgule sert à séparer les colonnes dans un fichier CSV
ligne2 = Replace(ligne2, Space(J), ";")
Next J
' On éclate dans un tableau la chaîne qui ne contient
' plus que des point-virgules comme séparateurs
Tableau = Split(ligne2, ";")
' On reconstitue le tableau dans le fichier Excel
' ATTENTION : le premier index du tableau vaut 0 et non pas 1
For J = 0 To UBound(Tableau)
Cells(numligne, J + 1) = Tableau(J)
Next J
' On vide le tableau, son contenu est dans le tableur
Erase Tableau
End Sub