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

VBA Access Discussion :

Export CSV à partir d'une requête SQL


Sujet :

VBA Access

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Février 2007
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 30
    Par défaut Export CSV à partir d'une requête SQL
    Bonjour,

    pouvez vous me dire s'il est possible d'utiliser la fonction TransferText acExportDelim de manière à exporter le résultat d'une requête dans un fichier CSV? Ou sinon quelle fonction utiliser?

    J'ai réussi à utiliser cette fonction en insérant les résultats de ma requête dans une table temporaire, mais ce n'est pas une bonne solution à cause du gros volume de données pris par cette table temporaire. Voici ma fonction utilisant le fichier temporaire :


    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
    Function Socle_Data_Mens()
    Dim LitBase As Database
    Dim C_MAJ As Boolean
    Dim SQL As String
    Dim nomCsv As String
     
    Set LitBase = CurrentDb()
     
    'création d une base temporaraire Tbl_Integr_Act_Rec_Glob_Temp à partir de Tbl_Integr_Act_Rec_Glob
    C_MAJ = True
    BeginTrans
    SQL = "SELECT Tbl_Integr_Act_Rec_Mens.* INTO Tbl_Integr_Act_Rec_Mens_Temp " & _
          "FROM Tbl_Integr_Act_Rec_Mens;"
    LitBase.Execute SQL
    CommitTrans
     
    ' Fermeture de la connexion a la base
    LitBase.Close
    Set LitBase = Nothing
    C_MAJ = False
     
    ' export csv
    DoCmd.TransferText acExportDelim, "SOCLE_EXPORT_MENS", "Tbl_Integr_Act_Rec_Mens_Temp", "C:\TEMP\SOCLE_DATA_MENS.CSV", True
     
    Drop_Table_Temp_Mens
     
    End Function

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour
    Pourquoi ne pas plutôt faire cela
    Dans un module
    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
     
     
    ' exportation d'une requête SQL ou table vers un fichier
    ' format csv avec séparateur optionnel
    Public Function ExportCsv(SQL As String, File_name As String, Optional ByVal sep As _
                                                                  String = ",", Optional ByVal Quote As String = "", Optional ByVal WithFields As Boolean = False) As Boolean
     
        Dim line As String, i As Long
        Dim rst As Recordset, fld As Field
     
        On Error GoTo ExportCsv_Error
        ' connection
        Set rst = CurrentDb.OpenRecordset(SQL)
        Open File_name For Output As #1
     
        If WithFields Then  ' les noms de champ si demandé
            line = ""
            For Each fld In rst.Fields
                line = line & sep & Quote & fld.Name & Quote
            Next
            Print #1, Mid(line, Len(sep) + 1)
        End If
     
        Do Until rst.EOF
            line = ""
            For i = 0 To rst.Fields.Count - 1
                line = line & sep & Quote & Nz(rst(i).Value) & Quote
            Next i
            Print #1, Mid(line, Len(sep) + 1)
            rst.MoveNext
        Loop
        rst.Close
        Close #1
     
        ExportCsv = True
        Exit Function
     
    ExportCsv_Error:
     
        MsgBox "Error " & err.Number & " (" & err.Description & _
               ") in Function ExportCsv of Module mdFunctions", vbCritical
    End Function
    Et dans l'évènement du bouton qui te fais l'exportation
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Call ExportCsv("SELECT * FROM Tbl_Integr_Act_Rec_Mens", CurrentProject.Path & "\Nom_du fichier_export_que_tu_veux.csv", , , True)

  3. #3
    Membre averti
    Inscrit en
    Février 2007
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 30
    Par défaut
    Niquel ça marche merci!!!

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 17
    Par défaut
    perso j'aurai fait plus simple : au lieu de créer la table Tbl_Integr_Act_Rec_Mens_Temp, j'aurai juste créé une requête temporaire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CurrentDb.CreateQueryDef "RQ_tempo", sqltext
    bien sur il faut que sqltext soit une requête sélection.

    ensuite dans TransferText tu peux appeler cette requête RQ_tempo
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DoCmd.TransferText acExportDelim, "SOCLE_EXPORT_MENS", "RQ_tempo", "C:\TEMP\SOCLE_DATA_MENS.CSV", True
    et enfin tu peux détruire la requête temporaire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CurrentDb.QueryDefs.Delete "RQ_tempo"
    à toutes fin utiles

  5. #5
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par tom@tom Voir le message
    perso j'aurai fait plus simple
    Bonjour tom@tom

    C'est une autre façon de faire. Avec la méthode que j'ai émise il n'y a aucune table ou requête à rajouter.

    Et s'il a plusieurs exportations csv à faire , il n'y a que les paramètres d'appel à la fonction à modifier.

    Mais je retiens quand même ta méthode.

  6. #6
    Membre éclairé
    Inscrit en
    Juin 2005
    Messages
    249
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 249
    Par défaut
    Bonjour, j'essaye d'appliquer cette méthode mais voici le message que j'obtiens sur l'événement :

    Erreur de compilation:

    Variable ou procédure attendue, et non un module.


    Y a t-il des pré requis ?

    Merci d'avance pour vos réponses.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 15/03/2012, 09h56
  2. Export CSV à partir d'une requête SQL(VB.Net)
    Par bestcasaoui dans le forum VB.NET
    Réponses: 3
    Dernier message: 11/01/2011, 16h51
  3. [XML] Exporter le résultat d'une requête SQL en XML
    Par radiobrain dans le forum Bibliothèques et frameworks
    Réponses: 3
    Dernier message: 20/11/2006, 14h36
  4. Réponses: 2
    Dernier message: 28/08/2006, 08h09
  5. [MySQL] Remplissage d'une liste déroulante à partir d'une requête SQL
    Par gaucher dans le forum PHP & Base de données
    Réponses: 9
    Dernier message: 11/05/2006, 15h46

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