Microsoft 365 Conversion xls en .txt avec longueur de colonnes fixes

jpsafe

XLDnaute Nouveau
Bonsoir,

J'ai besoin de votre aide et les solutions trouvées sur le forum ne semblent pas fonctionner dans mon cas où plus vraisemblablement je ne suis pas assez doué pour les exploiter :).
J'ai besoin de générer à partir d'un fichier excel,un fichier texte ou les tailles de colonnes sont figées pour un total de 680 caractères et 59 colonnes.

Je vous un fichier contenant le nombre de caractères max de chaque colonne texte et un onglet de données exemple.

Un grand merci pour votre aide
JP
 

Pièces jointes

  • Test SLAPXXX.xlsx
    10.7 KB · Affichages: 21
Solution
Bonsoir,
VB:
Sub test()
ThisWorkbook.Sheets("Format TXT").Range("A1").CurrentRegion.Copy 'LLe fichier Schema.ini contient le format du fichier tex à créer  {voire onglet Format TXT}!
CreerTxt ThisWorkbook.Path & "\Schema.ini", Replace(PressePapier, vbTab, " ")
CreerTxt ThisWorkbook.Path & "\TEST.CSV", ""
With CreateObject("Adodb.connection") 'Fichier vierge !
    .Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.Path & ";Extended Properties=""Text;HDR=No;FMT=FixedLength;"""
    .Execute "insert  into [TEST#CSV] select * from [Donnees$] in '" & ThisWorkbook.FullName & "' 'excel 12.0;HDR=no;IMEX=1;'"
    .Close
End With
End Sub
Private Sub CreerTxt(Fichier, TxtDefault As String) 'Ici  on génère un fichier text
Dim FSO...

Dudu2

XLDnaute Barbatruc
Bonjour,
Je ne suis pas sûr de comprendre si tu veux transformer un fichier Excel contenant des données en fichier Texte avec des colonnes de longueur déterminées ou si tu veux seulement générer un fichier Texte sans données (ou peut-être seulement les titres de colonnes) avec des colonnes de longueur déterminée.
 

Dudu2

XLDnaute Barbatruc
Dans le 1er cas, il va falloir une macro qui contrôle la longueur des données pour:
- les couper en morceaux pour qu'elles rentrent dans la colonne
- et/ou les compléter avec des espaces pour qu'elles remplissent la colonne
sachant que la largeur de caractère est fixe dans un fichier texte.
 

jpsafe

XLDnaute Nouveau
Bonjour Dudu,
Oui je dois générer un fichier texte de longueur totale déterminée ( 680 caractères) avec des colonnes de longueur fixes ( le nombre de caractères par colonne se trouve dans l'onglet Format txt) à partir d'un fichier excel contenant les données (sans titre de colonnes) mais avec certaines colonnes vides comme les cellules excel. J'imagine que c'est parce que la récupération de ces données va s'effectuer à partir du décompte de caractère.
J'ai vérifié qu'aucune des données du fichier excel ne dépasse le nombre de caractère max de chaque colonne
 

jpsafe

XLDnaute Nouveau
Non aucun séparateur juste le nombre de caractère par colonne donc je pense que l'exploitation se fait avec le n° des caractères dans le fichier txt ce qui permettrait d'identifier les colonnes vides.
J'ai peut-être qque chose avec notepad++ et une macro que j'ai trouvé sur le site mais que je n'arrivais pas à faire fonctionner ou j'arrive bien à un fichier txt où les lignes font bien 680 caractères puis on passe à la ligne suivante ce qui devrait résoudre mon pb.
C'est quand même effectivement plus simple avec les séparateurs intégrés dans le fichier txt pour identifier instantanément les colonnes même vides
J'envoie ça et j'attends le retour si c'est ok
Je reviens sur le sujet en fonction du retour
Merci Dudu
 

dysorthographie

XLDnaute Accro
Bonsoir,
VB:
Sub test()
ThisWorkbook.Sheets("Format TXT").Range("A1").CurrentRegion.Copy 'LLe fichier Schema.ini contient le format du fichier tex à créer  {voire onglet Format TXT}!
CreerTxt ThisWorkbook.Path & "\Schema.ini", Replace(PressePapier, vbTab, " ")
CreerTxt ThisWorkbook.Path & "\TEST.CSV", ""
With CreateObject("Adodb.connection") 'Fichier vierge !
    .Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.Path & ";Extended Properties=""Text;HDR=No;FMT=FixedLength;"""
    .Execute "insert  into [TEST#CSV] select * from [Donnees$] in '" & ThisWorkbook.FullName & "' 'excel 12.0;HDR=no;IMEX=1;'"
    .Close
End With
End Sub
Private Sub CreerTxt(Fichier, TxtDefault As String) 'Ici  on génère un fichier text
Dim FSO, NewFichier
Set FSO = CreateObject("Scripting.FileSystemObject")
Set NewFichier = FSO.OpenTextFile(Fichier, 2, True)
NewFichier.Write TxtDefault
NewFichier.Close
Set NewFichier = Nothing
Set FSO = Nothing
End Sub
Public Property Let PressePapier(Value) 'Ici  place un texte dans le press papier
Const DATAOBJECT_BINDING As String = "new:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}"
    With CreateObject(DATAOBJECT_BINDING)
        .SetText Value
        .PutInClipboard
    End With
End Property
Public Property Get PressePapier() 'Ici  on récupère le  texte du  press papier
Const DATAOBJECT_BINDING As String = "new:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}"
    With CreateObject(DATAOBJECT_BINDING)
        .GetFromClipboard
        PressePapier = .GetText
    End With
End Property
 

Pièces jointes

  • Test SLAPXXX.xlsm
    20.8 KB · Affichages: 20

Dudu2

XLDnaute Barbatruc
Ce fichier exporte la feuille active en fichier texte en respectant les largeurs de colonnes indiquées.

S'il faut sortir la Macro dans un classeur dédié capable de traiter d'autres feuilles d'autres classeurs, c'est facile à faire.
 

Pièces jointes

  • Test SLAPXXX-1.xlsm
    23.3 KB · Affichages: 33

Staple1600

XLDnaute Barbatruc
Re

dysorthographie
Comme l'indique le [Juste pour infos] et l'emoticone dans mon précédent message, il ne fallait voir qu'un trait d'humour.
Ni plus, ni moins.

NB: Et accessoirement, si un Maciste passait par ici, il est prévenu et ne pourra pas dire: "Bah, la macro ne fonctionne pas"
;)
 

dysorthographie

XLDnaute Accro
Je n'y es vu que de l'humour rien d'autre!

Maciste est un personnage de fiction créé en 1913 par Gabriele d'Annunzio et Giovanni Pastrone dans le film Cabiria en tant que simple personnage secondaire, mais qui devient ensuite le héros d'une vingtaine de films dans les années 1910-1930 et 1960-1970. Héros solitaire, toujours au service du bien.
 

Discussions similaires

Statistiques des forums

Discussions
311 720
Messages
2 081 904
Membres
101 834
dernier inscrit
Jeremy06510