IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Ouvrir fichier csv avec saut de ligne dans les champs


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 103
    Par défaut Ouvrir fichier csv avec saut de ligne dans les champs
    Bonjour à tous,

    J'ai problème avec un fichier csv, extrait d'une base de donnée, qui se retrouve avec des sauts de ligne dans certains champs. Je crois que c'est un problème assez récurent au vu du nombre posts sur le sujet sur le net mais je n'ai pas trouvé de solution satisfaisante.

    Je vous joint le fichier CSV en lui même (j'ai du le renomer en .txt pour pouvoir le joindre mais c'est bien un .csv chez moi)
    poteau_export_02122020_084151_746-light.txt

    Alors voilà si je l'ouvre avec notepad++ on voit qu'il y a un saut de ligne intempestif à la ligne 8 :
    Nom : Notepad++.PNG
Affichages : 1215
Taille : 33,0 Ko

    Quand je l'ouvre directement en double cliquant dessus j'ai le résultat suivant :
    Nom : Doubleclic.PNG
Affichages : 1144
Taille : 39,3 Ko
    Donc il semble que nativement excel arrive a déterminé que ce saut de ligne n'est pas une fin de ligne mais est inclus dans un champ.

    Par contre quand je veux l'ouvrir en vba je n'arrive pas avoir le même résultat.
    Si j'ouvre avec la fonction open :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Workbooks.Open Filename:=wbPath
    J'obtient ça :
    Nom : Open.PNG
Affichages : 1108
Taille : 50,3 Ko
    Non seulement il ne gère pas correctement mon saut de ligne mais en plus il ne gère pas du tout les séparateurs ";".

    Si j'utilise la fonction opentext :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        Workbooks.OpenText Filename:=wbPath, Origin:=xlWindows, _
                StartRow:=1, DataType:=xlDelimited, Semicolon:=True, Local:=True
    J'obtient ça :
    Nom : OpenText.PNG
Affichages : 1089
Taille : 41,2 Ko
    Donc ici les séparateurs ";" sont bien gérés mais pas le saut de ligne.

    Donc je voulais savoir si il existe une manière simple d'ouvrir le fichier en vba comme le fait nativement excel quand je double clic dessus ?

    Sur un ancien projet j'avais mis en place une fonction qui ouvrait le fichier avec OpenText puis je cherchais les saut de ligne et je recomposait moi même mon fichier, mais c'est assez lourd mon fichier csv faisant plus de 70k lignes, donc j'aurais espéré trouver une solution plus simple.
    Images attachées Images attachées  

  2. #2
    Expert éminent

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 574
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Conseil, Formation, Développement - Indépendant

    Informations forums :
    Inscription : Février 2010
    Messages : 8 574
    Par défaut
    Bonjour

    Déjà ton fichier est UTF8 donc ton VBA opentext est incorrect

    De façon générale il est déconseillé d'ouvrir un csv : Excel le traite automatiquement à la mode américaine et ne comprend ni les dates, ni les nombres au format Français

    On l'importe de façon à maîtriser, quitte à casser le lien ensuite

    Tu as quelle version Excel ? Depuis 2016 l'import se fait correctement par défaut via PowerQuery qui peut supprimer le retour ligne si nécessaire. Quitte là aussi à casser le lien ensuite si non utile

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 103
    Par défaut
    Alors au niveau de la version j'ai office 365 version 1808.

    Pour les autres remarques je suis pas sur d'avoir compris.
    Déjà ton fichier est UTF8 donc ton VBA opentext est incorrect
    C'est quoi qui va pas dans mon opentext ?

    On l'importe de façon à maîtriser, quitte à casser le lien ensuite
    Qu'entendez vous par de façon maitrisé ?

  4. #4
    Expert éminent

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 574
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Conseil, Formation, Développement - Indépendant

    Informations forums :
    Inscription : Février 2010
    Messages : 8 574
    Par défaut
    RE
    Citation Envoyé par Coco47 Voir le message
    Alors au niveau de la version j'ai office 365 version 1808.

    Pour les autres remarques je suis pas sur d'avoir compris.

    C'est quoi qui va pas dans mon opentext ? Quand tu importes avec opentext tu dois spécifier le bon encodage : UTF8 ce n'est xlWindows


    Qu'entendez vous par de façon maitrisé ? C'est une façon qui permet de définir précisément ce que tu importes : encodage, séparateur, type des champs et format pour les dates et les nombres, afin de ne pas laisser Excel, conçu par les américains pour les format US, faire n'importe quoi et bousiller les données
    TU as 365 donc Données, A partir d'un fichier texte/CSV.
    Si tu gardes le retour Charger, sinon Transformer les données, ce qui ouvre l'interface PowerQuery
    • tu sélectionnes la colonne Rue, clic droit, Transformer, Nettoyer
    • sors par Fermer et Charger dans, Tableau ou bien, si c'est exploité par TCD, directement TCD

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 103
    Par défaut
    Ok merci je vais regardé pour une meilleure configuration de mon opentext.

    Par contre pour votre solution avec PowerQuery c'est un solution manuelle, non ?

    En fait à la base mon objectif c'est d'ouvrir des fichiers csv, de les nettoyer en supprimant certaines colonnes et en virant les caractères non-supportés, pour ensuite les sauvegardé et les importer dans une base de donnée postgres.

    Moi mon objectif c'est d'automatiser le truc pour avoir à faire le truc pour chaque fichier.

  6. #6
    Expert éminent

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 574
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Conseil, Formation, Développement - Indépendant

    Informations forums :
    Inscription : Février 2010
    Messages : 8 574
    Par défaut
    RE

    Justement PowerQuery peut traiter en une fois tous les fichier d'un dossier

    Un clic pour relancer la requête et tu as tout à jour

    Sinon, si chaque fichier doit rester indépendant tu peux combiner PowerQuery et VBA : les object liès à PowerQuery existent depuis la version 2016

Discussions similaires

  1. Supprimer les sauts de ligne dans les champs texte d'un csv
    Par Razyor dans le forum Débuter avec Java
    Réponses: 3
    Dernier message: 24/07/2018, 14h21
  2. Réponses: 18
    Dernier message: 04/11/2015, 14h54
  3. Réponses: 12
    Dernier message: 29/04/2014, 05h47
  4. inserer un commentaire avec saut de ligne dans un control
    Par jeanboudi dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 20/04/2008, 21h31
  5. Réponses: 3
    Dernier message: 11/06/2007, 11h20

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo