Sub test()
Dim fichierCsv As Object, fichierTexte As Object, myFso As Object
Dim tableauChaines() As String, ligneTexte As String, longueurChamps, i As Integer, tmpStr As String
'définir la longueur imposée de chaque champ
longueurChamps = Array(5, 1, 15, 20, 3, 14, 20, 8, 8, 1, 15, 3, 9, 12, 8, 8, 10, 3, 15, 25, 35)
Set myFso = CreateObject("Scripting.FileSystemObject")
'adapter les chemin des fichiers
Set fichierCsv = myFso.OpenTextFile("E:\aMiki\XLS\test\factures.csv", 1)
Set fichierTexte = myFso.CreateTextFile("E:\aMiki\XLS\test\resultat.txt", True)
'ne pas traiter la première ligne du fichier csv
fichierCsv.ReadLine
'écrire la première ligne du fichier texte
fichierTexte.WriteLine "ENTETE"
'boucler sur toutes les lignes suivantes du fichier csv
While Not fichierCsv.AtEndOfStream
ligneTexte = ""
'récupérer dans un tableau les éléments de la ligne
tableauChaines = Split(fichierCsv.ReadLine, ";")
'boucler sur chaque éléments
For i = LBound(tableauChaines) To UBound(tableauChaines)
'si l'élément est trop long
If Len(tableauChaines(i)) >= longueurChamps(i) Then
'le tronquer à la longueur voulue
tmpStr = Left(tableauChaines(i), longueurChamps(i))
'sinon
Else
' si on est dans une des 2 colonnes "montant"
If i = 10 Or i = 18 Then
'enlever le signe - et la virgule
tmpStr = Replace(Replace(tableauChaines(i), "-", ""), ",", "")
'compléter avec des 0 (avant)
tmpStr = String(longueurChamps(i) - Len(tmpStr), "0") & tmpStr
'sinon
Else
'compléter avec des espaces (après)
tmpStr = tableauChaines(i) & String(longueurChamps(i) - Len(tableauChaines(i)), " ")
End If
End If
'ajouter l'élément à la ligne du fichier texte
ligneTexte = ligneTexte & tmpStr
Next i
'écrire la ligne dans le fichier texte
fichierTexte.WriteLine ligneTexte
Wend
'fermer les fichiers et détruire les objets
fichierCsv.Close: fichierTexte.Close
Set fichierCsv = Nothing: Set fichierTexte = Nothing: Set myFso = Nothing
End Sub