Mettre en place un macro qui va me generer un fichier txt
Résolu
AHI_250
Messages postés
25
Statut
Membre
-
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
- Creer un fichier .bat - Guide
- Fichier epub - Guide
- Comment créer un groupe whatsapp - Guide
- Fichier rar - 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.
'traitement colonne B 'ICI on stocke la valeur comprise entre les deux premiers |, donc la colonne B 'cette variable ColBInit sert à la fonction Replace. En effet, il faut savoir quoi remplacer... ColBInit = Split(Entete, " |")(1) 'ColB est la variable dont nous allons modifier la valeur pour obtenir le résultat voulu. 'Au départ ColB est égal à ColBInit ColB = ColBInit 'On veut 8 caractères dans la colonne B, donc on boucle tant que notre variable n'a pas 8 caractères Do While Len(ColB) < 8 'on ajoute des 0 avant ColB = "0" & ColB Loop 'on remplace, dans notre entête, la valeur initiale : ColBInit par ColB. Entete = Replace(Entete, ColBInit, ColB)Ce n'est peut être pas la meilleure façon de procéder.
Voyons celle-ci :
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