Microsoft 365 Effacer ligne sans date fichier texte via VBA excel

Fred999

XLDnaute Nouveau
Bonjour,

J'ai un petit souci sur un fichier texte que je crée via une macro VBA excel. (voir ci-dessous)
Il fonctionne bien j'ai toutes les infos mais....
J'ai mis un for i=1 to 100 et évidemment quand j'ai moins de 100 à la fin j'ai des lignes avec des caractères incomplet.
est ce qu'il y a moyen de supprimer les lignes ou il n'y a plus de date parce que le nombre de ligne est variable.
D'avance merci pour votre aide, et pour info je ne suis pas un expert en VBA , en voyant mon code vous l'aurez compris :)
Merci à vous.

Sub Fichier_Texte()
Dim i
Open "C:\Export\Test1.txt" For Output As #1
For i = 1 To 100
Print #1, String(1, "1"); String(1, " "); String(1, "|"); String(1, " ") & Cells(i, 2);
Print #1, String(8, " ") & Cells(i, 7);
Print #1, String(1, " ") & Cells(i, 8);
Print #1, String(5, " ") & Cells(i, 11);
Print #1, String(1, " "); String(1, "-") & Cells(i, 14);
Print #1, String(6, " ") & Cells(i, 17);
Print #1, String(3, " ") & Cells(i, 20);
Print #1, String(3, " ") & Cells(i, 23);
Print #1, String(3, " ") & Cells(i, 26);
Print #1, String(3, " ") & Cells(i, 29);
Print #1, String(3, " ") & Cells(i, 32);
Print #1, ";"
Next i
Close #1
End Sub
 

Fred999

XLDnaute Nouveau
Bonsoir Monsieur Bruno,
Désolé de vous déranger mais vous êtes le seul qui m'a aider sur le site avec ma macro.
J'ai un petit souci sur mon fichier texte je voudrais enlever les lignes vides sans perdre le format de mes espaces car chaque valeur est a
un endroit bien défini parce que le programme qui doit lire ce fichier texte ne reconnais pas les lignes vide ou mise à zéro.
Est ce que vous n'avez pas une solution pour enlever ou déplacer les lignes vides a l'aide de vba?
J'ai mis en pièce jointe le fichier texte en question et ma macro ci-dessous.

Sub Fichier_Texte()
Dim i
Open "C:\Export\Test1.txt" For Output As #1
For i = 1 To 100
Print #1, String(1, "1"); String(1, " "); String(1, "|"); String(1, " ") & Cells(i, 2);
Print #1, String(8, " ") & Cells(i, 7);
Print #1, String(1, " ") & Cells(i, 8);
Print #1, String(5, " ") & Cells(i, 11);
Print #1, String(1, " "); String(1, "-") & Cells(i, 14);
Print #1, String(6, " ") & Cells(i, 17);
Print #1, String(3, " ") & Cells(i, 20);
Print #1, String(3, " ") & Cells(i, 23);
Print #1, String(3, " ") & Cells(i, 26);
Print #1, String(3, " ") & Cells(i, 29);
Print #1, String(3, " ") & Cells(i, 32);
Print #1, ";"
Next i
Close #1
End Sub

D'avance merci pour votre aide,
Bien à vous,
 

Pièces jointes

  • Test1.txt
    5.1 KB · Affichages: 3
  • Test1.txt
    5.1 KB · Affichages: 3

eriiic

XLDnaute Barbatruc
Bonjour à tous,

une possibilité :
VB:
Sub Fichier_Texte()
    Dim i As Long, pl As Range
    Set pl = Range("G1:H1,K1") ' compléter avec les colonnes à contrôler
    Open "C:\Export\Test1.txt" For Output As #1
    For i = 1 To 100
        If Application.CountA(pl.Offset(i - 1)) > 0 Then
            Print #1, String(1, "1"); String(1, " "); String(1, "|"); String(1, " ") & Cells(i, 2);
            Print #1, String(8, " ") & Cells(i, 7);
            Print #1, String(1, " ") & Cells(i, 8);
            Print #1, String(5, " ") & Cells(i, 11);
            Print #1, String(1, " "); String(1, "-") & Cells(i, 14);
            Print #1, String(6, " ") & Cells(i, 17);
            Print #1, String(3, " ") & Cells(i, 20);
            Print #1, String(3, " ") & Cells(i, 23);
            Print #1, String(3, " ") & Cells(i, 26);
            Print #1, String(3, " ") & Cells(i, 29);
            Print #1, String(3, " ") & Cells(i, 32);
            Print #1, ";"
        End If
    Next i
    Close #1
End Sub
compléter la définition de pl, je n'ai mis que les 3 premières.

Tu aurais pu faire l'effort de mettre ce que t'avait indiqué youky...
eric
 

Fred999

XLDnaute Nouveau
Bonsoir eric,
Ok merci pour la solution je vais regarder.
Ce que ma donner Youki et qui fonctionne tres bien est inscrit dans mon code du fichier finalisé , ici c'est la base et le code de test. Désolé.
Merci encore pour votre aide.
Bonne soirée
 

Fred999

XLDnaute Nouveau
Bonsoir Eric,

J'ai essayé le code mais a mon avis je fais une mauvaise manip, je suis pas un pro en VBA chaque jour je découvre de nouvelles chose :)
Dans le fichier j'ai fais le test et effectivement les deux dernières données des cellules que j'ai sélectionner ont été décalé mais devrais s'aligner au même endroit que les autres données car le placement est déterminer pour la lecture de l'application que j'utilise.
Si je peux vous demander est ce qu'il y a moyen de choisir une plage avec une macro genre :
Range("K1").Select
Range(Selection, Selection.End(xlDown)).Select
Range(Selection, Selection.End(xlToRight)).Select
Qui va me sectionnée toutes les cellules avec mes heures en partant de K1 et jusqu’à la fin du tableau qui ce termine en AF et de décaler les données qui sont a coté d'une cellule vide vers la gauche vers la première donnée non vide qu'il rencontre en faite mais qui ce positionne au bon endroit déterminé par le string? ou si vous avez une idée plus simple je suis preneur parce que moi je galère un peu sur ce problème.
J'ai essayé aussi sur mon fichier excel de départ avec une formule si et la fonction non vide et décaler mais je me suis planté:(
J'ai mis le fichier avec le décalage qui c'est fait avec votre code. j'ai mis les cellules
Set pl = Range("K1:N1,Q1,T1,W1,Z1,AC1,AF1") pour le test

Merci beaucoup pour votre aide.
Bonne soirée,
 

Pièces jointes

  • Test1.txt
    6.9 KB · Affichages: 7

eriiic

XLDnaute Barbatruc
Pourquoi tu mets des fichiers txt ?
On est sur un forum excel
Et soit plus clair sur ton besoin parce là on a du mal à trouver le lien avec la demande initiale...
Un seul problème par topic stp.

Cells(i, 7) qui est dans ton code c'est colonne G. Je m'étonne de ne pas voir G1 dans ta plage ?!?
eric
 

youky(BJ)

XLDnaute Barbatruc
Bonjour tous, bonjour Eric,
C'est vrai c'est pas clair . . .
Je remets la macro complète comme signalé dans mon précédent post.
Bruno
VB:
Sub Fichier_Texte()
Dim i,bas
bas=[B65000].end(3).row
Open "C:\Export\Test1.txt" For Output As #1
For i = 1 To bas
Print #1, String(1, "1"); String(1, " "); String(1, "|"); String(1, " ") & Cells(i, 2);
Print #1, String(8, " ") & Cells(i, 7);
Print #1, String(1, " ") & Cells(i, 8);
Print #1, String(5, " ") & Cells(i, 11);
Print #1, String(1, " "); String(1, "-") & Cells(i, 14);
Print #1, String(6, " ") & Cells(i, 17);
Print #1, String(3, " ") & Cells(i, 20);
Print #1, String(3, " ") & Cells(i, 23);
Print #1, String(3, " ") & Cells(i, 26);
Print #1, String(3, " ") & Cells(i, 29);
Print #1, String(3, " ") & Cells(i, 32);
Print #1, ";"
Next i
Close #1
End Sub
 

Fred999

XLDnaute Nouveau
Bonsoir,

Oui désolé je ne suis pas très clair j'essaye d'expliquer mon problème mais ce n'est pas évident avec peu de mot et je me pers moi même.
Donc:
1) je construit un fichier texte a partir d'excel donc c'est pourquoi je suis sur le forum excel et en plus j'utilise des macros.
2) le problème c'est que les lignes vides ne sont pas lues par l'application ou j'exporte le fichier texte.
3) Donc ma question c’était en VBA est ce qu'il est possible de supprimer les lignes vides directement dans le fichier texte a partir du code que j'ai écris mais en gardant les espaces qui son important dans le fichier car l'application lis les données a des endroits bien déterminé.
4) la cellule G n'est pas prise dans mon code car je ne prends que les heures qui commence a K.

J'espère que je suis plus clair pour vous et vous remercie de votre aide précieuse.

Cordialement,
 

Fred999

XLDnaute Nouveau
Bonsoir Youki,

Merci pour votre code il fonctionne très bien et je l'utilise dans mon code final.
J'ai juste un soucis avec les lignes vides que je voudrais supprimer sans faire de décalage dans le fichier texte des autres valeurs.
Monsieur Eric m'a aider avec un code mais qui n'est pas vraiment ce que j'avais besoin ou que j'utilise mal (je me suis pas bien expliquer dans mes poste précédent et du coup il est fâché et me râle dessus :))
Bien à vous,
 

eriiic

XLDnaute Barbatruc
Bonjour,

mais je ne râle pas, je t'invite à être plus clair et à déposer ton fichier excel de travail.
Plutôt que de supprimer les lignes vides, ma proposition n'inscrit que celles qui ont au moins 1 donnée.
VB:
If Application.CountA(pl.Offset(i - 1)) > 0 Then
     ' écriture dans fichier
End If
A condition que tes cellules soient bien vides, et non avec des formules pouvant ramener "". Auquel cas il faut adapter.
eric
 

eriiic

XLDnaute Barbatruc
Bonjour,

ah ben oui, ce n'est plus vide.
Dans ce cas ajoute une colonne concaténant les cellules qui t'intéressent, et teste dessus <>"" pour savoir que tu dois enregistrer cette ligne.
Ou si tu peux aussi les supprimer du fichier original, tu filtres sur les ="" pour supprimer toutes ces lignes. Il ne te restera que les intéressantes
eric
 

Fred999

XLDnaute Nouveau
Bonjour Eric,
Je n'arrive pas a réaliser le filtre sur le fichier excel. je te l'ai mis en copie pour que tu vois mon fichier excel de test.
Donc si tu clic sur création format le fichier excel ce créé pour qu'il soit conforme au format souhaité.
Mais les ligne blanche sont un problème et je n'arrive pas a les supprimer ou a afficher que les cellules ou il y a des données car les blancs ont des formules derrière comme je te l'ai expliqué et je n'arrive pas a faire ton idée qui pour moi est excellente.
Est ce que tu aurais une solution pour que les lignes vide soit supprimer ou que la dernière données a coté des vides ce décale vers la gauche et prennent la place des vides si c'est possible. C'est le dernier problème que j'ai sur ce fichier car tout le reste fonctionne.
D'avance merci pour ton aide.
 

Pièces jointes

  • Test201901.xlsm
    37 KB · Affichages: 3

Discussions similaires

Statistiques des forums

Discussions
315 096
Messages
2 116 184
Membres
112 677
dernier inscrit
Justine11