Mettre en place un macro qui va me generer un fichier txt
Résolu
AHI_250
Messages postés
25
Date d'inscription
Statut
Membre
Dernière intervention
-
KARROUMAYAGHALI -
KARROUMAYAGHALI -
Bonjour ALL,
je suis vraiment nouveau dans la programmation, je suis à la recherche d'une procédure, un document ou une explication détaillé s'il vous plait qui va me permettre de mettre en place un macro dans un fichier Excel pour générer un fichier plat (txt) pour éviter la manipulation des données. j'aurai besoin d'un en tête (avec des informations délimitées par des |) dans le fichier et ensuite des lignes avec plusieurs colonnes délimité par des " |" .
merci d'avance.
CDT,
je suis vraiment nouveau dans la programmation, je suis à la recherche d'une procédure, un document ou une explication détaillé s'il vous plait qui va me permettre de mettre en place un macro dans un fichier Excel pour générer un fichier plat (txt) pour éviter la manipulation des données. j'aurai besoin d'un en tête (avec des informations délimitées par des |) dans le fichier et ensuite des lignes avec plusieurs colonnes délimité par des " |" .
merci d'avance.
CDT,
A voir également:
- Vba créer fichier texte
- Fichier bin - Guide
- Fichier epub - Guide
- Creer un fichier .bat - Guide
- Fichier rar - Guide
- Comment créer un groupe whatsapp - Guide
27 réponses
Bonjour Franck,
Depuis hier je cherchais à comprendre la fonction de traitement de la ligne d'entête. j'ai pas vraiment avancé dessus je vous prie de me comprendre c'est mes premiers pas dans la programmation.
Avec ce code
voilà le résultat que j'obtiens
1 |80|450|23451765432876| au lieux de
1 |0000080|000000045000|23451765432876
Alors stp est ce que tu peux expliquer les informations d'une colonne pour que je puisse comprendre mieux? Aussi, j'aimerais s'il te plaît savoir
ColXInit=?
Len(ColX)=?
Merci infiniment.
CDT
Depuis hier je cherchais à comprendre la fonction de traitement de la ligne d'entête. j'ai pas vraiment avancé dessus je vous prie de me comprendre c'est mes premiers pas dans la programmation.
Avec ce code
Function Format_Entete(Entete As String) As String Dim ColB As String, ColBInit As String Dim ColC As String, ColCInit As String Dim ColD As String, ColDInit As String Entete = Left(Entete, Len(Entete) - 4) 'traitement colonne B ColBInit = Split(Entete, " |")(1) ColB = ColBInit Do While Len(ColB) < 8 ColB = "0" & ColB Loop Entete = Replace(Entete, ColBInit, ColB) 'traitement colonne C ColCInit = Split(Entete, "|")(2) & "00" 'ici on ajoute les deux zéros après ColC = ColCInit Do While Len(ColC) < 12 ColC = "0" & ColC Loop Entete = Replace(Entete, ColCInit, ColC) 'Placer ici le traitement de la colonne D ColDInit = Split(Entete, "|")(3) ColD = ColDInit Do While Len(ColD) < 14 'ColB = "0" & ColB Loop Entete = Replace(Entete, ColDInit, ColD) Format_Entete = Entete End Function
voilà le résultat que j'obtiens
1 |80|450|23451765432876| au lieux de
1 |0000080|000000045000|23451765432876
Alors stp est ce que tu peux expliquer les informations d'une colonne pour que je puisse comprendre mieux? Aussi, j'aimerais s'il te plaît savoir
ColXInit=?
Len(ColX)=?
Merci infiniment.
CDT
Bonjour FRANCK,
Honnêtement je te remercie pour l'explication je comprends de plus en plus mais je rencontre des problèmes j'ai l'impression la fonction de traitement de la ligne d'entête n'est pas pris en compte parce que avec ce code j'ai un fichier txt comme ceci 1 |30|500|201406181 je ne sais pas si j'ai oublié quelque chose d'important.
CDT
Honnêtement je te remercie pour l'explication je comprends de plus en plus mais je rencontre des problèmes j'ai l'impression la fonction de traitement de la ligne d'entête n'est pas pris en compte parce que avec ce code j'ai un fichier txt comme ceci 1 |30|500|201406181 je ne sais pas si j'ai oublié quelque chose d'important.
Sub Main_CreationFichierTxt() Dim MesDonnees() Dim Chemin As String, Ligne 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("D" & Rows.Count).End(xlUp).Row 'A ADAPTER ici ne traite que les colonnes de A à E MesDonnees = .Range("A1:D" & DernLigne).Value End With 'A ADAPTER : chemin d'accès complet pour le stockage du fichier txt Chemin = "C:\Users\MOI-MEME\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 appelle la fonction de traitement d'entêtes... If i = LBound(MesDonnees, 1) Then Format_Entete Ligne 'Ecrit dans le fichier texte ligne par ligne Print #1, Ligne Ligne = "" Next i 'Fermeture Close #num End Sub Function Format_Entete(Entete As String) As String Dim ColA As String, ColB As String, ColC As String, ColD As String Entete = Left(Entete, Len(Entete) - 4) ColA = Split(Entete, "|")(0) 'placer ici le traitement pour la colonne A 'traitement colonne B ColB = Split(Entete, "|")(1) Do While Len(ColB) < 8 ColB = "0" & ColB Loop 'traitement colonne C 'dans la colonne C, on veut d'abord ajouter deux 0 à la fin, dont acte : ColC = Split(Entete, "|")(2) & "00" Do While Len(ColC) < 12 ColC = "0" & ColC Loop 'traitement colonne D ColD = Split(Entete, "|")(3) Do While Len(ColD) < 14 ColD = "0" & ColD Loop 'On formate la chaine de caractères de "sortie" Format_Entete = ColA & " |" & ColB & "|" & ColC & "|" & ColD End Function
CDT
S'il te plaît peut être qu'il faudra essayer le code voir je viens de faire ce que tu as demandé j'ai le même résultat j'ai même essayer sur le laptop d'un collègue on a le même résultat. je sais pas dans ce code on n'a pas utilisé de variable du genre "ColBInit " est ce que c'est pas ce qui fait que malgré ce code j'ai pas les "0" avant ColB.
'traitement colonne B
ColB = Split(Entete, "|")(1)
Do While Len(ColB) < 8
ColB = "0" & ColB
Loop
CDT,
'traitement colonne B
ColB = Split(Entete, "|")(1)
Do While Len(ColB) < 8
ColB = "0" & ColB
Loop
CDT,
je comprends pas bien exemple d'entête avant/après mais bon voilà ce que j'ai avec mon code 1 |30|500|20140618102 or il était sensé me donner
1 |00000030|000000050000|20140618102830
ColA sur 3 positions
ColB sur 8 positions
ColC sur 12 positions
ColD sur 14 positions du genre la date (DDMMYYYYHHMMSS)
CDT,
1 |00000030|000000050000|20140618102830
ColA sur 3 positions
ColB sur 8 positions
ColC sur 12 positions
ColD sur 14 positions du genre la date (DDMMYYYYHHMMSS)
CDT,
Sub Main_CreationFichierTxt() Dim MesDonnees() Dim Chemin As String, Ligne 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("D" & Rows.Count).End(xlUp).Row 'A ADAPTER ici ne traite que les colonnes de A à E MesDonnees = .Range("A1:D" & DernLigne).Value End With 'A ADAPTER : chemin d'accès complet pour le stockage du fichier txt Chemin = "C:\Users\MOI-MEME\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 Ligne = Left(Ligne, Len(Ligne) - 2) 'Ici on appelle la fonction de traitement d'entêtes... If i = LBound(MesDonnees, 1) Then Format_Entete Ligne 'Ecrit dans le fichier texte ligne par ligne Print #1, Ligne Ligne = "" Next i 'Fermeture Close #num End Sub Function Format_Entete(Entete As String) As String Dim ColA As String, ColB As String, ColC As String, ColD As String ColA = Split(Entete, " |")(0) Do While Len(ColA) < 3 ColA = " " & ColA Loop 'traitement colonne B ColB = Split(Entete, " |")(1) Do While Len(ColB) < 8 ColB = "0" & ColB Loop 'traitement colonne C 'dans la colonne C, on veut d'abord ajouter deux 0 à la fin, dont acte : ColC = Split(Entete, " |")(2) & "00" Do While Len(ColC) < 12 ColC = "0" & ColC Loop 'traitement colonne D ColD = Split(Entete, " |")(3) Do While Len(ColD) < 14 ColD = "0" & ColD Loop 'On formate la chaine de caractères de "sortie" Format_Entete = ColA & " |" & ColB & " |" & ColC & " |" & ColD End Function
De plus, j'ai l'impression que selon les fichiers traités ce ne doit pas être la même chose.....
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Bonsoir Pijaku,
Tu peux s'il te plaît testé le code ?il ne marche pas chez moi.
CDT,
Tu peux s'il te plaît testé le code ?il ne marche pas chez moi.
CDT,
Salut,
Je l'ai testé, il fonctionne exactement comme tu me l'avais demandé.
Colonne A : 3 caractères : exemple : deux espaces et un 1
Colonne B : 8 caractères : des zéros puis l'ancien champs de la colonne B
Colonne C : 12 caractères : des zéros puis l'ancien champs de la colonne C puis 2 zéros
Colonne D : 14 caractères.
Tu as tout pour réussir :
- le code,
- les explications,
- des liens de cours sur la manipulation des chaines de caractères.
Je ne peux donc rien faire de plus pour toi.
Pour moi ce sujet est clos.
Cordialement,
Pijaku
Je l'ai testé, il fonctionne exactement comme tu me l'avais demandé.
Colonne A : 3 caractères : exemple : deux espaces et un 1
Colonne B : 8 caractères : des zéros puis l'ancien champs de la colonne B
Colonne C : 12 caractères : des zéros puis l'ancien champs de la colonne C puis 2 zéros
Colonne D : 14 caractères.
Tu as tout pour réussir :
- le code,
- les explications,
- des liens de cours sur la manipulation des chaines de caractères.
Je ne peux donc rien faire de plus pour toi.
Pour moi ce sujet est clos.
Cordialement,
Pijaku
Toutes ces fonctions que j'utilise (Len, Left, Replace, Split), et bien d'autres, sont expliquées ICI.
Ce n'est peut être pas la meilleure façon de procéder.
Voyons celle-ci :