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 Messages postés 10 Date d'inscription jeudi 26 janvier 2023 Statut Membre Dernière intervention 2 février 2023 - 26 janv. 2023 à 12:25
KARROUMAYAGHALI Messages postés 10 Date d'inscription jeudi 26 janvier 2023 Statut Membre Dernière intervention 2 février 2023 - 26 janv. 2023 à 12:25
A voir également:
- Vba créer fichier texte
- Fichier rar - Guide
- Créer un compte gmail - Guide
- Créer un compte google - Guide
- Créer un groupe whatsapp - Guide
- Comment créer un fichier pdf - Guide
27 réponses
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 751
12 juin 2014 à 10:44
12 juin 2014 à 10:44
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
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 751
Modifié par pijaku le 12/06/2014 à 08:03
Modifié par pijaku le 12/06/2014 à 08:03
Salut,
Un fichier .csv ne conviendrait pas?
Cordialement,
Franck
Un fichier .csv ne conviendrait pas?
Cordialement,
Franck
AHI_250
Messages postés
25
Date d'inscription
mercredi 11 juin 2014
Statut
Membre
Dernière intervention
18 juin 2014
12 juin 2014 à 10:16
12 juin 2014 à 10:16
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
AHI_250
Messages postés
25
Date d'inscription
mercredi 11 juin 2014
Statut
Membre
Dernière intervention
18 juin 2014
12 juin 2014 à 11:48
12 juin 2014 à 11:48
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,
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 751
Modifié par pijaku le 12/06/2014 à 11:52
Modifié par pijaku le 12/06/2014 à 11:52
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
AHI_250
Messages postés
25
Date d'inscription
mercredi 11 juin 2014
Statut
Membre
Dernière intervention
18 juin 2014
12 juin 2014 à 12:15
12 juin 2014 à 12:15
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,
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 751
12 juin 2014 à 12:23
12 juin 2014 à 12:23
Je ne comprends pas bien ta demande...
AHI_250
Messages postés
25
Date d'inscription
mercredi 11 juin 2014
Statut
Membre
Dernière intervention
18 juin 2014
12 juin 2014 à 12:43
12 juin 2014 à 12:43
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,
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 751
12 juin 2014 à 12:45
12 juin 2014 à 12:45
Ok, mais tu veux quoi? Qu'elle est ta question?
N'oublie pas que je n'ai pas tes données sous les yeux...
N'oublie pas que je n'ai pas tes données sous les yeux...
AHI_250
Messages postés
25
Date d'inscription
mercredi 11 juin 2014
Statut
Membre
Dernière intervention
18 juin 2014
12 juin 2014 à 12:54
12 juin 2014 à 12:54
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,
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 751
12 juin 2014 à 13:04
12 juin 2014 à 13:04
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
AHI_250
Messages postés
25
Date d'inscription
mercredi 11 juin 2014
Statut
Membre
Dernière intervention
18 juin 2014
12 juin 2014 à 13:25
12 juin 2014 à 13:25
S'il te plaît J'ai un message d'erreur "erreur de compilation attendu fin d'instruction"
CDT,
CDT,
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 751
12 juin 2014 à 13:27
12 juin 2014 à 13:27
erreur de copier-coller.
Remplacer :
Remplacer :
i = LBound(MesDonnees, 1) Then Ligne = Left(Ligne, Len(Ligne) - 4)par :
If i = LBound(MesDonnees, 1) Then Ligne = Left(Ligne, Len(Ligne) - 4)
AHI_250
Messages postés
25
Date d'inscription
mercredi 11 juin 2014
Statut
Membre
Dernière intervention
18 juin 2014
12 juin 2014 à 13:41
12 juin 2014 à 13:41
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,
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 751
12 juin 2014 à 13:46
12 juin 2014 à 13:46
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)
AHI_250
Messages postés
25
Date d'inscription
mercredi 11 juin 2014
Statut
Membre
Dernière intervention
18 juin 2014
12 juin 2014 à 14:52
12 juin 2014 à 14:52
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,
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 751
12 juin 2014 à 15:03
12 juin 2014 à 15:03
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.....
AHI_250
Messages postés
25
Date d'inscription
mercredi 11 juin 2014
Statut
Membre
Dernière intervention
18 juin 2014
12 juin 2014 à 15:40
12 juin 2014 à 15:40
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,
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 751
12 juin 2014 à 15:45
12 juin 2014 à 15:45
AS tu compris comment j'avais transformé 30 en 00000030?
cette partie du code :
Si tu l'as comprends, tu peux faire la même chose pour les autres colonnes...
cette partie du code :
ColBInit = Split(Ligne, " |")(1) ColB = ColBInit Do While Len(ColB) < 8 ColB = "0" & ColB Loop Ligne = Replace(Ligne, ColBInit, ColB)
Si tu l'as comprends, tu peux faire la même chose pour les autres colonnes...
AHI_250
Messages postés
25
Date d'inscription
mercredi 11 juin 2014
Statut
Membre
Dernière intervention
18 juin 2014
12 juin 2014 à 16:25
12 juin 2014 à 16:25
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,
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 751
12 juin 2014 à 16:31
12 juin 2014 à 16:31
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...
AHI_250
Messages postés
25
Date d'inscription
mercredi 11 juin 2014
Statut
Membre
Dernière intervention
18 juin 2014
12 juin 2014 à 16:28
12 juin 2014 à 16:28
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.
AHI_250
Messages postés
25
Date d'inscription
mercredi 11 juin 2014
Statut
Membre
Dernière intervention
18 juin 2014
12 juin 2014 à 18:58
12 juin 2014 à 18:58
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,
AHI_250
Messages postés
25
Date d'inscription
mercredi 11 juin 2014
Statut
Membre
Dernière intervention
18 juin 2014
12 juin 2014 à 19:35
12 juin 2014 à 19:35
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,
AHI_250
Messages postés
25
Date d'inscription
mercredi 11 juin 2014
Statut
Membre
Dernière intervention
18 juin 2014
13 juin 2014 à 10:55
13 juin 2014 à 10:55
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,
AHI_250
Messages postés
25
Date d'inscription
mercredi 11 juin 2014
Statut
Membre
Dernière intervention
18 juin 2014
13 juin 2014 à 17:58
13 juin 2014 à 17:58
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
AHI_250
Messages postés
25
Date d'inscription
mercredi 11 juin 2014
Statut
Membre
Dernière intervention
18 juin 2014
13 juin 2014 à 21:08
13 juin 2014 à 21:08
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,
Polux31
Messages postés
6917
Date d'inscription
mardi 25 septembre 2007
Statut
Membre
Dernière intervention
1 novembre 2016
1 204
13 juin 2014 à 21:22
13 juin 2014 à 21:22
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.
AHI_250
Messages postés
25
Date d'inscription
mercredi 11 juin 2014
Statut
Membre
Dernière intervention
18 juin 2014
13 juin 2014 à 21:33
13 juin 2014 à 21:33
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,
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 751
Modifié par pijaku le 16/06/2014 à 08:05
Modifié par pijaku le 16/06/2014 à 08:05
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
26 janv. 2023 à 12:25
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,