XL 2016 supprimer ligne vide sur un fichier csv avec un code vba

Excelo92

XLDnaute Nouveau
Bonjour,
J'ai un fichier IMPDV.csv qui se trouve dans C:
Je suis au bout de mon code et il me manque une chose que je n'arrive pas à solutionner
Je n'arrive pas à supprimer les 2 dernières ligne vide (par code vba) (voir fichier IMPDV)
La présence de ces lignes vides génère une erreur lorsque je veux l'intégrer dans notre système de paye
il y a plusieurs fichiers dans ce cas (la manipulation manuelle serait trop longue)
J'ai procédé à plusieurs tentatives mais elles ont échoué.
Avez vous une solution à proposer?
merci pour votre aide
 

Pièces jointes

  • suppression ligne vide.png
    suppression ligne vide.png
    35.2 KB · Affichages: 38
  • IMPDV.zip
    421 bytes · Affichages: 3

job75

XLDnaute Barbatruc
Bonjour Excelo92,

J'ai ouvert le fichier IMPDV.csv que vous avez joint en exécutant la macro :
VB:
Sub Ouvrir_CSV()
Workbooks.Open ThisWorkbook.Path & "\IMPDV.csv"
End Sub
Il est alors facile de vérifier avec NBVAL que les lignes 10 et 11 sont totalement vides.

Ce n'est donc pas le bon fichier, joignez celui qui vous pose problème.

A+
 

Pounet95

XLDnaute Occasionnel
Bonsoir Excelo92, job75
La copie d'écran montre que le fichier est ouvert avec Notepad+
Les 2 dernières lignes sont effectivement vides. Pour les supprimer il y a le menu Edition/Ligne/Enlever les lignes vides ( 2 options avec ou sans blancs).
Il y a aussi possibilité d'enregistrer une macro et la rejouer sur chacun des fichiers.
Peut-être y a-t-il une possibilité de faire jouer tout ça en vba ?
Claude alias Poune95
 

Excelo92

XLDnaute Nouveau
Bonjour Job75, Pounet95
effectivement en faisant : menu Edition/Ligne/Enlever les lignes vides , les lignes vides sont bien supprimées. Idéalement faire cela en vba (code sur un fichier excel) m'arrangerait.

1) ouvrir le fichier
Workbooks.Open ThisWorkbook.Path & "C:\IMPDV.csv"
2) supprimer les lignes en code vba qui qui enclencherait l'action suivante :
menu Edition/Ligne/Enlever les lignes vides
3)fermer le fichier IMPDV.csv

Traduit en code vba, je ne sais pas.
Si vous avez des infos, je suis preneur
Cordialement
 

job75

XLDnaute Barbatruc
Salut Pounet95,

Téléchargez les fichiers zippés joints dans le même dossier.

1) Ouvrez le fichier CSV avec le bloc-notes.

Vous constaterez que les lignes 10 et 11 contiennent chacune une série de 31 points-virgules qui correspondent à 32 colonnes vides.

2) Refermez le fichier CSV, ouvrez le fichier .xlsm et cliquez sur le bouton, il lance la macro :
VB:
Sub SupprimerLignesVidesFichiersCSV()
Dim chemin$, fichier$, n%
If MsgBox("Supprimer les lignes vides des fichiers CSV ?", 4) = 7 Then Exit Sub
chemin = ThisWorkbook.Path & "\"
fichier = Dir(chemin & "*.csv") '1er fichier du dossier
Application.ScreenUpdating = False
While fichier <> ""
    With Workbooks.Open(chemin & fichier).Sheets(1)
        n = Len(.Cells(1)) - Len(Replace(.Cells(1), ";", "")) 'nombre de points-virgules
        .Columns(1).Replace String(n, ";"), "", xlWhole 'efface les n points-virgules
        .Parent.Close True
    End With
    fichier = Dir 'fichier suivant
Wend
End Sub
3) Rouvrez le fichier CSV avec le bloc-notes et voyez les lignes 10 et 11.

A+
 

Pièces jointes

  • Fichiers.zip
    15.1 KB · Affichages: 3

job75

XLDnaute Barbatruc
Dans le dossier joint le fichier "Autre CSV.csv" a sa ligne 5 vide.

Il ne suffit pas d'effacer les 31 points-virgules, il faut aussi supprimer cette ligne donc utiliser :
VB:
Sub SupprimerLignesVidesFichiersCSV()
Dim chemin$, fichier$, n%
If MsgBox("Supprimer les lignes vides des fichiers CSV ?", 4) = 7 Then Exit Sub
chemin = ThisWorkbook.Path & "\"
fichier = Dir(chemin & "*.csv") '1er fichier du dossier
Application.ScreenUpdating = False
While fichier <> ""
    With Workbooks.Open(chemin & fichier).Sheets(1)
        n = Len(.Cells(1)) - Len(Replace(.Cells(1), ";", "")) 'nombre de points-virgules
        .Columns(1).Replace String(n, ";"), "", xlWhole 'efface les n points-virgules
        On Error Resume Next 'si aucune SpecialCell
        .Columns(1).SpecialCells(xlCellTypeBlanks).EntireRow.Delete 'supprime les lignes vides
        On Error GoTo 0
        .Parent.Close True
    End With
    fichier = Dir 'fichier suivant
Wend
End Sub
 

Pièces jointes

  • Fichiers(2).zip
    15.9 KB · Affichages: 3

Discussions similaires

Réponses
3
Affichages
306

Statistiques des forums

Discussions
311 733
Messages
2 082 019
Membres
101 872
dernier inscrit
Colin T