Creation fichier longeur fixe via excel

  • Initiateur de la discussion Initiateur de la discussion Snoop
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Snoop

XLDnaute Occasionnel
Bonjour, je dois créer un fichier à longeur fixe via excel, merci de me dire si vous connaissez un moyen pour le faire, mon probleme est surtout pour le format text ou celui-ci n'est pas facile a ajuster.
Je voudrais le ressortir en fichier txt pour pouvoir l'intégrer dans un logiciel.

Merci pour votre aide😀
 
Re : Creation fichier longeur fixe via excel

Bonjour Snoop, le forum

c'est un peu juste comme explications; faisable oui, mais il faudrait nous fournir plus d'elements :
-quelle est la structure de sortie de ton fichier txt
-d'ou viennent les données (feuille, colonne, ligne ...)
-etc...
 
Re : Creation fichier longeur fixe via excel

Alors je part d'un fichier excel, avec environ 40 colonnes, dont chacune doivent etre apres manipulation avec une nombre différent de caractere :

exemple colonne 1 ->9 caracteres, colonne 2 --> 5 etc...

Le probleme me vient surtout lorque la colonne comporte du texte et est vide, car elle doivent avoir lors de l'extraction un nombre de caractere car l'integration du fichier est en longueur fixe.

Pour les nombres j'ai trouver comment m'y prendre.

Donc il me faudrais une astuce pour que les cases se remplisse au nombre de caracteres soit par des espace, soit par un module qui me permetrais de l'enrgistrer en format text (me demande pour chaque colonne combien je veux de caracteres)

je ne sais pas si cela est bien compréhensible.

Merci
 
Re : Creation fichier longeur fixe via excel

Et bhen cela a l'aire pas mal du tout, je vais essayer de completer ta vb, mais je pense qu'il me faudra un peu d'aide encore,

Est-il possible de mettre en dure les longeur sous excel au lieu de recréer un module de champ (car comme j'ai 40 colonnes minimum cela risque d'etre long à créer) ?

Enfin j'essaye de mettre une colonne supplementaire mais il me repond que j'ai un probleme avec Private Sub TextBoxChange(Num As Byte)
Dim Question As Byte

If myIni = False Then
Question = MsgBox("Il est recommandé de ne pas toucher au réglages de longueur" & vbCrLf & _
"Voulez-Vous continuer quand même ?", vbCritical + vbOKCancel, t)
If Question = vbOK Then
Me.Controls("TextBox" & Num) = Me.Controls("SpinButton" & Num)
Else
Exit Sub
End If
Else
** Me.Controls("TextBox" & Num) = Me.Controls("SpinButton" & Num)
End If
End Sub
Cette ligne **

Car mon textBox est 9 car 8 deja utilisé et mon spinbutton est 8 --> merci de me dire a quoi sert cette vérification, car pour le coup je n'ai pas tout compris.

Sinon merci bien mangé, bon apt à toi aussi.

Merci
 
Re : Creation fichier longeur fixe via excel

Re Bonjour Snoop, Bertrand, le Forum

Ce qui t'interresse dans cette démo c'est dans le Module "Exportation" la procédure nommée : "BuildTXT"

Le reste ne sert que pour le UserForm.


Dans cette partie, C = 1 to 7 gère Sept Colonnes...

Code:
        For C = 1 To 7
        Select Case C
            Case 1
                TmpString = ""
                For i = Len(CStr(TXT.Cells(L, C).Text)) To UserForm1.TextBox1 - 1
                TmpString = TmpString & Chr(32)
                Next
                TheText = TheText & Left(CStr(TXT.Cells(L, C).Text), UserForm1.TextBox1) & TmpString
 
Ect etc... Case 2, Case 3... etc etc... Jusqu'à  Case 7

Tu devras avoir autant de Case que de Colonnes....

Dans les Case 1 à 4 de ma démo les espaces sont placés APRES la String.

Pour placer les espaces AVANT la string c'est à partir du Case 5 dans ma démo...

Code:
            Case 5
                TmpString = ""
                For i = Len(CStr(TXT.Cells(L, C).Text)) To UserForm1.TextBox5 - 1
                TmpString = Chr(32) & TmpString
                Next
                TheText = TheText & TmpString & CStr(TXT.Cells(L, C).Text)

Je pense que tu as tous les éléments.

Bon Aprèm

@+Thierry


EDITION !!!

Oups, oui pour écrire en dûr, j'avais oublié, tu remplaces

For i = Len(CStr(TXT.Cells(L, C).Text)) To UserForm1.TextBox5 - 1

Par :

For i = Len(CStr(TXT.Cells(L, C).Text)) To 9 'Par exemple si tu veux un champs de 10
 
Dernière édition:
Re : Creation fichier longeur fixe via excel

Re Thierry, Bertrand, le Forum
Merci, mais encore une question (un peu boulet, mais j'aime bien comprendre jusqu'au bout en faite)

Dans la ligne tu mets Chr(32) un coup devant un coup derriere (je n'ai pas trop compris pourquoi cela ne fais t il pas doublons avec le Left ?

De plus
J'ai un soucis avec cette ligne :

Set Plage = TXT.Range("A5:d" & TXT.Range("A65536").End(xlUp).Row)

J'aimerais de partir ailleur que A5 un peu plus haut (en faite juste pour comprendre) mais quand je change rien n'y fais.

Sinon Merci beaucoup, j'ai mis un peu de tps a comprendre mais cela devrais etre bon.

Bonne Soirée

Tks
 
Dernière édition:
Re : Creation fichier longeur fixe via excel

Bonsoir Snoop, le Forum

Désolé, pas eu de temps avant pour te venir en aide....

Pour :
Set Plage = TXT.Range("A5:d" & TXT.Range("A65536").End(xlUp).Row

En fait ce doit être TXT.range qui te pose souci.... J'utilise dans cette démo le "CodeName" de la Feuille, ce qui est pratique parfois, mais peut poser soucis si on ne connait pas.

Le CodeName d'un Object "Sheet" est accessible depuis la fenêtre Explorateur de Projet dans VBE, une fois la feuille sélectionnée on peut changer son "CodeName" par la fenêtre Propriétés...

Mais ce n'est pas indispensable, on peut faire ceci aussi :

Code:
    With Sheets("TXT")
        Set Plage = .Range("A5:D" & .Range("A65536").End(xlUp).Row)
    End With

NB noter les . devant Range...

Sinon pour le reste, voici le code ajusté pour Dix Colonnes de la Colonne "A" à la Colonne "J" au lieu de Sept comme dans la Démo... (Je te laisse finir pour Quarante)

Code:
Option Explicit
[COLOR=green]'@+Thierry's[/COLOR][COLOR=green] Démo pour Excel-Downloads.com, April 2005[/COLOR]
Sub BuildTXT()
Dim Plage As Object, Line As Object
Dim TheText As String, ThePath As String, TmpString As String
Dim TheFile As Variant
Dim L As Integer
Dim C As Byte, X As Byte, i As Integer
 
TheFile = Application.GetSaveAsFilename(ThePath, "Fichier,*.txt")
If TheFile = False Then Exit Sub
 
L = 4 [COLOR=green]'= Ligne de départ + 1 soit 5[/COLOR]
 
    With Sheets("TXT")
        Set Plage = .Range("A5:[B]J[/B]" & .Range("A65536").End(xlUp).Row)
    End With
 
    Open TheFile For Output As #1
    
  For Each Line In Plage.Rows
    L = L + 1
    TheText = ""
 
        For C = 1 To 10 [COLOR=green]'10 Colonnes[/COLOR]
        Select Case C
            Case 1, 3
                TmpString = ""
                For i = Len(CStr(TXT.Cells(L, C).Text)) To 9 [COLOR=green]'Pour une largeur de 10 (ESPACES APRES)
[/COLOR]               TmpString = TmpString & Chr(32)
                Next
                TheText = TheText & Left(CStr(TXT.Cells(L, C).Text), 10) & TmpString
            Case 2
                TmpString = ""
                For i = Len(CStr(TXT.Cells(L, C).Text)) To 19 [COLOR=green]'Pour une largeur de 20 (ESPACES APRES)
[/COLOR]               TmpString = TmpString & Chr(32)
                Next
                TheText = TheText & Left(CStr(TXT.Cells(L, C).Text), 20) & TmpString
            Case 4 To 9
                TmpString = ""
                For i = Len(CStr(TXT.Cells(L, C).Text)) To 29[COLOR=green] 'Pour une largeur de 30 (ESPACES AVANT)
[/COLOR]               TmpString = Chr(32) & TmpString
                Next
                TheText = TheText & TmpString & CStr(TXT.Cells(L, C).Text)
            Case 10
                TmpString = ""
                For i = Len(CStr(TXT.Cells(L, C).Text)) To 39[COLOR=green] 'Pour une largeur de 40 (ESPACES AVANT)
[/COLOR]               TmpString = TmpString & Chr(32)
                Next
                TheText = TheText & TmpString & CStr(TXT.Cells(L, C).Text)
        End Select
        Next
    Print #1, TheText
  Next
 
  Close #1
Set Plage = Nothing
 
End Sub

Tu noteras aussi que le Select Case permet d'éviter des répétition de codes pour les Numéros de Colonnes devant subir le même traitement....

Bonne Soirée

@+Thierry

 
Dernière édition:
Re : Creation fichier longeur fixe via excel

Bonjour Thierry et le forum,

Merci pour ton aide et cela m'a fais du bien d'attendre, je essayer par moi meme.. il faut qd meme pas tout me macher lol

En faite entre temps j'avais trouver pour le TXT 🙂

Et donc j'ai fais mes 40 colonnes lol, mais merci pour le Select (to et ,) car pour le prochain fichier je vais gagner encore plus de tps.

Je n'ai pas mis de J comme tu l'as indiquer (pour les 10 colones) et je n'ai eut aucune erreur, il m'a pris toutes mes colonnes (je vais qd meme reajuster pour que cela fasse plus propre)

Bon sinon je pense que je n'ai plus de question.

Sinon juste une pour bien comprendre le code :

c'est koi : Len(CStr (.....)) les deux codes

Bonne journée & tks
 
Re : Creation fichier longeur fixe via excel

Bonjour Snoop, le Forum

Heureux de t'avoir rendu service !

Petite Démo rapidos pour ta dernière question.....

Sub LenDuMessage()
Dim Message As String
Dim Numero As Long
Message = "Bonjour, Il fait beau !"
MsgBox Len(Message)
Numero = 123456789
MsgBox Len(Numero)
MsgBox Len(CStr(Numero))
End Sub

Len est une fonction qui retourne le nombre de caractère dans une String...

CStr est une fonction de conversion qui retourne une String (Efficace pour la Variable de type Long "Numero" dans ce cas... et pour des Range aussi vu que je ne sais pas ce qu'il y a dans tes cellules...)

Bon App

@+Thierry
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Retour