Generer un fichier plat (txt) à partir d'un document Excel
Bonjour à tous,
j'aimerai générer de manier automatique un fichier plat à partir d'une feuille excel contenant plusieurs colonnes.
mon fichier plat doit avoir la structure suivante:
1= |ENTETE|
2= information des colonnes |A|B|C|D|....|R| et |Y|Z|AA|AB|AC| de la ligne 1
3= information des colonnes |S|T|U|V|W|X| de la ligne 1
2= information des colonnes |A|B|C|D|....|R| et |Y|Z|AA|AB|AC| de la ligne 2
3= information des colonnes |S|T|U|V|W|X| de la ligne 2
5= |numéro du fichier|nombre de ligne ou enregistrement
merci pour votre aide svp.
pour faire simple ci dessous un fichier contenant 05 lignes/enregistrements et 06 colonnes
NUM_LIGNE IDENTIFINAT NOM PRENOM SEXE NATIONALITE RACE
1 111 ALI JEAN M GABONAIS NOIRE
2 222 JET LI M CHINOIS JAUNE
3 333 BIG NOTOR M AMERICAINE NOIRE
4 444 APACHE TARR F INDIEN ROUGE
5 555 JEN TRIXX F SUISSE BLANCE
ci dessous le résultat qu'on devrait avoir dans le fichier texte à générer
1|FICHIER NUM1|
2|111|ALI|JEAN|M
3|GABONAIS|NOIRE|
2|222|JET|LI|M
3|CHINOIS|JAUNE|
2|333|BIG|NOTOR|M
3|AMERICAINE|NOIRE|
2|444|APACHE|TARR|F
3|INDIEN|ROUGE|
2|555|JEN|TRIXX|F
3|SUISSE|BLANCHE|
5|FICHIER NUM1|5
je joins le fichier excel de depart et le fichier texte d'arrivé.
je n'arrive pas à rediger le bon code vba.
Sub TestCreationFichierTxt()
Dim MesDonnees()
Dim Chemin As String, Ligne As String, ColB As String, ColBInit As String
Dim num As Integer
Dim i As Long, j As Long, DernLigne As Long
num = FreeFile
With Sheets("Feuil1") ' A ADAPTER le nom de la feuille contenant les données
'A ADAPTER au cas ou la colonne A ne serait pas la plus "longue"
DernLigne = .Range("A" & Rows.Count).End(xlUp).Row
'A ADAPTER ici ne traite que les colonnes de A à E
MesDonnees = .Range("A1:AC" & DernLigne).Value
End With
'A ADAPTER : chemin d'accès complet pour le stockage du fichier txt
Chemin = "C:\Users\a_akayalaye\Desktop"
'A ADAPTER le nom du fichier txt à créer
Open Chemin & "\MonFichierTexte.txt" For Output As #num
'Boucle sur la liste des mots
For i = LBound(MesDonnees, 1) To UBound(MesDonnees, 1)
For j = LBound(MesDonnees, 2) To UBound(MesDonnees, 2)
If j = LBound(MesDonnees, 2) Then
Ligne = MesDonnees(i, j) & " |"
Else
Ligne = Ligne & MesDonnees(i, j) & " |"
End If
Next j
'Ici on traite le souci de la ligne d'entêtes...
If i = LBound(MesDonnees, 1) Then
Ligne = Left(Ligne, Len(Ligne) - 4)
ColBInit = Split(Ligne, " |")(1)
ColB = ColBInit
Do While Len(ColB) < 8
ColB = "0" & ColB
Loop
Ligne = Replace(Ligne, ColBInit, ColB)
End If
'Ecrit dans le fichier texte ligne par ligne
Print #1, Ligne
Ligne = ""
Next i
'Fermeture
Close #num
End Sub
merci de m'aider svp.
bonjour,
essaie ceci
Sub TestCreationFichierTxt()
Dim MesDonnees()
Dim Chemin As String, Ligne As String, ColB As String, ColBInit As String
Dim num As Integer
Dim i As Long, j As Long, DernLigne As Long
num = FreeFile
With Sheets("Feuil1")
DernLigne = .Range("A" & Rows.Count).End(xlUp).Row
MesDonnees = .Range("A1:AC" & DernLigne).Value
End With
Chemin = "C:\Users\eric\Downloads"
Open Chemin & "\MonFichierTexte.txt" For Output As #num
'on écrit la première ligne
Ligne = "1|0000000001|CM|10001|01|" & Format(Date, "ddmmyyyy") & "|"
Print #1, Ligne
'Boucle sur la liste des mots
For i = LBound(MesDonnees, 1) To UBound(MesDonnees, 1)
lcol = "0102030405060708091011121314151617182526272829"
Ligne = "2|"
For j = 1 To Len(lcol) Step 2
Ligne = Ligne & Trim(MesDonnees(i, Mid(lcol, j, 2))) & " |"
Next j
Print #num, Ligne
lcol = "192021222324"
Ligne = "3|"
For j = 1 To Len(lcol) Step 2
Ligne = Ligne & Trim(MesDonnees(i, Mid(lcol, j, 2))) & " |"
Next j
Print #1, Ligne
Ligne = ""
Next i
'on écrit la dernière ligne
Print #num, "5|0000000001|" & DernLigne
'Fermeture
Close #num
End Sub
Bonjour H2SO4,
merci pour ton aide, j'ai effectivement le résultat attendu.