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...
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.