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 :

EXCEL - VBA queryTables - chargement CSV avec saut ligne (LF) dans les colonnes - Chargement incorrect


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé

    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    1 031
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 1 031
    Billets dans le blog
    45
    Par défaut EXCEL - VBA queryTables - chargement CSV avec saut ligne (LF) dans les colonnes - Chargement incorrect
    Bonjour,

    J'ai saisie un jeu de données dans Excel avec dans des cellules des retour ligne (LF)

    Nom : DonneesSaisiesDansExcel.JPG
Affichages : 85
Taille : 14,3 Ko



    Je l'ai sauvegardé sous CSV (point virgule) DataCRLF.zip
    Nom : DonneesEnrgCSV.JPG
Affichages : 75
Taille : 15,7 Ko



    Mais quand je charge le CSV via le code VBA
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    Sub fUploadCSV()
     
        With ActiveSheet.QueryTables.Add(Connection:= _
            "TEXT;C:\Users\monpz\OneDrive\Desktop\data.csv", Destination:=Sheets(3).Range("$D$1"))
            .Name = "data"
            .FieldNames = True
            .RowNumbers = False
            .FillAdjacentFormulas = False
            .PreserveFormatting = True
            .RefreshOnFileOpen = False
            .RefreshStyle = xlInsertDeleteCells
            .SavePassword = False
            .SaveData = True
            .AdjustColumnWidth = True
            .RefreshPeriod = 0
            .TextFilePromptOnRefresh = False
            .TextFilePlatform = 850
            .TextFileStartRow = 1
            .TextFileParseType = xlDelimited
            .TextFileTextQualifier = xlTextQualifierDoubleQuote
            .TextFileConsecutiveDelimiter = False
            .TextFileTabDelimiter = False
            .TextFileSemicolonDelimiter = False
            .TextFileCommaDelimiter = True
            .TextFileSpaceDelimiter = False
            .TextFileColumnDataTypes = Array(1, 1)
            .TextFileTrailingMinusNumbers = True
            .Refresh BackgroundQuery:=False
        End With
    End Sub

    Les sauts de ligne (LF) sont interprétés comme des lignes supplémentaires -> un chargement incorrect

    Nom : DonneesChargéesDansExcel.JPG
Affichages : 85
Taille : 13,2 Ko


    Comment charger le fichier correctement ?

  2. #2
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 176
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Je n'ai jamais ouvert un fichier csv de cette façon mais avec Power Query, cela fonctionne parfaitement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    let
        Source = Csv.Document(File.Contents("C:\Users\Philippe\Downloads\DataCRLF\DataCRLF.csv"),[Delimiter=";", Columns=2, Encoding=1252, QuoteStyle=QuoteStyle.Csv]),
        #"Type modifié" = Table.TransformColumnTypes(Source,{{"Column1", type text}, {"Column2", type text}})
    in
        #"Type modifié"
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  3. #3
    Membre Expert
    Inscrit en
    Décembre 2002
    Messages
    993
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 993
    Par défaut
    Bonjour, je ne sais pas si ça résoudra ton problème mais je détecte une petite erreur.
    Tu as écrit .TextFileCommaDelimiter = True et .TextFileSemicolonDelimiter = False alors que ça devrait être l'inverse.

  4. #4
    Membre éprouvé

    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    1 031
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 1 031
    Billets dans le blog
    45
    Par défaut
    Citation Envoyé par Franc Voir le message
    Bonjour, je ne sais pas si ça résoudra ton problème mais je détecte une petite erreur.
    Tu as écrit .TextFileCommaDelimiter = True et .TextFileSemicolonDelimiter = False alors que ça devrait être l'inverse.
    Bonjour FRANC,

    Merci pour ton observation et j'ai modifié mon post initial suite à ta remarque car le fichier est bien avec des "COMMA"

  5. #5
    Membre éprouvé

    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    1 031
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 1 031
    Billets dans le blog
    45
    Par défaut
    Citation Envoyé par Philippe Tulliez Voir le message
    Bonjour,
    Je n'ai jamais ouvert un fichier csv de cette façon mais avec Power Query, cela fonctionne parfaitement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    let
        Source = Csv.Document(File.Contents("C:\Users\Philippe\Downloads\DataCRLF\DataCRLF.csv"),[Delimiter=";", Columns=2, Encoding=1252, QuoteStyle=QuoteStyle.Csv]),
        #"Type modifié" = Table.TransformColumnTypes(Source,{{"Column1", type text}, {"Column2", type text}})
    in
        #"Type modifié"
    Bonjour Philippe,

    Merci pour ta solution avec PowerQuery. Par contre, je n'ai pas trouvé de tutos sur le code PowerQuery, des pistes à me proposer ?

    De plus comment s'articule le code PowerQuery / VBA ? Sont-ils totalement indépendants l'un de l'autre ?

    Nom : PowerQryEditor.JPG
Affichages : 105
Taille : 174,2 Ko

    Merci par avance

  6. #6
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 176
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Merci pour ta solution avec PowerQuery. Par contre, je n'ai pas trouvé de tutos sur le code PowerQuery, des pistes à me proposer ?
    Pour un usage simple, le code est généré automatiquement comme on peut le faire avec l'enregistreur de macros
    Par exemple pour charger un fichier csv, il suffit de cliquer sur l'onglet [Données] et ensuite sur la commande A partir d'un fichier texte/CSV et ensuite choisir Transformer les données dans la boîte de dialogue qui va apparaître

    Nom : 231025 dvp PQ CSV.png
Affichages : 61
Taille : 21,0 Ko

    Le langage de Power Query est le langage M.
    Il y a des milliers de tutois/vidéos sur le sujet sur le Web comme par exemple la chaîne YouTube "Wise Cat" de Boris Noro
    Il y a une rubrique dédiée à Power Query sur ce site https://www.developpez.net/forums/f2...e/excel/power/


    De plus comment s'articule le code PowerQuery / VBA ? Sont-ils totalement indépendants l'un de l'autre ?
    On peut automatiser la récupération de plusieurs fichiers (Texte/CSV, Excel, Access, etc.) sans passer par du VBA uniquement avec Power Query, cela va 100 fois plus vite que de créer du code VBA mais on peut par exemple s'il le faut, avoir une ligne VBA pour actualiser les requêtes Power Query.
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  7. #7
    Membre éprouvé

    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    1 031
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 1 031
    Billets dans le blog
    45
    Par défaut
    Encore merci pour ton aide précieuse Philippe !

  8. #8
    Membre éprouvé

    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    1 031
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 1 031
    Billets dans le blog
    45
    Par défaut
    J'ai testé d'autres méthodes qui par contre fonctionnent avec

    • sCnx = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & sPath & ";Extended Properties='text;HDR=YES;FMT=TabDelimited'" '---->OK _
    • sCnx = "Driver=Microsoft Access Text Driver (*.txt, *.csv);Dbq=" & sPath & "; Extensions=asc,csv,tab,txt;" '---->OK _
    • sCnx = "Driver={Microsoft Text Driver (*.txt; *.csv)};Dbq=" & sPath & ";Extensions=asc,csv,tab,txt;" '---->OK


    Liens utiles
    https://www.connect strings.com/text-file
    connect strings/microsoft-jet-ole-db-4-0/
    connect strings/ace-oledb-12-0/

    Nom : DonneesEnrgCSV2.JPG
Affichages : 88
Taille : 16,9 Ko---- Nom : DonneesChargéesDansExcel2.JPG
Affichages : 85
Taille : 14,2 Ko

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    Sub fUploadCSVwSQL()
     
        Dim oCnx As New ADODB.Connection
        Dim oRset As New ADODB.Recordset
     
        Dim sCnx As String, sSQL As String, sPath As String, sFileName As String, sPathFile As String
     
        Sheets(3).Cells.Clear
     
        sPath = "C:\Users\monpz\OneDrive\Desktop\"
        sFileName = "data.csv"
        sPathFile = sPath & sFileName
     
        '---------------------------------------------------------------------------------------------------------- _
        Méthodes possibles _
        ----------------------------------------------------------------------------------------------------------
        sCnx = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & sPath & ";Extended Properties='text;HDR=YES;FMT=TabDelimited'" '---->OK _
        sCnx = "Driver=Microsoft Access Text Driver (*.txt, *.csv);Dbq=" & sPath & "; Extensions=asc,csv,tab,txt;" '---->OK _
        sCnx = "Driver={Microsoft Text Driver (*.txt; *.csv)};Dbq=" & sPath & ";Extensions=asc,csv,tab,txt;" '---->OK
     
     
     
        oCnx.Open sCnx
     
        sSQL = "SELECT * From " & sFileName
     
        oRset.Open sSQL, oCnx
     
        With Sheets(3)
            .Range("A2").CopyFromRecordset oRset
            For Each oFld In oRset.Fields
                .Range("A1").Offset(0, i) = oFld.Name
                i = i + 1
            Next
        End With
     
        oRset.Close
        oCnx.Close
     
    End Sub

Discussions similaires

  1. Réponses: 0
    Dernier message: 22/10/2023, 20h41
  2. Ouvrir fichier csv avec saut de ligne dans les champs
    Par Coco47 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 02/12/2020, 18h50
  3. Réponses: 18
    Dernier message: 04/11/2015, 14h54
  4. Excel 2010 Copier coller celulle avec condition ligne par ligne
    Par gilles171 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 17/11/2014, 10h42
  5. [XSLT] XML -> CSV avec premiere ligne d'entete ?
    Par Chekov dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 31/01/2009, 18h47

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