Importation fichier csv multi-lignes

  • Initiateur de la discussion Initiateur de la discussion hlife
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

hlife

XLDnaute Nouveau
Bonjour,

J'ai un fichier .csv que je désire importer dans EXCEL.
Mon problème est qu'il contient des champs texte qui peuvent comporter plusieurs lignes.
Ces champs sont délimités par des ".

Exemple (voyez l'adresse de Jean):

Nom,Adresse,Téléphone
Jean,"2 rue de la Paix
75002 Paris",606060606
Pierre,"17 rue des Fleurs",102030405

L'importation dans EXCEL génère bien sûr 4 lignes, alors que j'en voudrais 3, comme dans la pièce jointe.

Avez-vous des solutions pour moi? J'ai cherché en vain comment générer via l'import le <Alt><Entrée> de EXCEL.

Merci d'avance

Henri
 

Pièces jointes

  • Xls.jpg
    Xls.jpg
    10.4 KB · Affichages: 100
  • Xls.jpg
    Xls.jpg
    10.4 KB · Affichages: 103
  • Xls.jpg
    Xls.jpg
    10.4 KB · Affichages: 103
  • xls.docx
    xls.docx
    10.1 KB · Affichages: 53
Dernière édition:
Re : Importation fichier csv multi-lignes

Bonjour hlife,

Bienvenue sur XLD,

Je pense qu'il nous faudrait un exemple de CSV (une ou 2 lignes suffit, sans données confidentielles) pour voir le type de retour à la ligne qu'il y a dedans (il y a 2 types de retours à la ligne LF et CR)

Edit : Bonjour Michel 🙂
 
Re : Importation fichier csv multi-lignes

Michel, je viens de rajouter dans mon post un fichier xls.docx (il semble que je ne puisse pas télécharger un fichier .csv ou .txt), qui correspond à mon exemple.
Dans la réalité, mon fichier est le résultat d'un export fait à partir de Google Contacts.

Je devrais pouvoir tester et adapter une solution potentielle suivant que mon fichier d'entrée contienne des CR, LF ou CR/LF.
 
Re : Importation fichier csv multi-lignes

Re , Bonjour Tototiti

Pour joindre un .Csv, il faut le zipper.

Avec un .doc, on ne peux pas faire grand chose car ce n'est pas géré pareil avec Excel.

Donc, un .csv, c'est mieux 🙂.
 
Re : Importation fichier csv multi-lignes

Re

En effet, ce n'est pas simple. Le mieux serait d'ouvrir le fichier en mode séquentiel avec Input et de tester si on a 1 ou 2 Guillemets. Actuellement, je n'ai pas le temps de le faire.

Mais si quelqu'un veut essayer (très bon Travaux pratiques 😱).
 
Re : Importation fichier csv multi-lignes

Je me sens capable d'écrire un petit programme qui re-concatène tout cela, mais comment faut-il coder le caractère de saut de ligne pour qu'il soit interprété comme ALT/ENTREE au moment de l'import dans EXCEL ?
 
Re : Importation fichier csv multi-lignes

Ce que je cherche aujourd'hui, c'est une procédure qui automatise l'opération (à la différence de la manip dans WORD) et qui ne se contente pas de supprimer les CR/LF mais qui insére à la place, à l'intérieur de la cellule EXCEL, le caractère de saut de ligne (ALT/ENTREE).
 
Re : Importation fichier csv multi-lignes

Bonsoir,

Peut-être un truc du genre (à adapter)

VB:
Sub ImportCSV()
Dim FSO As Object, F As Object, F1 As Object, Ligne As String, VraieLigne As String, CompteGuillemets As Long
Dim Wkb As Workbook
    Set FSO = CreateObject("Scripting.Filesystemobject")
    'F est le fichier CSV original --CHEMIN A ADAPTER--
    Set F = FSO.opentextfile("C:\xls.csv", 1, False, -2)
    'F1 est une version modifiée de celui-ci où on enlève les retour à la ligne gênants --CHEMIN A ADAPTER--
    Set F1 = FSO.createtextfile("C:\xls2.csv", True)
    Ligne = ""
    VraieLigne = ""
    'Compteguillemets représente le nombre de guillemets double dans tout le texte du fichier CSV
    CompteGuillemets = 0
    Do Until F.atendofstream
        Ligne = F.readline
        For i = 1 To Len(Ligne)
            If Mid(Ligne, i, 1) = Chr(34) Then
                CompteGuillemets = CompteGuillemets + 1
            End If
        Next i
        'Si retour à la ligne gênant, on le remplace par "µ$§"
        'et on concatène les lignes dans la variable VraieLigne
        VraieLigne = VraieLigne & IIf(Len(VraieLigne) > 0, "µ$§", "") & Ligne
        'Si le compte de guillemets est pair, on écrit la ligne dans F1
        If CompteGuillemets Mod 2 = 0 Then
            F1.writeline VraieLigne
            VraieLigne = ""
        End If
    Loop
    'On ferme les fichiers CSV
    F1.Close
    F.Close
    Set F1 = Nothing
    Set F = Nothing
    Set FSO = Nothing
    'On ouvre le fichier modifié
    Set Wkb = Workbooks.Open(Filename:="C:\xls2.csv", local:=False)
    With Wkb.ActiveSheet
        'On remplace dedans les caractères "µ$§" par des retours dans les cellules
        .Cells.Replace What:="µ$§", Replacement:=Chr(10), LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
        .Cells.EntireRow.AutoFit
    End With
    Set Wkb = Nothing
End Sub
 
Re : Importation fichier csv multi-lignes

Merci beaucoup tototiti2008, je devrais pouvoir me débrouiller avec ce code, tester et poster le résultat des courses pour information. Chr(10) doit être le caractère que je cherchais.

Merci encore
Henri
 
Dernière édition:
Re : Importation fichier csv multi-lignes

Re

Félicitations à Tototiti pour son superbe code 😱.

Une autre technique si tu as bien une séparation par une virgule entre chaque champs. En considérant que tu as ouvert le fichier xls.csv via l'expolrateur.

Code:
Public zone
Sub test()
Sheets("Xls").Copy After:=Sheets(1)
derl = Range("A65536").End(xlUp).Row
Range("A2:A" & derl).Select
zone = Selection.Address
For Each cell In Selection
n = 0
For i = 1 To Len(cell)
If Mid(cell, i, 1) = "," Then n = n + 1
Next
cell.Offset(0, 1) = n
Next
For Each cell In Selection
cell.Select
If cell.Offset(0, 1) = 3 Then GoTo suite
If cell.Offset(0, 1) = 2 Then GoTo suite Else Concatene
suite:
Next
Supprime_Lignes
MEF
End Sub
Sub Concatene()
'Stop
a = ActiveCell: b = ActiveCell.Offset(1, 0)
c = a & " " & b
ActiveCell = c
ActiveCell.Offset(1, 1) = 3
End Sub
Sub Supprime_Lignes()
Range(zone).Select
For Each cell In Selection
cell.Select
If cell.Offset(0, 1) = 3 Then Rows(cell.Row & ":" & cell.Row).Delete Shift:=xlUp
Next
End Sub
Sub MEF()
    Columns("B:B").Select
    Selection.Delete Shift:=xlToLeft
    Columns("A:A").Select
    Selection.TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, _
        TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _
        Semicolon:=False, Comma:=True, Space:=False, Other:=True, FieldInfo:= _
        Array(Array(1, 1), Array(2, 1), Array(3, 1)), TrailingMinusNumbers:=True
        Cells.Select
    Cells.EntireColumn.AutoFit
    Range("A1").Select
End Sub
 
Dernière édition:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Retour