XL 2016 [RESOLU] Ne pas créer une dernière ligne vide lors de la création d'un fichier séquentiel

ivan27

XLDnaute Occasionnel
Bonjour à tous,

J'utilise le code ci-dessous (fournit par JB) pour transformer mes listes excel en fichiers séquentiels.
Comment supprimer le dernier ''Next lig'' qui ajoute systématiquement une ligne vide en fin de fichier.

Code:
Sub ExportTxtChamp()
  repertoire = ThisWorkbook.Path
  Open repertoire & "\x.txt" For Output As #1
  Set champ = [C1].CurrentRegion
  For lig = 1 To champ.Rows.Count
    ligne = ""
    For col = 1 To champ.Columns.Count
      ligne = ligne & champ.Cells(lig, col) & ";"
    Next col
    Print #1, Left(ligne, Len(ligne) - 1)
  Next lig
  Close #1
End Sub
Merci d'avance pour votre aide et bonne fin de journée
 

Robert

XLDnaute Barbatruc
Bonjour Ivan, bonjour le forum,

Peut être en remplaçant la ligne :

Code:
ligne = ligne & champ.Cells(lig, col) & ";"
par :
VB:
ligne = IIf(ligne = "", champ.Cells(lig, col), ligne & ";" & champ.Cells(lig, col))
 

ivan27

XLDnaute Occasionnel
Bonjour Robert et merci pour ta proposition.
J'ai fait le remplacement mais j'ai toujours une ligne vide de créée en fin de fichier.
Bien cordialement,
Ivan
 

eriiiic

XLDnaute Barbatruc
Bonjour,

pour la dernière ligne (=champ.Rows.Count) laisse le ; final :
VB:
Print #1, ligne
eric
 

ivan27

XLDnaute Occasionnel
Re bonjour le forum, eriiiic,

Eric, je ne suis pas sûr de comprendre tes instructions.

Je dois remplacer
VB:
Print #1, Left(ligne, Len(ligne) - 1)
par
VB:
Print #1, ligne
Correct ?
 
Dernière édition:

eriiiic

XLDnaute Barbatruc
Pas tout à fait.
C'est juste pour la dernière ligne envoyée en impression qu'il faut laisser le ; final qui bloque l'envoi du CRLF.
Il faut continuer à le supprimer pour les autres lignes sinon tu auras tout à la suite sur une ligne unique.

Tu testes :
VB:
If lig =  champ.Rows.Count then
   Print #1, ligne
else
   Print #1, Left(ligne, Len(ligne) - 1)
endif
eric
 

ivan27

XLDnaute Occasionnel
Toujours pas bon, désolé !
J'ai systématiquement une ligne vide en fin de fichier
Lorsque j'importe ce fichier dans une application métier, la ligne vide est détectés et cela pose problèmes.

1028569
 

eriiiic

XLDnaute Barbatruc
Heu oui, désolé.
Il faut bien un ; à la fin, mais pas dans la chaine puisqu'il doit faire partie de la syntaxe de Print # :
VB:
        If lig = champ.Rows.Count Then
            Print #1, Left(ligne, Len(ligne) - 1);
        Else
            Print #1, Left(ligne, Len(ligne) - 1)
        End If
eric
 

ivan27

XLDnaute Occasionnel
On se rapproche de la solution.
La ligne vide est bien supprimée.
cependant, il me manque les valeurs de la colonne de droite après le dernier '';''
J'ai ça
TEST;00461L;;FR;14050;;;
TEST;304;;ES;8150;;;
TEST;00172P;;IT;41012;;;

au lieu de ça
TEST;00461L;;FR;14050;;;5
TEST;304;;ES;8150;;;15
TEST;00172P;;IT;41012;;;3
 

ivan27

XLDnaute Occasionnel
Rebonjour tout le monde.
Eric, le problème venait de moi; une erreur sur une autre ligne.
Ta solution fonctionne parfaitement. Merci beaucoup et bonne fin de journée
Ivan
 

Créez un compte ou connectez vous pour répondre

Vous devez être membre afin de pouvoir répondre ici

Créer un compte

Créez un compte Excel Downloads. C'est simple!

Connexion

Vous avez déjà un compte? Connectez vous ici.

Haut Bas