[access vba] exporter sql vers fichier plat (csv, txt ou autre)

Contenu du snippet

La fonction sous Access mde n'est pas équivalente sous Access adp (projet sur base SQL SERVER) donc j'ai codé cette fonction simple qui crée un recordset à partir d'une requête, puis l'exporte dans un fichier plat avec séparateur ; ou autre (vbtab par exemple).
La requête SQL peut être toute simple (SELECT * FROM matable) ou bien hyper complexe dans le respect de la syntaxe SQL server (UNION, GROUP BY, HAVING, pas de transform, etc)

Source / Exemple :


' 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 pour un projet access ADP :
'Set rst = CurrentProject.Connection.Execute(SQL)
' connection pour un projet access MDB :
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

Conclusion :


(Allez si on le plébiscite j'ajouterais en option les noms des champs dans la 1ere ligne du fichier :D )

ça c'est fait! l'argument WithFields permet de définir si vous voulez les noms de champs en 1ere ligne.
également dispo: l'option Quote qui permet d'entourer tous les champs de guillements "'" ou chr(34) pour le "

ultime amélioration à apporter, éventuellement, protéger les caracteres sep et quote dans les valeurs de champs au cas ou...

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.