129 votes

Comment faire en sorte qu'Excel interprète la virgule comme un délimiteur par défaut dans les fichiers CSV?

J'ai un certain nombre de fichiers .csv. Certains d'entre eux sont des fichiers délimités par des virgules, d'autres sont des fichiers délimités par des tabulations (peut-être devraient-ils être appelés .tsv ...)

L'extension csv est associée à Excel lorsque Excel est installé. Cependant, si j'ouvre l'un de ces fichiers avec Excel, tout est rejeté dans la même colonne et la virgule n'est pas interprétée comme un délimiteur.

Je peux au lieu de Fichier -> Importer..., sélectionner le fichier, et choisir le mode précis d'interprétation du contenu (délimiteurs, types de données, etc.) Mais la plupart du temps je veux juste regarder le fichier à travers une vue de table claire. Je ne veux pas le traiter avec Excel.

Y a-t-il un moyen de faire en sorte qu'Excel interprète automatiquement le délimiteur et affiche le fichier CSV comme un tableau approprié dès qu'il est ouvert? J'ai besoin de cela pour pouvoir utiliser Excel comme un visionneur rapide pour de tels fichiers.

Je soupçonne qu'il doit y avoir un moyen, sinon Excel ne s'associerait pas aux fichiers CSV.

0 votes

Je comprends vraiment que la réponse choisie répond à votre question, mais la deuxième devrait être mise en évidence car elle offre une solution globale, qui fonctionne pour le partage par email, réseau, etc.

1voto

jumpnett Points 871

J'avais un fichier .csv avec un séparateur ; et des paramètres régionaux définis sur le séparateur de liste ;. Cependant, Excel n'analysait toujours pas les colonnes.

Saisissez ici la description de l'image

Il s'est avéré qu'il s'agissait d'un problème d'encodage. Les fichiers ont été exportés depuis SQL Server Management Studio 2005 et encodés en UCS-2 LE BOM. En utilisant Notepad ++ j'ai changé l'encodage en UTF-8 et tout a commencé à fonctionner.

0voto

Paul Ogilvie Points 163

Pour le néerlandais, j'avais un problème avec Excel 2008 sur Windows 7 qui ne respectait pas la RFC4180 :

"Les champs contenant des sauts de ligne (CRLF), des guillemets doubles et des virgules doivent être enclos entre guillemets doubles."

Un fichier séparé par des virgules avait correctement des champs avec une virgule (séparateur décimal néerlandais) enclos entre guillemets doubles. Dans la configuration néerlandaise, le séparateur décimal est , et le séparateur de liste est ; donc Excel ne pouvait pas lire un fichier avec , utilisé pour les deux (même après avoir explicitement changé le séparateur de liste en , dans le Panneau de Configuration).

L'entrée ressemble à ceci :

"06-07-2017 17:03:18","********",0:01:04,Uitgaand,"0,1879","0,2273","0,0395",21

La solution a été donnée par @user280725 :

Utilisez le bloc-notes pour insérer en première ligne :

sep=,

(Cela signifie que la remarque de l'utilisateur @zakinster dans sa solution n'a plus besoin d'être appliquée.)


Intéressant : avec le fichier csv toujours chargé, si vous définissez maintenant la configuration régionale sur l'anglais américain dans le Panneau de Configuration et enregistrez le fichier, il aura été converti au format anglais américain (virgule comme séparateur de liste et point comme séparateur décimal).

0voto

edj Points 141

Assurez-vous d'inspecter le fichier CSV dans un éditeur simple comme le Bloc-notes pour vérifier qu'il est correctement formaté.

J'ai ajouté cette réponse après avoir résolu un bug stupide où les fichiers CSV que j'avais créés avec VB n'étaient pas ouverts avec des colonnes séparées dans Excel. J'ai découvert que la façon dont j'avais écrit les lignes entourait chaque ligne de guillemets. Excel masquait les guillemets et affichait toute la ligne dans la colonne A, ce qui donnait l'impression qu'il ignorait mes séparateurs de virgule.

0voto

AzizD Points 1

La meilleure façon sera de l'enregistrer dans un fichier texte avec l'extension csv

Sub ExportToCSV()
    Dim i, j As Integer
    Dim Name As String

    Dim pathfile As String

    Dim fs As Object
    Dim stream As Object

    Set fs = CreateObject("Scripting.FileSystemObject")
    On Error GoTo fileexists

    i = 15
    Name = Format(Now(), "ddmmyyHHmmss")
    pathfile = "D:\1\" & Name & ".csv"

    Set stream = fs.CreateTextFile(pathfile, False, True)

fileexists:

    If Err.Number = 58 Then
        MsgBox "Le fichier existe déjà"
        'Votre code ici
        Return
    End If
    On Error GoTo 0

    j = 1
    Do Until IsEmpty(ThisWorkbook.ActiveSheet.Cells(i, 1).Value)

        stream.WriteLine (ThisWorkbook.Worksheets(1).Cells(i, 1).Value & ";" & Replace(ThisWorkbook.Worksheets(1).Cells(i, 6).Value, ".", ","))

        j = j + 1
        i = i + 1
    Loop

stream.Close

End Sub

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X