Sortie incohérente pour les colonnes vides dans un fichier CSV (Microsoft Excel)
Mark a remarqué une chose étrange lors de la création de fichiers CSV avec Excel: les fichiers ne sont pas toujours cohérents dans la façon dont ils terminent chaque ligne dans les données de sortie. Lorsqu’il crée un fichier CSV contenant peut-être 70 champs (colonnes) de données, puis visualise le fichier CSV dans un éditeur de texte, il a remarqué que les enregistrements contiennent tous des retours chariot, mais à des endroits différents. Certains enregistrements ont une chaîne de virgules représentant des champs vides, puis se terminent à la «bonne» place; d’autres se terminent juste après la dernière colonne remplie; certains ont quelques virgules, mais pas assez pour tous les champs vides. Mark se demande pourquoi cela se produit et comment il peut obtenir que les fichiers CSV contiennent un nombre cohérent de champs de sortie.
Un moyen relativement simple de contourner le problème consiste à inclure un champ «factice» entièrement rempli dans vos données, avant de les enregistrer au format CSV. Par exemple, si votre tableau contient 70 colonnes, à la cellule A71, entrez un point. Copiez le contenu de cette cellule vers le bas, pour autant de lignes que vous avez dans le tableau. Lorsque vous exportez ensuite la feuille de calcul au format CSV, Excel inclura le champ factice, mais plus important encore, inclura le nombre approprié de délimiteurs de champ (virgules) avant ce champ final dans chaque enregistrement.
Si vous ne voulez pas le champ factice, vous pouvez essayer ceci:
-
Sélectionnez l’une des cellules de votre ligne d’en-tête.
-
Appuyez sur Maj + Ctrl + 8. La table de données entière est sélectionnée.
-
Appuyez sur Ctrl + H pour afficher l’onglet Remplacer de la boîte de dialogue Rechercher et remplacer. (Voir la figure 1.)
-
Assurez-vous que la case Rechercher est complètement vide.
-
Dans la zone Remplacer par, entrez un seul espace.
-
Cliquez sur Remplacer tout. Excel devrait vous informer du nombre de remplacements effectués.
Ces étapes remplacent toutes les cellules vides par des cellules contenant un seul espace. Vous pouvez ensuite effectuer l’exportation au format CSV et le nombre approprié de champs sera exporté pour chaque ligne.
Enfin, si vous exportez régulièrement de grandes tables au format CSV, vous souhaiterez peut-être créer une macro qui crée le fichier à votre place. Ce qui suit n’est qu’un exemple du type de macro que vous pouvez utiliser:
Sub CreateCSV() Dim wkb As Workbook Dim wks As Worksheet Dim wksOri As Worksheet Dim iCols As Integer Dim lRow As Long Dim iCol As Integer Dim lRows As Long Dim sFilename As String Application.ScreenUpdating = False sFilename = "C:\test.csv" Set wksOri = ActiveSheet iCols = wksOri.Cells. _ SpecialCells(xlCellTypeLastCell).Column lRows = wksOri.Cells. _ SpecialCells(xlCellTypeLastCell).Row Set wkb = Workbooks.Add Set wks = wkb.Worksheets(1) For lRow = 1 To lRows For iCol = 1 To iCols With wks.Cells(lRow, 1) If iCol = 1 Then .Value = wksOri.Cells(lRow, iCol).Text Else .Value = .Value & "," & _ wksOri.Cells(lRow, iCol).Text End If End With Next Next Application.DisplayAlerts = False wkb.SaveAs FileName:=sFilename, _ FileFormat:=xlCSV wkb.Close Application.DisplayAlerts = True wksOri.Parent.Activate Application.ScreenUpdating = True MsgBox sFilename & " saved" Set wks = Nothing Set wkb = Nothing Set wksOri = Nothing End Sub
La macro crée un tout nouveau classeur, puis «compile» dans la colonne A de la première feuille de calcul du classeur les informations de la feuille de calcul d’origine. Ces données, qui contiendront un délimiteur pour chaque champ de l’original, sont ensuite enregistrées sous forme de fichier CSV. Enfin, le classeur temporaire est supprimé.
Le chemin et le nom de fichier du CSV sont codés en dur dans le code (la variable sFileName), bien qu’il puisse être modifié pour que le code demande un nom de fichier si vous le souhaitez.
ExcelTips est votre source pour une formation Microsoft Excel rentable.
Cette astuce (3068) s’applique à Microsoft Excel 97, 2000, 2002 et 2003.