Extraire les données dans un teableau EXCEL vers Fichier *.TXT

Nyepalo

XLDnaute Junior
Bonjour,

Après des recherches individuels et dans le forum dont les résultats ne correspondent pas toujours à mes désirs, je viens dans ce forum solliciter votre aide.

Il est question de ressortir dans un fichier texte, toutes les données présentes dans les différentes colonnes et lignes de la feuille « Détail ». Le fichier texte à une ligne entête en dur dans le code, en plus de lignes détails dans le tableau. Le nombre de ligne dans le tableau est sans limite.
Mon exemple ci-joint.

Merci d'avance de votre aide.
 

Pièces jointes

  • MdleExcel_Convert_txt.xlsm
    15.3 KB · Affichages: 44

Nyepalo

XLDnaute Junior
Re : Extraire les données dans un teableau EXCEL vers Fichier *.TXT

Bonjour tous,

Comme promis, je reviens après analyse des différentes propositions par rapport à mon besoin qui est de transcrire les données saisies dans la feuille Excel "Détail" en respectant un certain formatage que je n'avais pas précisé au début et que je n'avais non plus. Je m'en excuse ; J'ai le descriptif du fichier texte joint dans le fichier excel. Merci d'avance de votre précieuse aide.

Bien à vous.
 

Roland_M

XLDnaute Barbatruc
Re : Extraire les données dans un teableau EXCEL vers Fichier *.TXT

Bonjour,

pour ce qui est du champ sans l'entête voir modif dans le Module4 !

mais pour le reste, je suis désolé, mais je ne comprend très bien où tu vas chercher les données à rajouter à la fin !?
peut être veux tu que l'on rajoute simplement ce qui est dans l'exemple de l'image !?
c'est à dire la légende ?
mais alors faut il mettre en entête les lettres des colonnes ?


Code:
Sub SaveFichierFormatTexte()
'Module4 de Roland_M
'-------------------
Dim NomFeuil$, NomFich$, Tablo As Variant, H&, J&, L&, I&, X$

' INIT .
NomFeuil = "Détail" '<<<<< nom de la feuil !?
NomFich = "Texte_AFB160.txt" '<<< nom du fichier  !?

ThisWorkbook.Sheets(NomFeuil).Copy: DoEvents
With ActiveWorkbook.Sheets(NomFeuil)
  Adres$ = .UsedRange.Address
  Tablo = Range(Adres$).Offset(1, 0)
  H = UBound(Tablo)
End With

For J = 1 To UBound(Tablo, 2)
  L = 0
  For I = 1 To H
    X = Tablo(I, J)
    If Len(X) > L Then L = Len(X)
  Next
  For I = 1 To H
    X = Tablo(I, J)
    If Len(X) < L Then Tablo(I, J) = X & String(L - Len(X), " ")
  Next
Next
ActiveSheet.UsedRange = Tablo
Application.DisplayAlerts = False
ActiveWorkbook.SaveAs ThisWorkbook.Path & "\" & NomFich, xlText
ActiveWorkbook.Close
ThisWorkbook.Activate
End Sub
 
Dernière édition:

Nyepalo

XLDnaute Junior
Re : Extraire les données dans un teableau EXCEL vers Fichier *.TXT

Merci de votre réaction

L’enregistrement d'entête est dans mon scripte de la feuille détail. Les libellés des colonnes ne doivent pas apparaître dans le fichier texte.
Je me résume : Toutes les données dans la feuille détail sauf libellés de colonne + entête dans mon scripte + colonnes vides normales
- L'entête (0302): c'est le premier enregistrement, il est décrit une seule fois a première ligne 1 ligne du fichier. Voir mon scripte
- Des enregistrements détails (0602) : il existe autant d’enregistrements que de lignes dans le tableau excel.
- Un enregistrement total (0802) : il est le dernier du tableau Excel et décrit une seule fois dans le fichier texte.

Bien à vous.
 

Roland_M

XLDnaute Barbatruc
Re : Extraire les données dans un teableau EXCEL vers Fichier *.TXT

re

voir exemple, comment faire, pour rajouter après le tableau les données comme dans ton exemple en image !

de là tu pourras peut être incorporer les valeurs que tu souhaites !?
 

Pièces jointes

  • Création fichier text_2.xls
    96.5 KB · Affichages: 11

Nyepalo

XLDnaute Junior
Re : Extraire les données dans un teableau EXCEL vers Fichier *.TXT

Bonsoir Roland_M,

On avance petit à petit vers la solution.
Dans le fichier joint tu verras le résultat de ta macro (Ton résultat) et ce que je souhaite obtenir à la fin (Mon souhait).
La première ligne dans le fichier texte produit ne doit pas être décalée.
Mon scripte pour écrire l'entête du fichier se trouve dans la feuille "Détail". Seule la date change, elle correspond au jour de création du fichier texte.
J'ai mis en commentaire ce que tu as rajouté dans ton scripte on en a pas besoin dans le corps du fichier texte. C'est juste une description du formatage.

Je dois préciser que le tableau (détail) est dépourvu des champs réservés.
Les espaces vides font partie du fichier txt et l'espace doit correspondre à la longueur du champ en considérant qu'un espace est un caractère.
Exemple :
Le champ réservé1 = String(8, Chr(160).

Merci.
 

Pièces jointes

  • Création fichier text_Maj.xls
    143 KB · Affichages: 19

Nyepalo

XLDnaute Junior
Re : Extraire les données dans un teableau EXCEL vers Fichier *.TXT [RESOLU]

Salut a tous,

Je viens partager avec vous la vraie réponse à mon problème et vous dire merci pour votre aide.

Code:
 Call ExportDonnées(ThisWorkbook.Path & "\" & "ExportFicTXT.txt")

Traitement :
Code:
ub ExportDonnées(ByVal nomFich As String)

  ' Format largeur fixe

    Dim Data    As Variant
    Dim r      As Long
    Dim Rng    As Range
    Dim Text    As String
    Dim mois As String
    Dim datejour As Date
      
        Set Rng = Feuil1.Range("A1").CurrentRegion
        Data = Rng.Value
        datejour = Now
        
        Open nomFich For Output As #1
        
        '**** Enrégistrement entête ****
        Print #1, "0302" & String(8, Chr(160)) & "012071" & String(7, Chr(160)) & Format(Date, "ddmm") & Right(Year(Date), 1) & "SOCIETE TANTAMPION SARL " _
                        & "PAIEMEN" & String(25, Chr(160)) & "06800" & "01234567890" & "TANTAMPION SARL " & String(31, Chr(160)) & "10001" & String(6, Chr(160))
        
        '**** Enrégistrement Détails et fin ****
                        
            For r = 2 To UBound(Data, 1)
                Text = String(160, Chr(160))

                If Not IsEmpty(Data(r, 1)) Then Mid(Text, 1, 4) = Data(r, 1)
                If Not IsEmpty(Data(r, 2)) Then Mid(Text, 13, 6) = Data(r, 2)
                If Not IsEmpty(Data(r, 3)) Then Mid(Text, 19, 12) = Data(r, 3)
                If Not IsEmpty(Data(r, 4)) Then Mid(Text, 31, 24) = Data(r, 4)
                If Not IsEmpty(Data(r, 5)) Then Mid(Text, 55, 24) = Data(r, 5)
                If Not IsEmpty(Data(r, 6)) Then Mid(Text, 87, 5) = Data(r, 6)
                If Not IsEmpty(Data(r, 7)) Then Mid(Text, 92, 11) = Data(r, 7)
                If Not IsEmpty(Data(r, 8)) Then Mid(Text, 103, 16) = Format(Data(r, 8), "0000000000000000")
                If Not IsEmpty(Data(r, 9)) Then Mid(Text, 119, 31) = Data(r, 9)
                If Not IsEmpty(Data(r, 10)) Then Mid(Text, 150, 5) = Data(r, 10)

                Print #1, Text
            Next r
        Close #1

End Sub
 

Discussions similaires

Réponses
8
Affichages
403
Réponses
2
Affichages
115

Statistiques des forums

Discussions
312 330
Messages
2 087 351
Membres
103 526
dernier inscrit
HEC