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 :

Variable tableau et export en CSV


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Inscrit en
    Décembre 2009
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 2
    Par défaut Variable tableau et export en CSV
    Bonjour à tous,

    Je suis un débutant dans les macros et j'ai de ce fait quelques soucis :

    J'ai une variable tableau dans laquelle j'ai un certain nombre de données. Je souhaite copier ces données dans une nouvelle feuille d'un nouveau classeur dont le format est de type CSV. Dans la mesure où excel "force"/remplace les points des nombres contenus dans ce tableau par des virgules alors que ce n'est pas le format attendu, j'ai procédé par FSO pour contourner ce problème :

    Code :

    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
    Sub fso_test()
    Dim tabl() As Variant
    Dim csvFilePath As Variant
    Const ForWriting = 2
    Dim objFSO As Object
    Dim objCSVFile As Object
    Dim i As Integer
    Dim j As Integer
     
    tabl = Range("A1").CurrentRegion                            'juste un exemple car les données du tableau sont issues d'un autre traitement
     
    Debug.Print tabl(1, 2)
     
     'Creation CSV
    csvFilePath = "C:\TestExport.csv"
    Set objFSO = CreateObject("Scripting.FileSystemObject")
    Set objCSVFile = objFSO.CreateTextFile(csvFilePath, _
        ForWriting, True)
     
    'Copie des données
    For i = 1 To UBound(tabl, 1)
        For j = 1 To UBound(tabl, 2)
        objCSVFile.Write Chr(34) & tabl(i, j) & Chr(34) & ","
        Next
        objCSVFile.Writeline
    Next
     
    objCSVFile.close
    set objCSVFile = nothing
    set objFSO = nothing
     
    End sub
    Mais je ne suis pas satisfait de la méthodologie et du résultat (obligé d'utiliser l'outil Excel de conversion, écrase le fichier existant,...)

    Du coup, pour synthétiser, auriez-vous des lignes de code svp permettant de solder les points suivants :
    - PB de la virgule forcée par excel (ce qui est normal format local) lors de la copie des données du tableau dans une feuille excel : ça marche en changeant le format des colonnes concernées en texte + replace, mais existe t il une solution m'épargnant ces lignes de code?

    - Export des données de la variable tableau dans un fichier CSV avec test si fichier existant pour ne pas l'écraser

    - Egalement un code permettant d'insérer une ligne supplémentaire dans mon tableau déclaré en variable, est-ce "possible"?

    En vous remerciant d'avance.

  2. #2
    Membre Expert
    Inscrit en
    Septembre 2007
    Messages
    1 142
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 142
    Par défaut
    Bonjour frans007,

    Citation Envoyé par frans007 Voir le message
    Export des données de la variable tableau dans un fichier CSV avec test si fichier existant pour ne pas l'écraser
    Il te suffit de faire ce test avant ouverture
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    If Dir(csvFilePath)<>"" Then
    Set objCSVFile = objFSO.CreateTextFile(csvFilePath,  ForWriting, True)
    Else
    'fichier existant
    End If
    Egalement un code permettant d'insérer une ligne supplémentaire dans mon tableau déclaré en variable, est-ce "possible"?
    Tu ne peux que l'insérer en fin du tableau en augmentant la taille (jusqu'à preuve du contraire)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ReDim preserve (1 to tabl(ubound(tabl) + 1)

  3. #3
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    re
    bonjour
    FSO c'est un peu lourd et meme pour le test

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if dir(csvFilePath)="" then
    'oui on peu il existepas
    else
    'non on peut pas il existe
    end if
    pour l'ecriture aussi on peu utiliser ce VBNA t'offre
    faire une recherche sur :
    open for input 'lecture
    onpen for output 'ecriture
    open for append 'mise a jour

    et pour genérer le texte du csv il y a aussi la possibilité de se servir di presse papier(pas de tableau pas de boucle ) c'est du directo presto

    en gros voila comment je créé le texte du CSV 1 ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Sub test()
    separateur = ";" ' le separateur que tu veux
    Range("A1:c10").Copy ' la plage que tu veux .copy
    MsgBox Replace(CreateObject("htmlfile").parentwindow.clipboardData.GetData("TEXT"), vbTab, separateur)
    End Sub
    maintenant je créé le fichier csv
    en testant si le fichier existe (si non le fichier est créé si oui msgbox)et toujours avec le choix du séparateur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub testcreateCSV()
        Dim texteCSV As String, separateur As String, fichier As String, x As Integer
        fichier = Environ("userprofile") & "\Desktop\monvsv.csv"
        If Dir(fichier) = "" Then
            separateur = ";": x = FreeFile  ' le separateur que tu veux
            Range("A1:c10").Copy    ' la plage que tu veux .copy
            texteCSV = Replace(CreateObject("htmlfile").parentwindow.clipboardData.GetData("TEXT"), vbTab, separateur)
            Open fichier For Output As #x: Print #x, texteCSV: Close #x
        Else
            MsgBox "le fichier existe deja "
        End If
    End Sub
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

Discussions similaires

  1. Exporter un tableau HTML paginé en CSV
    Par L_air dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 09/05/2015, 13h29
  2. [XL-2010] Convertir un tableau en lignes pour export fichier CSv
    Par ffasan dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 04/01/2014, 19h52
  3. [MySQL] parcours de tableau associatif export csv
    Par littlebouda dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 10/12/2007, 17h16
  4. Problème d'initialisation variable tableau
    Par HeZiX dans le forum Langage
    Réponses: 3
    Dernier message: 08/06/2005, 16h30
  5. Acces à une variable-tableau de PHP
    Par Erwan21 dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 09/02/2005, 13h55

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