Mettre en place un macro qui va me generer un fichier txt
Résolu/Fermé
AHI_250
Messages postés
25
Date d'inscription
mercredi 11 juin 2014
Statut
Membre
Dernière intervention
18 juin 2014
-
11 juin 2014 à 19:27
KARROUMAYAGHALI - 26 janv. 2023 à 12:25
KARROUMAYAGHALI - 26 janv. 2023 à 12:25
A voir également:
- Vba créer fichier texte
- Fichier rar - Guide
- Créer un compte gmail - Guide
- Fichier host - Guide
- Créer un compte google - Guide
- Fichier iso - Guide
27 réponses
AHI_250
Messages postés
25
Date d'inscription
mercredi 11 juin 2014
Statut
Membre
Dernière intervention
18 juin 2014
Modifié par pijaku le 18/06/2014 à 07:32
Modifié par pijaku le 18/06/2014 à 07:32
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
AHI_250
Messages postés
25
Date d'inscription
mercredi 11 juin 2014
Statut
Membre
Dernière intervention
18 juin 2014
Modifié par pijaku le 18/06/2014 à 13:08
Modifié par pijaku le 18/06/2014 à 13:08
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
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 745
18 juin 2014 à 13:10
18 juin 2014 à 13:10
Supprime ton fichier texte, enregistre ton classeur excel, ferme tout et relance la macro.
AHI_250
Messages postés
25
Date d'inscription
mercredi 11 juin 2014
Statut
Membre
Dernière intervention
18 juin 2014
18 juin 2014 à 14:48
18 juin 2014 à 14:48
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,
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 745
18 juin 2014 à 14:55
18 juin 2014 à 14:55
Donne moi un exemple concret d'entête avant/après
AHI_250
Messages postés
25
Date d'inscription
mercredi 11 juin 2014
Statut
Membre
Dernière intervention
18 juin 2014
18 juin 2014 à 15:41
18 juin 2014 à 15:41
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,
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 745
Modifié par pijaku le 18/06/2014 à 15:43
Modifié par pijaku le 18/06/2014 à 15:43
Ce que j'entendais pas là :
avant (sur Excel) j'ai :
col A : 1
Col B : 30
Col C : 500
Col D : 2014618102830
Je veux obtenir, dans mon fichier txt :
1 |00000030|000000050000|20140618102830
avant (sur Excel) j'ai :
col A : 1
Col B : 30
Col C : 500
Col D : 2014618102830
Je veux obtenir, dans mon fichier txt :
1 |00000030|000000050000|20140618102830
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 745
18 juin 2014 à 15:50
18 juin 2014 à 15:50
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
AHI_250
Messages postés
25
Date d'inscription
mercredi 11 juin 2014
Statut
Membre
Dernière intervention
18 juin 2014
18 juin 2014 à 15:51
18 juin 2014 à 15:51
HA ok désolé c'est exactement ça.
CDT,
CDT,
AHI_250
Messages postés
25
Date d'inscription
mercredi 11 juin 2014
Statut
Membre
Dernière intervention
18 juin 2014
18 juin 2014 à 17:00
18 juin 2014 à 17:00
S'est bizard mais il ne fonctionne pas j'ai toujours
1 |30|500|201461810283 avec le code
1 |30|500|201461810283 avec le code
AHI_250
Messages postés
25
Date d'inscription
mercredi 11 juin 2014
Statut
Membre
Dernière intervention
18 juin 2014
18 juin 2014 à 19:48
18 juin 2014 à 19:48
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,
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 745
19 juin 2014 à 07:35
19 juin 2014 à 07:35
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
18 juin 2014 à 07:49
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 :