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
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,
A voir également:

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 743
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

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

1
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

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,

0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 743
Modifié par pijaku le 12/06/2014 à 08:03
Salut,

Un fichier .csv ne conviendrait pas?

Cordialement,
Franck
0
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
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
0
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
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,
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 743
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 :
MesDonnees = .Range("A1:E" & DernLigne).Value
qui devient :
MesDonnees = .Range("A1:F" & DernLigne).Value
Pourrais 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?
0

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
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,
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 743
12 juin 2014 à 12:23
Je ne comprends pas bien ta demande...
0
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
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,
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 743
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...
0
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
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,
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 743
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
0
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
S'il te plaît J'ai un message d'erreur "erreur de compilation attendu fin d'instruction"

CDT,
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 743
12 juin 2014 à 13:27
erreur de copier-coller.
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)
0
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
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,
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 743
12 juin 2014 à 13:46
Avec ce code ?

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)
0
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
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,
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 743
12 juin 2014 à 15:03
Ok :
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.....
0
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
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,
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 743
12 juin 2014 à 15:45
AS tu compris comment j'avais transformé 30 en 00000030?
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...
0
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
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,
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 743
12 juin 2014 à 16:31
La fonction Split (voir l'aide en ligne sur cette fonction)
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...
0
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
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.
0
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
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,
0
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
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,
0
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
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,
0
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
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
0
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
Bonsoir ALL,

y'a vraiment personne pour m'aider s'ils vous plaît.

CDT,
0
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
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.
0
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
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,
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 743
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.

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
0