generer un fichier plat (txt) à partir d'un document excel Le sujet est résolu

Y compris Power BI, Power Query et toute autre question en lien avec Excel
a
atitila
Jeune membre
Jeune membre
Messages : 35
Inscrit le : 17 octobre 2015
Version d'Excel : 2010

Message par atitila » 17 octobre 2015, 15:57

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.
ati_test1_text.txt
exemple structure résultat du fichier texte
(646 Octets) Téléchargé 40 fois
ati_test1.xlsx
exemple du fichier excel d'origine
(10.07 Kio) Téléchargé 37 fois
h
h2so4
Passionné d'Excel
Passionné d'Excel
Messages : 8'409
Appréciations reçues : 277
Inscrit le : 16 juin 2013
Version d'Excel : 2013 UK Windows 10

Message par h2so4 » 17 octobre 2015, 17:22

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

a
atitila
Jeune membre
Jeune membre
Messages : 35
Inscrit le : 17 octobre 2015
Version d'Excel : 2010

Message par atitila » 19 octobre 2015, 08:30

Bonjour H2SO4,
merci pour ton aide, j'ai effectivement le résultat attendu. :D :D :D :idea: :idea:
Répondre Sujet précédentSujet suivant
  • Sujets similaires
    Réponses
    Vues
    Dernier message