Bonjour a tous,
j'ai un problème avec le format CSV. En effet les données que j'exporte peuvent contenir n'importe quel type de caractères comme les points virgules ou les guillemets, or le format csv utilise les points-virgules comme séparateur de données. Pour régler ce 1er problème j'ai délimité mes données par des guillemets. Maintenant les points virgules sont bien reconnus comme faisant partie de mes données mais les guillemets sont maintenant interprétés comme séparateur. J'aimerais que ma procédure fonctionne pour les 2 cas et a priori c'est faisable puisque j'ai essayé de crée le fichier a partir d'excel et celui-ci est crée correctement (même si les données contiennent ces fameux caractères).
Si quelqu'un possède une routine qui fonctionne dans tous les cas comme le fait excel ça intéresserait beaucoup.

En vous remerciant pour votre aide.

Voici le code que j'utilise :
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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
Imports System.IO
Module modExportCSV
    Dim BaseColonnesName As New List(Of String)
    Public Sub ExportCSV(ByVal TableName As String)
        Dim SaveFileDialog As New SaveFileDialog
        Dim FichierName = ""
 
        With SaveFileDialog
            'On spécifie l'extension de fichiers visibles
            .Filter = "All Files (*.*)|*.*|Fichiers csv (*.csv) | *.csv"
            .FilterIndex = 2
            'On affiche et teste le retour du dialogue
            If .ShowDialog = Windows.Forms.DialogResult.OK Then
                'On récupère le nom du fichier
                FichierName = .FileName
            Else : Exit Sub
            End If
        End With
 
        If FichierName.EndsWith(".csv") Then
        Else
            FichierName = FichierName & ".csv"
        End If
 
 
        Try
            Dim sw As StreamWriter = New StreamWriter(FichierName, False, System.Text.Encoding.Default)
 
            Dim Separ As Char() = {CChar(";")}
 
            'Remplissage des en-têtes de colonnes
            Dim dt As DataTable = objDBDataSet.Tables(TableName)
            Dim HeadersText As String = Nothing
            Dim col As DataColumn
            For Each col In dt.Columns
                HeadersText &= """" & col.ColumnName & """;"
            Next
            sw.WriteLine(HeadersText)
 
            'Remplissage des cellules a partir des données
            Dim RowCount As Integer
            Dim row As DataRow
            Dim Item As Object
            For Each row In dt.Rows
                Dim RowText As String = Nothing
                For Each Item In row.ItemArray
                    Dim _Type As Type = Item.GetType
                    Dim _TypeCode As TypeCode = Type.GetTypeCode(_Type)
                    Select Case _TypeCode
                        Case TypeCode.DateTime
                            ' Si c'est un champ date on met en forme la date :
                            Dim _Date As DateTime = CDate(Item)
                            RowText &= """" & _Date.ToString("dd/MM/yyyy HH:mm:ss") & """;"
                        Case Else
                            RowText &= """" & Item.ToString & """;"
                    End Select
                Next
                ' On supprime le dernier caractère de séparation avant d’écrire la ligne :
                RowText = RowText.TrimEnd(Separ)
                sw.WriteLine(RowText)
                RowCount += 1
            Next
 
            sw.Close()
            sw.Dispose()
            MessageBox.Show(String.Format("{0} ligne(s) exportée(s) avec succés", RowCount), "Données exportées", MessageBoxButtons.OK, MessageBoxIcon.Information)
        Catch ex As Exception
            MessageBox.Show(ex.Message, "Une erreur est survenue", MessageBoxButtons.OK, MessageBoxIcon.Error)
        End Try
 
    End Sub
End Module