Ajout Retour-Chariot

Bonjour,

Je me permets de solliciter votre aide pour une petite macro. Après 2 jours de recherche Google, je me rends à l'évidence que j'ai besoin d'un coup de main.

Ma problématique :

Je dois transformer un fichier Excel de travail qui contient plusieurs centaines de lignes en fichier txt.

La dernière ligne doit se finir par un retour-chariot. Je n'arrive pas à trouver la solution, et ce retour-chariot est obligatoire pour valider l'intégration du fichier..

Ci dessous, voici la macro que j'utilise pour transformer mon Excel en txt.

La macro marche bien mais je me retrouve avec un saut de ligne quand je l'ouvre dans notepad, ce qui entraine un refus de structure par mon partenaire.

Merci d'avance pour votre aide.

Cordialement.

Sub exportefichier()

Dim i As Integer 'lignes
Dim j As Integer 'colonnes
Dim nbLignes As Integer
Dim strLigne As String

nbLignes = Selection.Rows.Count

Open "C:\Users\****\OneDrive -********\Documents\Test Extraction.txt" For Output As #1

For i = 1 To 439
     strLigne = ""
     For j = 1 To 27
         strLigne = strLigne & Cells(i, j).Value
     Next j
     Print #1, strLigne

Next i
 Close #1
End Sub

Pour ajouter un retour chariot après la derrière ligne, il faut insérer la ligne suivante, mais je ne vois pas le rapport avec le saut de ligne. :

     Next j
     If i = 439 then strLigne = strLigne & chr(10) & chr(13)
     Print #1, strLigne

Merci pour la réponse.

Le rapport avec le saut ligne ? Le presta à qui j'envois le fichier m'a indiqué : Pas de ligne vide en fin de fichier, et retour chariot obligatoire sur la ligne de fin.

Du coup si j'ai bien compris, le saut de ligne va créer une ligne vide en fin de fichier, et pas le retour-chariot.

Est-ce bien cela ?

Prenons l'exemple que vous nous avez donné : sauvegarder dans un fichier texte la concaténation des plages "A:AA" (27 cellules) et ce sur les 439 premières lignes de la feuille.
Pour ne pas avoir de saut de ligne à la fin du fichier, il ne faut pas sauvegarder une ligne sans contenu en dernière ligne.
Pour cela, on remonte de la ligne 439 à la 1 et on quitte la boucle dès qu'on tombe sur la 1ère ligne vide. S'il n'y en a pas, l'index vaudra 439. Si les lignes 437 à 439 sont vides, l'index vaudra 436
Dès qu'on connaît la valeur de l'index, on applique votre algo, cette fois en descendant de 1 à index, on ajoute le Chr(10) & chr(13) dont je vous ai parlé à la dernière ligne et le tour est joué : pas de saut de ligne à la fin et un retour chariot final.

Alors j'ai tenté avec votre code, et cela rajoute 2 lignes vides avec retour-chariot et saut de ligne.

J'ai essayé comme ceci en supprimant le Chr10, que j'admets ne pas comprendre. (désolé si je percute pas très vite, je n'ai pas de formation VBA, j'essaie juste de bidouiller sur le tas..)

Sub exportefichier()

Dim i As Integer 'lignes
Dim j As Integer 'colonnes
Dim nbLignes As Integer
Dim strLigne As String

nbLignes = Selection.Rows.Count

Open "C:\Users\****\OneDrive -********\Documents\03 - Banque & Assurance\BPCE Factor\Test Extraction GRL.txt" For Output As #1
For i = 1 To 439
    strLigne = ""
    For j = 1 To 27
        strLigne = strLigne & Cells(i, j).Value
    Next j
     If i = 439 Then strLigne = strLigne & Chr(13)
    Print #1, strLigne

Next i

Close #1

End Sub

en ouvrant j'ai bien ma ligne 439 qui se termine bien par CR seulement, mais il m'ajoute quand même une ligne 440 avec CR LR.

capture

Ou peut être je n'ai pas inséré votre code au bon endroit...

Essayez ceci, sous votre bloc-notes vous aurez 437 lignes dont 436 pleines :

24extraction.xlsm (71.21 Ko)

C'est pas mal mais si je me fie aux retours de mon prestataires, cela coincerait.

La dernière ligne se finie par "CR LR", et selon ses dires, il faudrait que "CR" (ne me demandez pas pourquoi.. je ne saisie pas la nuance..)

Mais sinon le code est top, car s'adapte au nombre de ligne (qui changera à chaque envoi).

capture

Les 3 options sont les suivantes :

options

J'ai tenté d'adapter votre requête à mon fichier mais j'ai un souci, des colonnes vides ou avec des espaces sont supprimées. Je dois malheureusement respecter un nombre de caractère précis par ligne (275 dans ce cas). J'essaye de comprendre en supprimant des lignes de votre code pour éviter cette suppression mais sans succès..

En fait votre code est top, il me faudrait juste :

- ne pas supprimer les colonnes vides ou avec des espaces

- rajouter &Chr(10) & Chr(13) au bon endroit dans la requête (j'ai tenté à 2 endroits différents mais ca boucle et réécrit des lignes en double..)

Si vous pouvez m'éclairer comment faire pour ces 2 points, je vous en serai reconnaissant.

Encore merci pour votre aide.

Vous ne nous aviez pas tout dit au départ.
Je vous invite maintenant à vous pencher sur les fichiers à accès aléatoire : un type de 275 caractères semble correspondre à votre besoin.

Effectivement je ne l'avais pas précisé car ce n'était pas la problématique.. Cette limite de 275 caractères était déjà gérée dans mon fichier Excel de travail.

J'ai essayé d'adapter votre code à mon fichier, et c'est la que le problème s'est posé.

Rechercher des sujets similaires à "ajout retour chariot"