Suppression de lignes dans export CSV

Bonjour,

Je viens vers vous pour un problème de suppression de lignes dans un export CSV (UTF-8 et séparateur |)

Je souhaite importer une plage de données générée à partir d'un formulaire (de façon automatique).Or des champs sont remplis par défaut sur les lignes non renseignées, et je ne souhaite pas les exporter (cf fichier joint)

4exemple.xlsm (61.13 Ko)

Grace à ce site, un programme m'a été fourmi. J'ai voulu y ajouter un filtre pour n'enregistrer que les lignes saisies dans le formulaire mais cela ne fonctionne pas.

Je vous remercie par avance pour votre aide précieuse!

Caroline

Sub exportFaits()
Dim Plage As Range, oL As Range, Oc As Range, Tmp As String
Dim k As Long
Dim i As Long

    Set Plage = Worksheets("Report automatique").Range("A1").CurrentRegion
    Open ThisWorkbook.Path & "\" & "Test" & ".csv" For Output As #1

    For Each oL In Plage.Rows
        Tmp = ""

        If oL.Cells(1, 1).Value <> "" Then
        For Each Oc In oL.Cells
            Select Case Oc.Column

               Case 6: Tmp = Tmp & Format(Oc.Value, "dd/mm/yyyy") & "|"
               Case 7: Tmp = Tmp & Format(Oc.Value, "hh:mm") & "|"
               Case Else: Tmp = Tmp & CStr(Oc.Text) & "|"

            End Select

        Next
        Tmp = Left(Tmp, Len(Tmp) - 1)
        Print #1, Utf8_Encode(Tmp)
    End If
    Next
    Close
End Sub

Public Function Utf8_Encode(ByRef Txt As String) As String
Dim Data() As Byte, S As String, i As Long

    With CreateObject("ADODB.Stream")   ' init stream
        .Charset = "utf-8"
        .Mode = adModeReadWrite
        .Type = adTypeText
        .Open
        .WriteText Txt                  ' write bytes into stream
        .Flush
        .Position = 0                   ' rewind stream and read text
        .Type = adTypeBinary
        .Read 3                         ' skip first 3 bytes as this is the utf-8 marker
        Data = .Read()
        .Close                          ' close up and return
    End With

    For i = 0 To UBound(Data)           'Convert back to ascii
        S = S & Chr(Data(i))
    Next i
    Utf8_Encode = S
End Function

Bonjour,

Plutôt que de supprimer les lignes en trop, un essai qui ne prend pas ces lignes au départ:

Dans la Sub exportFaits() supprimer :

Set Plage = Worksheets("Report automatique").Range("A1").CurrentRegion

et remplacer par

For i = 1 To Rows.Count
    If Range("A" & i).Value = " " Then Exit For
Next
Set Plage = Worksheets("Report automatique").Range("A1:C" & i - 1)

les formules qui renvoient " " sont toujours des soucis pour déterminer la dernière ligne "utile".

A+

Je vous remercie pour cette réponse très rapide!

J'ai encore une petite question: les lignes sont bien effacées mais le "|" reste. Pouvez-vous m'aider?

Un grand merci par avance!

Caroline

Pas d'anomalie sur le classeur exemple fourni et les modifications de code proposées.

Peut-être le souci provient des données réelles que vous utilisez ?

A voir avec ces données

Merci pour cette nouvelle réponse!

N'étant pas très douée, pouvez-vous m'envoyer le programme qui fonctionne?

J'ai appliqué vos conseils mais les pipes sont toujours présents sur les lignes vides. Un grand merci une nouvelle fois!

on va faire l'inverse:

vous déposez le classeur en défaut avec le code que vous avez modifié, et je regarde

A+

Oui, ce sera mieux, vu mon faible niveau de connaissances en vba!

Le voici!

Merci,

Caroline

4exemple.xlsm (61.96 Ko)

Le classeur est le même que le premier, le code est correctement modifié.

je viens de tester sur ce dernier classeur transmis, le fichier csv ne contient bien que les lignes significatives . La dernière étant:

2328/01/201715:55

Avant de lancer le test j'ai modifié deux choses qui en principe n'ont pas d'incidence sur le résultat:

1- j'ai modifié le chemin de création du fichier csv (pour ne pas courir partout ...)

2- j'ai supprimé le fichier csv déjà existant dans le répertoire (tests d'hier); mais une nouvelle génération "écrase" la précédente...

Êtes vous sûr que le csv consulté n'est pas un fichier issu d'avant la modif dans un autre répertoire?

A+

Bonsoir,

Je vous remercie pour tout le temps que vous avez consacré à ma demande!

Avant de vous répondre j'ai essayé de comprendre ce qui n'allait pas et je me suis aperçu que ma demande était mal formulée:

Je ne souhaite pas que les lignes où la colonne "Identifiant" n'est pas renseignée soit effacées dans le fichier excel, mais dans le fichier csv crée par la macro.

M'excusant pour la mauvaise formulation de ma demande, je vous remercie une nouvelle fois pour votre aide!

Caroline

Je ne souhaite pas que les lignes où la colonne "Identifiant" n'est pas renseignée soit effacées dans le fichier excel, mais dans le fichier csv crée par la macro.

Aucune ligne n'est effacée . Le classeur exemple.xlsm n'a été modifié que dans sa partie code et uniquement pour que le fichier csv ne reçoive pas de lignes "vides" . En aucun cas les données du classeur ne sont altérées !

Si, maintenant, vous voulez conserver le code de la macro exportFaits() comme à l'origine et avoir une nouvelle macro qui efface les lignes "vides" du fichier csv, c'est faisable ... mais il serait dommage qu'une macro génère des lignes en trop qui devront être supprimées par une autre macro , non...?

Bonjour,

Je vous remercie pour tout le temps que vous avez consacré à ma demande!

Malheureusement, je n'obtiens pas les mêmes résultats que vous lorsque je lance la macro. Je pense que mes connaissances sont très incomplètes, ce qui doit expliquer cela!

Je vais m'en tenir là , ne voulant pas abuser de votre temps et gentillesse.

Caroline

Je ne comprends pas qu'avec les mêmes données et la même macro on obtienne des résultats différents ?

ça n'a rien à voir avec un niveau de connaissance...

et puis, on a tous débuté....

Bonne suite

Rechercher des sujets similaires à "suppression lignes export csv"