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 Messages postés 10 Date d'inscription Statut Membre Dernière intervention -
KARROUMAYAGHALI Messages postés 10 Date d'inscription Statut Membre Dernière intervention -
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
Pour tester...
Je ne l'ai pas essayé et l'ai écris ici, donc il y a peut être quelques erreurs...
A ADAPTER : cf commentaires de la macro
Je ne l'ai pas essayé et l'ai écris ici, donc il y a peut être quelques erreurs...
A ADAPTER : cf commentaires de la macro
Sub TestCreationFichierTxt() 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("A" & Rows.Count).End(xlUp).Row 'A ADAPTER ici ne traite que les colonnes de A à E MesDonnees = .Range("A1:E" & DernLigne).Value End With 'A ADAPTER : chemin d'accès complet pour le stockage du fichier txt Chemin = "C:\Users\MoiMeme\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 'Ecrit dans le fichier texte ligne par ligne Print #1, Ligne Ligne = "" Next i 'Fermeture Close #num End Sub
Bonjour Franck,
En fait, le serveur qui est dédié pour traité le fichier attend un fichier .txt merci si tu as un chemin de me le dire s'il te plaît.
CDT,
AHI
En fait, le serveur qui est dédié pour traité le fichier attend un fichier .txt merci si tu as un chemin de me le dire s'il te plaît.
CDT,
AHI
Merci infiniment Franck j'ai adapté le fichier .txt est bien crée mon souci actuellement c'est que le nombre de colonne de l'entête est différent du nombre de colonne des autres lignes, entête sur 4 colonnes et le reste des lignes sur 6 colonnes et les colonnes sont définies sur une longueur bien précise par exemple la date c'est 14 et le matricule sur 5 merci s'il te plaît de m'indiqué comment ajouter cela au code du macro.
Merci beaucoup.
CDT,
Merci beaucoup.
CDT,
Pour les entêtes, inscris en une pour les colonnes E et F...
Et n'oublies pas d'adapter la macro sur cette ligne :
Attention toutefois, en fonction de la résolution graphique des polices d'écritures, de la taille des lettres elles mêmes, ton fichier txt n'aura jamais la même "tronche" qu'un classeur Excel avec des colonnes bien "carrées"...
regarde ici :
14 m
mmmmmmmmmmmmmm
14 i
iiiiiiiiiiiiii
Comprends tu?
Et n'oublies pas d'adapter la macro sur cette ligne :
MesDonnees = .Range("A1:E" & DernLigne).Valuequi devient :
MesDonnees = .Range("A1:F" & DernLigne).ValuePourrais tu me donner le nombre de caractère par colonne, du style : col A : 5 Car etc...
Attention toutefois, en fonction de la résolution graphique des polices d'écritures, de la taille des lettres elles mêmes, ton fichier txt n'aura jamais la même "tronche" qu'un classeur Excel avec des colonnes bien "carrées"...
regarde ici :
14 m
mmmmmmmmmmmmmm
14 i
iiiiiiiiiiiiii
Comprends tu?
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Pour l'entête:
col A:3 car
Col B:8 mais si je mets 4 car par exemple dans le fichier Excel que le reste soit complété par des 00 dans le fichier .txt
col C:12
col D:14
pour les autres lignes
col A:5 car
Col B:11
col C:3
col D:12
col C:20
col E:20
col F:1
pour MesDonnees = .Range("A1:E" & DernLigne).Value j'avais déjà adapté cela
MesDonnees = .Range("A1:G" & DernLigne).Value
CDT,
col A:3 car
Col B:8 mais si je mets 4 car par exemple dans le fichier Excel que le reste soit complété par des 00 dans le fichier .txt
col C:12
col D:14
pour les autres lignes
col A:5 car
Col B:11
col C:3
col D:12
col C:20
col E:20
col F:1
pour MesDonnees = .Range("A1:E" & DernLigne).Value j'avais déjà adapté cela
MesDonnees = .Range("A1:G" & DernLigne).Value
CDT,
En fait le format de fichier de sortie c'est à dire le .txt a deux partie :
-une entête
-et des enregistrements
et donc
Pour l'entête:
col A:3 car
Col B:8
col C:12
col D:14
pour les autres lignes
col A:5 car
Col B:11
col C:3
col D:12
col C:20
col E:20
col F:1
je sais pas si je me fais comprendre.
par exemple:
1 |00000030|000204583100|05052014093526
01081|08705152436|674|000007928500|AHI |MANGA
01031|09977967643|952|000004270000|ZOOZOUU |JOJOUA
CDT,
-une entête
-et des enregistrements
et donc
Pour l'entête:
col A:3 car
Col B:8
col C:12
col D:14
pour les autres lignes
col A:5 car
Col B:11
col C:3
col D:12
col C:20
col E:20
col F:1
je sais pas si je me fais comprendre.
par exemple:
1 |00000030|000204583100|05052014093526
01081|08705152436|674|000007928500|AHI |MANGA
01031|09977967643|952|000004270000|ZOOZOUU |JOJOUA
CDT,
Je crois que je vais te posé mes préoccupations étape par étape s'il te plaît.
Pour l'entête avec le code que tu ma donné quand je génère mon fichier .txt vu que c'est 4 colonnes j'ai deux "|" qui continu parce que dans le code sa été défini pour 6 colonnes comment faire pour régler cela?
CDT,
Pour l'entête avec le code que tu ma donné quand je génère mon fichier .txt vu que c'est 4 colonnes j'ai deux "|" qui continu parce que dans le code sa été défini pour 6 colonnes comment faire pour régler cela?
CDT,
Oui, faisons comme ça.
Sub TestCreationFichierTxt() 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("A" & Rows.Count).End(xlUp).Row 'A ADAPTER ici ne traite que les colonnes de A à E MesDonnees = .Range("A1:E" & DernLigne).Value End With 'A ADAPTER : chemin d'accès complet pour le stockage du fichier txt Chemin = "C:\Users\MoiMeme\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... i = LBound(MesDonnees, 1) Then Ligne = Left(Ligne, Len(Ligne) - 4) 'Ecrit dans le fichier texte ligne par ligne Print #1, Ligne Ligne = "" Next i 'Fermeture Close #num End Sub
Voilà ce que j'ai dans le fichier généré avec le nouveau code
1 |30 |204583100 |05052014093526 | |
je veux pas avoir les deux dernies "|"
CDT,
1 |30 |204583100 |05052014093526 | |
je veux pas avoir les deux dernies "|"
CDT,
Avec ce code ?
J'obtiens bien une ligne d'entête comme ceci :
1 |30 |204583100 |05052014093526 |
Pour obtenir :
1 |30 |204583100 |05052014093526
il faut remplacer :
Sub TestCreationFichierTxt() 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("A" & Rows.Count).End(xlUp).Row 'A ADAPTER ici ne traite que les colonnes de A à E MesDonnees = .Range("A1:E" & DernLigne).Value End With 'A ADAPTER : chemin d'accès complet pour le stockage du fichier txt Chemin = "C:\Users\MoiMeme\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) 'Ecrit dans le fichier texte ligne par ligne Print #1, Ligne Ligne = "" Next i 'Fermeture Close #num End Sub
J'obtiens bien une ligne d'entête comme ceci :
1 |30 |204583100 |05052014093526 |
Pour obtenir :
1 |30 |204583100 |05052014093526
il faut remplacer :
If i = LBound(MesDonnees, 1) Then Ligne = Left(Ligne, Len(Ligne) - 4)par :
If i = LBound(MesDonnees, 1) Then Ligne = Left(Ligne, Len(Ligne) - 6)
ok ce problème est réglé merci infiniment concernant le meme entête
j'ai un problème avec les positions en fait
1 |30 |204583100 |05052014093526
la 2èm colonne c'est à dire ou il est mit 30 est sur 8 positions donc je veux avoir dans le fichier .txt
1 |00000030 |204583100 |05052014093526 quand je mets 30 dans le fichier excel ou si je mets 123 dans Excel je veux avoir
dans le .txt 1 |00000123 |204583100 |05052014093526
espérant que je me fais comprendre
CDT,
j'ai un problème avec les positions en fait
1 |30 |204583100 |05052014093526
la 2èm colonne c'est à dire ou il est mit 30 est sur 8 positions donc je veux avoir dans le fichier .txt
1 |00000030 |204583100 |05052014093526 quand je mets 30 dans le fichier excel ou si je mets 123 dans Excel je veux avoir
dans le .txt 1 |00000123 |204583100 |05052014093526
espérant que je me fais comprendre
CDT,
Ok :
La suite.....
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:E" & DernLigne).Value End With 'A ADAPTER : chemin d'accès complet pour le stockage du fichier txt Chemin = "C:\Users\MoiMeme\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
La suite.....
C'est ok merci .
toujours entête
1 |00000030|000000012300|05052014093526
la 1er colonne c'est à dire ou il est mi 1 est sur 3 positions je veux avoir dans le .txt
trois positions pour cette colonne
par exemple:
1 |00000030|000000012300|05052014093526
et pour la 3èm colonne elle est sur 12 positions quand je mets 123 dans excel je veux avoir dans le fichier .txt
1 |00000030|000000012300|05052014093526
CDT,
toujours entête
1 |00000030|000000012300|05052014093526
la 1er colonne c'est à dire ou il est mi 1 est sur 3 positions je veux avoir dans le .txt
trois positions pour cette colonne
par exemple:
1 |00000030|000000012300|05052014093526
et pour la 3èm colonne elle est sur 12 positions quand je mets 123 dans excel je veux avoir dans le fichier .txt
1 |00000030|000000012300|05052014093526
CDT,
Excuse moi pour le retard de ma réponse en fait j'avais déjà fait cette modification avant de t'envoyer ma dernière requête voilà
ColAInit = Split(Ligne, " |")(1)
ColA= ColAInit
Do While Len(ColA) < 3
ColA= " " & ColA
Loop
Ligne = Replace(Ligne, ColAInit, ColA)
cela ne ma rien donné comme réponse .Tu peux voir mon code s'il te plaît?
CDT,
ColAInit = Split(Ligne, " |")(1)
ColA= ColAInit
Do While Len(ColA) < 3
ColA= " " & ColA
Loop
Ligne = Replace(Ligne, ColAInit, ColA)
cela ne ma rien donné comme réponse .Tu peux voir mon code s'il te plaît?
CDT,
La fonction Split (voir l'aide en ligne sur cette fonction)
Supposons Ligne = "Part1 |Part2 |Part 3 |Pat4"
Donc pour ta colonne A utilise
Attention au Replace également.
Comme il s'agit de la partie à gauche de Ligne, il suffit de récupérer la partie à droite du premier " |", donc utilises plutôt :
C'est de la "simple" manipulation de caractères...
Supposons Ligne = "Part1 |Part2 |Part 3 |Pat4"
Split(Ligne, " |")(0)=> nous renvoie Part 1
Split(Ligne, " |")(1)=> nous renvoie Part2
Split(Ligne, " |")(2)=> nous renvoie Part 3
Split(Ligne, " |")(3)=> nous renvoie Pat4
Donc pour ta colonne A utilise
Split(Ligne, " |")(0)
Attention au Replace également.
Ligne = Replace(Ligne, ColAInit, ColA)Si ColAInit = 1, tous les chiffres 1 de Ligne seront remplacés par " 1".
Comme il s'agit de la partie à gauche de Ligne, il suffit de récupérer la partie à droite du premier " |", donc utilises plutôt :
Ligne = ColA & Right(Ligne, Len(Ligne) -3)
C'est de la "simple" manipulation de caractères...
Sub TestCreationFichierTxt()
Dim MesDonnees()
Dim Chemin As String, Ligne As String, colA As String, colAInit 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:G" & 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 traite le souci de la ligne d'entêtes...
If i = LBound(MesDonnees, 1) Then
Ligne = Left(Ligne, Len(Ligne) - 7)
colAInit = Split(Ligne, "|")(1)
colA = colAInit
Do While Len(colA) < 3
ColB = " " & colA
Loop
Ligne = Replace(Ligne, colAInit, colA)
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
voilà tout mon code.
Dim MesDonnees()
Dim Chemin As String, Ligne As String, colA As String, colAInit 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:G" & 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 traite le souci de la ligne d'entêtes...
If i = LBound(MesDonnees, 1) Then
Ligne = Left(Ligne, Len(Ligne) - 7)
colAInit = Split(Ligne, "|")(1)
colA = colAInit
Do While Len(colA) < 3
ColB = " " & colA
Loop
Ligne = Replace(Ligne, colAInit, colA)
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
voilà tout mon code.
Bonsoir ,
j'ai eu des soucis avec Excel j'ai du redémarré ma machine parce qu'il ne fessait que se planté j'ai modifier mon code mais voilà ce que je trouve il m'ajoute deux autres colonnes.
1|00000123|00000123|12062010000123|00000123|1206201
code:
'Ici on traite le souci de la ligne d'entêtes...
If i = LBound(MesDonnees, 1) Then
Ligne = Left(Ligne, Len(Ligne) - 7)
ColBInit = Split(Ligne, "|")(1)
ColB = ColBInit
Do While Len(ColB) < 8
ColB = "0" & ColB
Loop
Ligne = Replace(Ligne, ColBInit, ColB)
End If
If i = LBound(MesDonnees, 1) Then
ColAInit = Split(Ligne, " |")(0)
ColA = ColAInit
Do While Len(ColA) < 3
Loop
Ligne = ColA & Right(Ligne, Len(Ligne) - 3)
End If
CDT,
j'ai eu des soucis avec Excel j'ai du redémarré ma machine parce qu'il ne fessait que se planté j'ai modifier mon code mais voilà ce que je trouve il m'ajoute deux autres colonnes.
1|00000123|00000123|12062010000123|00000123|1206201
code:
'Ici on traite le souci de la ligne d'entêtes...
If i = LBound(MesDonnees, 1) Then
Ligne = Left(Ligne, Len(Ligne) - 7)
ColBInit = Split(Ligne, "|")(1)
ColB = ColBInit
Do While Len(ColB) < 8
ColB = "0" & ColB
Loop
Ligne = Replace(Ligne, ColBInit, ColB)
End If
If i = LBound(MesDonnees, 1) Then
ColAInit = Split(Ligne, " |")(0)
ColA = ColAInit
Do While Len(ColA) < 3
Loop
Ligne = ColA & Right(Ligne, Len(Ligne) - 3)
End If
CDT,
Je sais que je me répète mais je voulais juste préçiser que la 1er colonne est sur 3 position et quand je mets 1 dans Excel je veux avoir dans mon .txt:
1 |Part2|Part3|Part4
CDT,
1 |Part2|Part3|Part4
CDT,
Bonjour FRANCK,
S'il te plaît tu peux m'aider à terminer ma macro je te prie de me répondre j'en n'ai vraiment besoin.
CDT,
S'il te plaît tu peux m'aider à terminer ma macro je te prie de me répondre j'en n'ai vraiment besoin.
CDT,
Bonjour ,
j'ai pu régler le problème de la A colonne mais j'aimerais avoir de l'aide sur la colonne C (elle est sur 12 positions) de sorte à avoir un fichier .txt dont le contenu est comme ce qui suit:
si je mets X dans Excel j'aimerais obtenir dans le .txt 000000000X00 si je mets 450 j'aimerais avoir 000000045000 le code que j'ai me permet d'avoir la valeur dans excel et les autres positions sont accupées par des "0" or moi je veux que deux "0" apres la valeur je vous laisse mon code merci de m'aider à régler cela svp
Sub TestCreationFichierTxt()
Dim MesDonnees()
Dim Chemin As String, Ligne As String, ColB As String, ColBInit As String, ColC As String, ColCInit 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:E" & DernLigne).Value
End With
'A ADAPTER : chemin d'accès complet pour le stockage du fichier txt
Chemin = "C:\Users\moi-même\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) - 7)
ColBInit = Split(Ligne, "|")(1)
ColB = ColBInit
Do While Len(ColB) < 8
ColB = "0" & ColB
Loop
Ligne = Replace(Ligne, ColBInit, ColB)
End If
If i = LBound(MesDonnees, 1) Then
ColCInit = Split(Ligne, "|")(2)
ColC = ColCInit
Do While Len(ColC) < 12
ColC = "0" & ColC & "0"
Loop
Ligne = Replace(Ligne, ColCInit, ColC)
End If
'Ecrit dans le fichier texte ligne par ligne
Print #1, Ligne
Ligne = ""
Next i
'Fermeture
Close #num
End Sub
ce code me donne : A |B|000045000000|
Espérant que je me suis fais comprendre
je reste disponible pour toutes informations complémentaires
CDT
j'ai pu régler le problème de la A colonne mais j'aimerais avoir de l'aide sur la colonne C (elle est sur 12 positions) de sorte à avoir un fichier .txt dont le contenu est comme ce qui suit:
si je mets X dans Excel j'aimerais obtenir dans le .txt 000000000X00 si je mets 450 j'aimerais avoir 000000045000 le code que j'ai me permet d'avoir la valeur dans excel et les autres positions sont accupées par des "0" or moi je veux que deux "0" apres la valeur je vous laisse mon code merci de m'aider à régler cela svp
Sub TestCreationFichierTxt()
Dim MesDonnees()
Dim Chemin As String, Ligne As String, ColB As String, ColBInit As String, ColC As String, ColCInit 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:E" & DernLigne).Value
End With
'A ADAPTER : chemin d'accès complet pour le stockage du fichier txt
Chemin = "C:\Users\moi-même\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) - 7)
ColBInit = Split(Ligne, "|")(1)
ColB = ColBInit
Do While Len(ColB) < 8
ColB = "0" & ColB
Loop
Ligne = Replace(Ligne, ColBInit, ColB)
End If
If i = LBound(MesDonnees, 1) Then
ColCInit = Split(Ligne, "|")(2)
ColC = ColCInit
Do While Len(ColC) < 12
ColC = "0" & ColC & "0"
Loop
Ligne = Replace(Ligne, ColCInit, ColC)
End If
'Ecrit dans le fichier texte ligne par ligne
Print #1, Ligne
Ligne = ""
Next i
'Fermeture
Close #num
End Sub
ce code me donne : A |B|000045000000|
Espérant que je me suis fais comprendre
je reste disponible pour toutes informations complémentaires
CDT
Bonsoir ALL,
y'a vraiment personne pour m'aider s'ils vous plaît.
CDT,
y'a vraiment personne pour m'aider s'ils vous plaît.
CDT,
Bonjour,
Tu as eu toutes les infos qu'il te faut pour faire ce que tu veux faire (Salut Franck et chapeau pour ta patience).
Je n'ai pas vraiment l'impression que tu ais lu et appliqué toutes les recommandations données par Franck. Tu te contentes de copier/coller le code qu'il te donne sans vraiment chercher à comprendre.
Ce que tu demandes n'est rien de plus que de la manipulation de chaîne de caractères.
Tu as eu toutes les infos qu'il te faut pour faire ce que tu veux faire (Salut Franck et chapeau pour ta patience).
Je n'ai pas vraiment l'impression que tu ais lu et appliqué toutes les recommandations données par Franck. Tu te contentes de copier/coller le code qu'il te donne sans vraiment chercher à comprendre.
Ce que tu demandes n'est rien de plus que de la manipulation de chaîne de caractères.
Bonsoir,
En fait je comprends bien ce que vous dites et je profite pour remercier FRANCK mais j'avais bien spécifié au début que je m'y connaissait pas vraiment en programmation j'ai bien compris ce que FRANCK a fait raison pour laquelle j'ai pu faire pour la colonne C
If i = LBound(MesDonnees, 1) Then
ColCInit = Split(Ligne, "|")(2)
ColC = ColCInit
Do While Len(ColC) < 12
ColC = "0" & ColC & "0"
Loop
Ligne = Replace(Ligne, ColCInit, ColC)
End If
mais le problème c'est que je n'arrive pas à positionner les valeurs là ou il faut. Merci cas même de m'avoir répondu et je vous prie de m'aider à terminer svp.
CDT,
En fait je comprends bien ce que vous dites et je profite pour remercier FRANCK mais j'avais bien spécifié au début que je m'y connaissait pas vraiment en programmation j'ai bien compris ce que FRANCK a fait raison pour laquelle j'ai pu faire pour la colonne C
If i = LBound(MesDonnees, 1) Then
ColCInit = Split(Ligne, "|")(2)
ColC = ColCInit
Do While Len(ColC) < 12
ColC = "0" & ColC & "0"
Loop
Ligne = Replace(Ligne, ColCInit, ColC)
End If
mais le problème c'est que je n'arrive pas à positionner les valeurs là ou il faut. Merci cas même de m'avoir répondu et je vous prie de m'aider à terminer svp.
CDT,
Bonjour,
A ce niveau, nous allons séparer les deux procédures :
1- la Sub qui écrit le fichier txt
2- Une fonction de traitement de la ligne d'entête.
Dans ces codes, il y a peut être des petites erreurs car je n'ai pas testé.
A voir donc
Cordialement,
Franck
A ce niveau, nous allons séparer les deux procédures :
1- la Sub qui écrit le fichier txt
2- Une fonction de traitement de la ligne d'entête.
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("A" & Rows.Count).End(xlUp).Row 'A ADAPTER ici ne traite que les colonnes de A à E MesDonnees = .Range("A1:E" & DernLigne).Value End With 'A ADAPTER : chemin d'accès complet pour le stockage du fichier txt Chemin = "C:\Users\MoiMeme\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 ColB As String, ColBInit As String Dim ColC As String, ColCInit As String Entete = Left(Entete, Len(Entete) - 4) 'Placer ici le traitement de la colonne A '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 Format_Entete = Entete End Function
Dans ces codes, il y a peut être des petites erreurs car je n'ai pas testé.
A voir donc
Cordialement,
Franck
Bonjour pijaku,
je suis vraiment nouveau dans la programmation, je suis à la recherche d'une procédure, qui va me permettre de mettre en place un macro à l'aide d'un bouton dans un fichier Excel pour générer un fichier texte (txt) ( sachant que le fichier doit être générer a partir de la 3éme feuille du mon fichier Excel .
la 3 ème feuille son nom est CNSS comporte
- une entête sur 4 lignes
- les valeurs a enregistrer dans le fichier commencent à partir de la 5 ème ligne 2 ème colonne ( B5 ) comportant :
* matricule1:8 caractères ; clé1 : 2 caractères ; codeExp: 4 chiffre ; trimestre : 1 c ; Année : 4 c ; Num page : 3 c; Num ligne 2 c ; matricule2 : 8 c; clé2 : 2c ;Identité : 60c ; num carte : 8c; salaire: 10 c; zone : 10 c
il ya maximum 100 lignes
( L'enregistrement sans espaces ou caractères )
0024275864000012023001010000000000aaaaaaaaaaaaaaaaaaaaaaaaaaa 0000000000090000000000000000
nom du fichier à générer : matricule1cle1codeExp.TrimstreAnnée
Répertoire : au choix
le nom
Achraf
merci d'avance.
CDT,