XL 2016 Créer et écrire dans fichier texte

kinguepat

XLDnaute Nouveau
Bonsoir à Tous!

Je suis confronté à un problème de création de fichier txt, j'ai parcouru pleins de forums à la recherche de solutions sans trouver ce qui correspond à ma préoccupation qui est la suivante:

j'aimerai créer et écrire dans un fichier texte sous la forme (fichier texte joint) à partir de la feuille excel jointe.

Explications:

VB:
C0400000 cette variante reste la même à chaque début de ligne
05 correspond au mois en cours qui se trouve en cellule S1
3510106153B correspond à la cellule B3
1 correspond au régime en cellule G2
2019 correspond à l'année en cours en cellule T1
35110440931 le matricule de l'employé en cellule A5
30 nombre de jours de travail cellule F5
78765 correspond à la cellule C5
0 correspond cellule E5
78765 cellule G5
78765 cellule I5
78765 cellule I5
1016 cellule K5
00000001 s'incrémente de +1 à chaque ligne
01 s'incrémente de +1 à chaque ligne

le fichier texte devra être sous la forme de celui joint .

Tout en espérant avoir bien expliqué mon problème, je remercie d'avance tous ceux qui voudront bien apporter des solutions.

au plaisir de vous lire
 

Pièces jointes

  • Test_File.xlsm
    13.1 KB · Affichages: 5
  • _var_DIPE_MENSUEL.txt
    273 bytes · Affichages: 7

Dranreb

XLDnaute Barbatruc
Bonsoir
Adaptez cette procédure écrite pour un autre demandeur :
VB:
Sub ChampsFixes()
   Dim TDon(), L As Long, C As Long, Z As String * 10, Rec As String * 60
   TDon = Feuil1.[A2:F2].Resize(Feuil1.[A1000000].End(xlUp).Row - 1).Value
   Open ThisWorkbook.Path & "\Exportation.txt" For Output Access Write As #1
   For L = 1 To UBound(TDon, 1)
      For C = 1 To UBound(TDon, 2)
         LSet Z = TDon(L, C)
         Mid$(Rec, 10 * (C - 1) + 1, 10) = Z
         Next C
      Print #1, Rec: Next L
   Close #1
   End Sub
 

kinguepat

XLDnaute Nouveau
Bonsoir!
Merci Dranreb pour ta réaction. Je n'ai pas pu adapter ta solution et me suis pencher vers une autre plus adaptative.

Je copie les données que je veux utiliser dans une feuille qui me permet de créer le fichier texte et d'y inscrire les données. Juste que là et avec un peu d'aide, pas de problème.

Je voudrai que le fichier txt crée soit sous la même forme que le fichier texte joint à savoir après C0400000, le caractère suivant devra être inscrit à partir de la colonne 24 du fichier texte et ainsi de suite pour les autres (selon les espaces du fichier texte exemple)

VB:
Sub CreerTxt()
Dim Donnees(95)
Dim Lig As Integer
Dim Chemin As String, NomFic As String

Chemin = ThisWorkbook.Path & "\"
NomFic = ThisWorkbook.Name & " " & Format(Now, "ddmmyyyyhhmmss") & ".txt"
With ActiveSheet
    For Lig = 1 To 50
        Donnees(Lig - 1) = .Cells(Lig, 1) & "   " & .Cells(Lig, 2) & "" & .Cells(Lig, 3) & "" & .Cells(Lig, 4) & "" & .Cells(Lig, 5) & "" & .Cells(Lig, 6) & "" & .Cells(Lig, 7) & "      " & .Cells(Lig, 8) & "  " & .Cells(Lig, 9) & "  " & .Cells(Lig, 10) & "  " & .Cells(Lig, 11) & "  " & .Cells(Lig, 12) & "  " & .Cells(Lig, 13) & "  " & .Cells(Lig, 14) & "  " & .Cells(Lig, 15)
    Next Lig
End With
Open Chemin & NomFic For Output As #1
For Lig = LBound(Donnees) To UBound(Donnees)
    Print #1, Donnees(Lig)
Next
Close #1
End Sub

Merci pour vos différentes contributions
 

Pièces jointes

  • extraction.txt
    1.4 KB · Affichages: 5
  • Classeur1.xlsm
    20.1 KB · Affichages: 3
  • fichier exemple.txt
    1.1 KB · Affichages: 5

Dranreb

XLDnaute Barbatruc
Bonsoir.
Je ne vois pas ce que ça vous apporte de mettre d'abord les lignes du fichier dans un tableau.
Charger préalablement l'ensemble des données à prendre, ça oui :
VB:
Sub CreerTxt()
   Dim TDon(), L As Long, C As Long, ZTxt As String, Champ As String
   TDon = ActiveSheet.UsedRange.Value
   Chemin = ThisWorkbook.Path & "\"
   NomFic = ThisWorkbook.Name & " " & Format(Now, "ddmmyyyyhhmmss") & ".txt"
   Open Chemin & NomFic For Output As #1
   For L = 1 To UBound(TDon, 1)
      ZTxt = ""
      For C = 1 To UBound(TDon, 2)
         Champ = String(Choose(C, …, …, …, …, …, …, …, …, …, …, …, …, …, …, …, …, …, …, …, …, …, …, …), " ")
         LSet Champ = TDon(L, C)
         ZTxt = ZTxt & Champ: Next C
      Print #1, ZTxt: Next L
   Close #1
   End Sub
Remplacez les points de suspensions par les longueurs successives des champs, car je n'ai pas envie de compter les caractères.
Remarque: il existe aussi une instruction RSet, qui ne modifie plus non plus la longueur de la zone réceptrice, pour y cadrer quelque chose à droite.
 
Dernière édition:

Statistiques des forums

Discussions
312 169
Messages
2 085 909
Membres
103 032
dernier inscrit
etima