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

Soyez le premier à donner votre avis sur cette source.

Snippet vu 24 642 fois - Téléchargée 21 fois

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

Ajouter un commentaire

Commentaires

mirmoleboss
Messages postés
311
Date d'inscription
mercredi 11 octobre 2006
Statut
Membre
Dernière intervention
29 juillet 2011
-
je plebicite moi
niltonVBA
Messages postés
1
Date d'inscription
mercredi 24 janvier 2007
Statut
Membre
Dernière intervention
12 mars 2007
-
Très utile (en tout cas, pour moi ça l'est!)

et moi aussi je plébicite..... :-)
deeps123
Messages postés
12
Date d'inscription
jeudi 12 avril 2007
Statut
Membre
Dernière intervention
17 avril 2007
-
Salut,
J'utilise le même programme, mais jai un problème, dans le fichier csv il me converti les Id en '?'
il les reconnait pas
Une solution pour ce problème???

merci d'avance
pifou25
Messages postés
150
Date d'inscription
lundi 13 octobre 2003
Statut
Membre
Dernière intervention
21 décembre 2014
-
Devant tant d'enthousiasme j'ai étoffé la fonction avec de nouvelles options ;)

Deeps je ne sais pas d'ou ça peut venir les '?' ça serait pas dans le programme avec lequel tu l'ouvre? (ouvre le avec notepad pour voir...)
sinon retente avec la nouvelle fonction mais j'y crois moyen j'ai pas modifié grand chose.
deeps123
Messages postés
12
Date d'inscription
jeudi 12 avril 2007
Statut
Membre
Dernière intervention
17 avril 2007
-
Salut, non, jai essayé d'ouvrir av ec notepad, c'est toujours pareil :-(
ou sinon est ce qu'il y kkchose a paramétrer au niveau excel? pour qu'il accepte les valeur ID ??
comme ce sont ni des integer ni du text.
Moi non plus j'en ai aucune idée.

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.