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 :

Export CSV #fic => NumberFormat = "@"


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Juin 2011
    Messages
    260
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2011
    Messages : 260
    Par défaut Export CSV #fic => NumberFormat = "@"
    Bonjour à tous,

    J'ai une table dans une IHM que je souhaite exporter au format CSV.
    (Après certaines traductions à partir de tableau de changement yes <=> 1, no<=> 0 etc...)
    Jusque là je l'exportais en format txt avec un ; comme séparateur, mais on me demande de l'exporter directement en .csv
    Seulement voilà, je dois ajouter le format aux colonnes car j'ai des données de type fraction (ex: 12/1) et je ne veux pas qu'elles apparaissent comme une date (ici 12 janvier) lors de l'import (réouverture du fichier excel exporté en csv).

    Ne vous focalisez pas sur tout le code car il y a des choses hors contexte pour vous, mais dites moi uniquement comment, après la création d'un fichier Freefile de type csv, je peux forcer le format des colonnes (texte, date...)

    Voici le tableau que je souhaite exporter en CSV:

    Nom : Capture8.PNG
Affichages : 347
Taille : 8,2 Ko

    Voici le soucis que j'ai lors de la réouverture du fichier csv (les fractions se transforment en date):


    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
     
     
    Private Sub Btn_Export_Click()
        Dim Directory As String
        Dim R As Range
     
        Dim FullPath As String
        Dim CSV_Path As String
        Dim Engine_Num As String
        Dim Engine_Num_Date As String
     
        If Not checkEmptyCell Then
            MsgBox "Please complete all table."
            Exit Sub
        End If
     
        FullPath = Application.GetSaveAsFilename( _
         InitialFileName:=Range("Engine_Num").VALUE, _
         TITLE:="Select the directory and name of your .csv file", _
         fileFilter:=".csv files (*.csv), *.csv")
     
         CSV_Path = GetDirectory(FullPath)
         Engine_Num = GetFileName(FullPath, True)
     
     
         ' On interdit les caractères spéciaux (supression automatique sans avertissement)
         Engine_Num = EngineNumFilter(Engine_Num)
     
         Engine_Num_Date = Engine_Num & "_" & Replace(Date, "/", "_")
     
        Range("CSV_Path").VALUE = CSV_Path
        Engine_Num = EngineNumFilter(Engine_Num)
        Range("Engine_Num").VALUE = Engine_Num
        FullPath = CSV_Path & "/" & Engine_Num_Date & ".csv"
     
        ExportCSV FullPath
     
    End Sub
    A quel endroit dans ce code ci-dessous je dois ajouter un truc du type .NumberFormat = "@" ?

    Merci.

    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
     
     
    ' Creation du fichier .csv
    Private Sub ExportCSV(Path As String)
     
        Dim fic As Integer, i As Integer, j As Integer
        Dim Line As String
        Dim VALUE As Variant
        Dim shCONFIG As Object
        Set shCONFIG = Sheets("CONFIG")
        Dim Tab_CSV As ListObject
        Set Tab_CSV = ListObjects("Tab_CSV")
        Dim ncols As Integer, nrows As Integer
        ncols = Tab_CSV.ListColumns.Count
        nrows = Tab_CSV.ListRows.Count
        Dim Rcsv As Range, Rcsv0 As Range, Rdata As Range, Rheader As Range, Rval As Range
        Set Rcsv = Range(Tab_CSV)
        Set Rcsv0 = Tab_CSV.Range ' attention, ici la 1ere ligne est celle des titres
     
        Set Rdata = Tab_CSV.DataBodyRange
        Set Rheader = Tab_CSV.HeaderRowRange
        Dim excel As excel.Application
        Dim xlBook As excel.Workbook
        Dim xlSheet As excel.Sheets
     
        If FileExists(Path) Then
           ' Set xlBook = GetObject(Path)
            'xlBook.Close
            'Set xlBook = Nothing
            Kill Path
        End If
     
        fic = FreeFile
     
        Open Path For Output As #fic
     
        With Rcsv0
            For i = 1 To nrows + 1 ' Modif A.TROCHU Ajout +1 car prise en compte de la ligne de titre1/0
                For j = 1 To ncols
                    VALUE = .Cells(i, j).Text
                    If i > 1 Then
                        Select Case j
                            Case 1:
                                ' TST_ACTIV_OP
                                Set Rval = shCONFIG.Range("Tab_TST_ACTIV_OP")
                                VALUE = WorksheetFunction.VLookup(VALUE, Rval, 2, False)
                            Case 2:
                                ' TST_CMOD
                                Set Rval = shCONFIG.Range("Tab_TST_CMOD")
                                VALUE = WorksheetFunction.VLookup(VALUE, Rval, 2, False)
                        End Select
                    End If
     
                    If j > 1 Then
                        Line = Line & ";" & VALUE
                    Else
                        Line = VALUE
                    End If
                Next j
                Print #fic, Line
            Next i
        End With
     
        Close #fic
     
    ' MAINTENANT QUE J'AI ECRIT TOUT MON FICHIER, COMMENT RENTRER LE FORMAT DES COLONNES ???
    End Sub

  2. #2
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par wilfryjules Voir le message
    Jusque là je l'exportais en format txt avec un ; comme séparateur, mais on me demande de l'exporter directement en .csv
    Si ça fonctionnait correctement, rien ne t'empêche de continuer en mettant l'extension ".csv" à la fin.
    Après tout, le CSV n'est ni plus ni moins que du texte séparé par ";" (dans sa version francophone).

    Seulement voilà, je dois ajouter le format aux colonnes
    On ne peut pas.
    Comme je le disais, le format CSV n'est ni plus ni moins que du texte avec des séparateurs. Il n'intègre aucune notion de format.

    je ne veux pas qu'elles apparaissent comme une date (ici 12 janvier) lors de l'import (réouverture du fichier excel exporté en csv).
    C'est au niveau de l'import qu'il faudra contrôler le format.
    Si tu le fais avec VBA, il faudra utiliser OpenText (et non pas Open) en signalant que ce champ est du texte.
    Voir le paramètre DataTyp dans OpenText : https://docs.microsoft.com/fr-FR/off...books.opentext

  3. #3
    Membre très actif
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Juin 2011
    Messages
    260
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2011
    Messages : 260
    Par défaut
    C'est précisément ce que j'avais fait pour le format txt, mais en exportant en format csv cela ne marche pas !

    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
     
       ' On redimensionne le tableau à partir de la dernière ligne des données remplie
            Set Rcsv0 = Rcsv0.Resize(nblines + 1, ncols)
            Tab_CSV.Resize Rcsv0
     
            InfoChp = Array(Array(1, 2))
            For i = 1 To ncols
                ReDim Preserve InfoChp(i)
                InfoChp(i) = Array(i, 2) ' 2 pour format texte
            Next i
     
     
            '********************************************************************************
            ' On réouvre le CSV à partir des données (titres de colonnes <=> header <=> HeaderLine)
            '********************************************************************************
            Workbooks.OpenText Filename:=Path, Origin:=xlWindows, _
            StartRow:=HeaderLine, DataType:=xlDelimited, Semicolon:=True, DecimalSeparator:=".", FieldInfo:=InfoChp, Local:=True
            Application.DisplayAlerts = False ' MODIF A.TROCHU Eviter affichage alerte Excel
            DoEvents
            Set wb = ActiveWorkbook
    Cela ne marche pas, lors de l'import, je retombe sur des dates:

    Voici le debbuggage:
    Nom : Capture9.PNG
Affichages : 403
Taille : 24,8 Ko
    Puis l'ouverture du fichier excel csv avec les dates:
    Nom : Capture10.PNG
Affichages : 362
Taille : 6,6 Ko
    Et l'insertion dans mon IHM:
    Nom : Capture11.PNG
Affichages : 342
Taille : 8,3 Ko

    Voilà, je n'arrive pas à me débarrasser de ces dates.... pourtant j'ai bien utilisé la méthode pour transformer en format texte....

  4. #4
    Membre très actif
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Juin 2011
    Messages
    260
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2011
    Messages : 260
    Par défaut
    J'ai essayé de me fier à ça, mais en vain !!

    https://stackoverflow.com/questions/...rly-excel-2016

    Même en supprimant l'extension ".csv", rien à faire j'obtiens toujours des dates !! Hors j'ai bien paramétré en format texte !!

  5. #5
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Je ne suis pas spécialiste des chaines de valeur, je peux donc me tromper.
    Mais à ta place, au lieu d'utiliser un For To pour renseigner InfoChp, je mettrais simplement un grand Array dans le paramètre FieldInfo de OpenText.

  6. #6
    Membre très actif
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Juin 2011
    Messages
    260
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2011
    Messages : 260
    Par défaut
    Merci mais je peux pas, le nombre de colonnes du tableau varie....

Discussions similaires

  1. [XL-2010] exporter un fichier excel avec double quotes
    Par Melvine dans le forum Excel
    Réponses: 1
    Dernier message: 06/03/2014, 23h32
  2. Export access vers excel mais pb quote
    Par ancylia dans le forum VBA Access
    Réponses: 2
    Dernier message: 24/06/2008, 09h50
  3. [EXPORT] CSV
    Par sleepy2002 dans le forum Oracle
    Réponses: 2
    Dernier message: 03/04/2006, 10h14
  4. Export CSV
    Par lapartdombre dans le forum Documents
    Réponses: 12
    Dernier message: 17/10/2005, 14h46
  5. Export CSV de champs qui contiennent des ";"
    Par boteha dans le forum Outils
    Réponses: 4
    Dernier message: 19/09/2005, 19h05

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