Export CSV et suppression lignes vides

Bonjour,

Je dispose d'un fichier Excel dans lequel je souhaite exporter une feuille au format CSV.

Cette feuille reprend les données d'une autre feuille de façon automatique (avec le fichier ci-joint, c'est peut être plus clair!).

J'ai crée un bouton avec une macro, mais le fichier généré contient des lignes sans données, avec uniquement les séparateurs de texte (pipe).Or j'aimerai que ces lignes vides n'apparaissent pas.

Pouvez vous m'aider à résoudre ce problème? Je précise que je "bricole" en vba, je n'ai pas de connaissances solides!

Un grand merci par avance!

Bien à vous,

Caroline

14export-csv.zip (134.67 Ko)

Bonjour,

Pourquoi toutes ces lignes vides ?

EDIT : Ne me répondez pas que c'est pour y mettre une formule qui crée des vides !

En gros ce que je veux savoir c'est pourquoi vous ne créez pas une macro qui importe juste les données (pas des vides...)

Pour reformuler différemment votre problème ce n'est pas la macro mais la feuille que vous ne voulez pas modifier ?

A+

A l'origine, je voudrais exporter que certaines colonnes d'une feuille excel.

Du coup, j'ai crée une autre feuille Excel avec les colonnes souhaitées (car je ne sais pas le programmer en vba qui permet de sélectionner des colonnes), en copiant les données de la feuille "source". Je ne sais pas pourquoi, lorsque je génère le fichier CSV, toutes ces lignes vides apparaissent(sur la feuille Excel, il y a des formules derrière ces lignes vides)

J'espère que je ne suis pas trop confuse...merci pour votre aide!

Ça j'avais bien compris mais pourquoi créer ces formules qui génère des vides : YAKA créer votre CSV à partir de la feuille "source" ?

YAKA remplacer :

Set Plage = Worksheets("Ne_pas_modifier").Range("A1").CurrentRegion

par :

Set Plage = Worksheets("Source").Range("A1").CurrentRegion

et ça marche très bien...

A+

Merci pour votre réponse!

Le problème, c'est que dans la feuille "Source", je ne veux pas exporter toutes les colonnes (je joins un nouveau fichier avec une colonne supplémentaire).

Je ne voudrai exporter que les colonnes 1 et 2 alors qu'il y en a une 3ème.

6export-csv.zip (133.69 Ko)

Mes excuses si je n'ai pas joint un fichier suffisamment explicite dès le départ. Merci pour votre aide (et patience!)

Tu fais quelque chose comme ça :

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

    Set Plage = Worksheets("Source").Range("A1").CurrentRegion
      With Plage
        Set Plage = .Resize(.Rows.Count, 2)
      End With

    fich = ThisWorkbook.Path & "\" & "Test" & "_" & Format(Now, "dd_mm_yyyy") & ".csv"
    Open fich For Output As #1
'Le reste sans changement

Bon après je me pose beaucoup de question sur le pourquoi sur cette macro d'export bien compliquée mébon...

A+

Je vous remercie pour votre aide précieuse!

J'ai une question complémentaire: sur la feuille source, j'ai modifié la 2ème colonne en mettant une formule sur 100 premières cellules (voir pj)

0export-csv.zip (190.78 Ko)
0export-csv.zip (190.78 Ko)

.et là, lorsque je fais tourner la macro, je retombe sur mon pb de départ. Pouvez-vous m'éclairer? Merci!

Moi non plus, je ne comprends pas pourquoi cette macro est si compliquée. Mais je ne maîtrise pas bien VBA et j'ai bricolé un programme en trouvant des bouts de programme sur internet.

Si vous utilisez des formules qui donne à vos cellules l'apparence de cellules vides. Les cellules sont malgré tout occupées.

De la sorte elle sont comptabilisées comme tel dans CurrentRegion.

Il faut alors définir votre plage différemment. Je le ferai dans un moment et reviendrai vers vous avec un code modifié.

Cependant j'ai quand même un problème :

Votre macro fait état de données incohérentes avec votre modèle :

        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

Il faut fournir une fichier cohérents avec le code ! Dans l'immédiat je ne sais pas comment interpréter ces incohérences !

Sur la complexité de votre macro, cela dépend beaucoup du besoin à quoi vous sert cet export en UTF8 ? Je n'avais encore jamais éprouvé cette nécessité !

Et les pipes ? En voilà une drôle d'idée. A quoi cela peut-il bien servir ?

Et pourquoi pas de délimiteur en fin de ligne. Votre cahier des charges est-il réellement aussi contraignant ?

Je vous remercie infiniment pour le temps que vous passer à m'aider et pour ces explications

Le fichier que j'ai mis en pièce jointe n'est qu'un extrait du fichier réel sur lequel je travaille. Il comporte des dates et heures qui doivent être réécrit au format indiqué par la macro.

Pour les séparateurs et l'encodage, je dois respecter un cahier des charges strict, je ne peux pas le modifier.

Merci encore!

Oui mais dans ce cas votre fichier joint ne sert à rien : Ce ne sont ni les bonnes colonnes, ni le même type de données...

Le moins que vous puissiez faire c'est joindre un fichier qui correspond à vos données !

La confidentialité ne joue pas pour des séries de dates ou d'heures.

En revanche j'ai un besoin absolu de données qui physiquement corresponde à la "géographie" de votre fichier source.

Pour l'UTF8 je ne discute pas bien que j'en doute un peu, mais après tout il se peut que votre interlocuteur ait quelque vagues notions de ce dont il a besoin...

Mais sur cette première partie c'est n'importe quoi ! Réagissez et fournissez moi quelque chose de cohérent ou je vous plante là : J'ai assez perdu de temps avec ces bêtises.

Voici donc un fichier plus cohérent.

8test.zip (1.11 Mo)

Merci encore.

5test.zip (1.11 Mo)

Voici la macro finale (en principe !)

Sub exportTest()
Dim Plage As Range, oL&, oC&, Sep$, Tmp$, Fich$, Arr
   Sep = "|"
    Set Plage = Worksheets("Base").Range("A1").CurrentRegion
    With Plage
        Set Plage = .Resize(.Rows.Count, 28)
      End With
   Arr = Plage.Value2
    Fich = ThisWorkbook.Path & "\" & "Essais" & "_" & Format(Now, "dd_mm_yyyy") & ".csv"
    Open Fich For Output As #1
    For oL = 1 To UBound(Arr)
      If Arr(oL, 1) <> "" Then
        Tmp = ""
           For oC = 1 To 28
            Select Case oC
               Case 6: Tmp = Tmp & Format(Arr(oL, oC), "dd/mm/yyyy") & Sep
               Case 7: Tmp = Tmp & Format(Arr(oL, oC), "hh:mm") & Sep
               Case Else: Tmp = Tmp & CStr(Arr(oL, oC)) & Sep
            End Select
        Next
        Tmp = Left(Tmp, Len(Tmp) - 1)
        Print #1, Utf8_Encode(Tmp)
      End If
    Next
    Close
MsgBox ("Le fichier des faits a été crée avec succès")
End Sub

Si c'est Ok et si tu peux m'expliquer à quoi sert la conversion en UTF8 ? Je suis preneur : Non seulement je me coucherai moins bête mais en plus je garderai ce code sous le coude pour resservir le cas échéant...

A+

Tout marche parfaitement, merci beaucoup!

Les fichiers csv sont destinés à être importés dans une application web, c'est peut être la raison pour laquelle il faut encoder en UTF8.Malheureusement, je n'ai pas davantage d'explications à vous donner

Très bonne journée,

Caroline

Merci pour ce retour.

C'est bience que je supposai...

A+

Merci pour ce retour.

C'est bien ce que je supposai...

A+

Rechercher des sujets similaires à "export csv suppression lignes vides"