Export CSV personnalisé – Episode 6
C’est la saga de l’été, dans le Grenier Self-Access 🙂 : comment exporter des données CSV personnalisées. Dans les épisodes précédents, il était question d’exporter les données d’une table. Mais on peut aussi exporter les données d’une requête… ou d’une instruction SQL brute. Voici comment faire…
Résumé des épisodes précédents
Avant de lire la suite, pensez à consulter ces articles du Grenier :
- Export CSV personnalisé
- Export CSV personnalisé – Episode 2
- Export CSV personnalisé – Episode 3
- Export CSV personnalisé – Episode 4
- Export CSV personnalisé – Episode 5
Quelques retouches
Croyant bien faire, j’ai en fait ajouté trop de vérifications dans la classe CSVExport
. 😉 Il y a notamment une partie de code qui vérifie si la table existe bien dans la base de données. Mais on veut maintenant exporter autre chose qu’une table ! Par conséquent, pour assouplir le système :
- Rouvrez la classe
CSVExport
. - Supprimez (ou mettez en commentaires) cette portion du code, que vous trouvez dans la fonction
Export()
:
1 2 3 4 5 6 7 8 9 |
' Est-ce que la table existe ? On Error Resume Next Dim strTable As String strTable = CurrentDb.TableDefs(Me.Source).Name If Err.Number <> 0 Then MsgBox "La table ou requête '" & Me.Source & "' est introuvable !", vbExclamation Export = False Exit Function End If |
Exporter une requête enregistrée
Maintenant, pour exporter une requête de la base de données, il suffit de la donner comme source, à savoir :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
Sub TestExportCSV10() ' Variables Dim ce As New CSVExport Dim fld As CSVField ' Initialisations générales With ce .Source = "rqt Clients par ordre alphabétique" .Target = "C:\Users\Hervé\Desktop\clients.csv" .ExportAllFields = True End With ' Exportation If ce.Export() Then MsgBox "Exportation terminée !", vbInformation End If End Sub |
Exporter une requête SQL brute
De la même manière, vous pouvez définir la source comme étant une instruction SQL brute. Par exemple :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
Sub TestExportCSV11() ' Variables Dim ce As New CSVExport Dim fld As CSVField Dim strSQL As String ' L'instruction SQL strSQL = "SELECT *" _ & " FROM [tbl Clients]" _ & " WHERE [Nom Client] LIKE 'L*'" _ & " ORDER BY [Nom Client], [Prénom Client]" ' Initialisations générales With ce .Source = strSQL .Target = "C:\Users\Hervé\Desktop\clients.csv" .ExportAllFields = True End With ' Exportation If ce.Export() Then MsgBox "Exportation terminée !", vbInformation End If End Sub |
Bonjour,
l’export fonctionne bien mais j’aimerais exporter directement au format utf8.
C’est possible ?
Pour ne pas charger le code, j’utilise les fonctions natives VBA pour la gestion des fichiers (open/print/close). De mémoire – mais je n’ai pas d’Access sous la main pour vérifier -, ces fonctions ne gèrent pas l’UTF8. Une solution serait sans doute de remplacer les commandes natives par des instructions du Scripting Runtime, qui doit gérer UTF8.
Salut,
Est-il possible d’utiliser ton concept avec des états ?
Quelle serait l’idée ?
L’idée est d’utiliser exactement le même principe mais au lieu de prendre en entrée une table ou une requête, on prends les champs d’un état.
Pour ma part c’est que je manipule beaucoup de données et les états sont la sortie finale avec un export txt que je souhaiterai avoir.
Actuellement l’export txt d’un état se fait uniquement avec la mise en page (la coche est grisé) .
Je raisonnerais autrement : un état est lui-même basé sur une source de données (table ou requête). Ce sont ces données qui sont importantes (mais pas la mise en forme de l’état). Ce sont donc elles que j’exporterais directement.
Je suis ok avec le raisonnement, seulement que pour ma part, j’utilise des fonction d’access (test logique, concaténation textuelle,, calcul mathématique …) couplé avec des union pour données un état avancé à partir des données brutes.
Voila pourquoi je cherche à faire un export de l’état en format CSV pour l’utiliser par la suite.
Pas facile à traiter à distance, mais si le fichier CSV est un CSV classique (données pures, lignes + colonnes), on doit pouvoir produire la requête qui va bien (donc des données pures aussi) pour l’exporter. Une requête peut a priori (sauf quelques cas particuliers) fait des tests logiques, des concaténations, des calculs, etc.
L’export d’un état au contraire risque de chercher à préserver la mise en forme, ce qui n’en fera pas forcément un « bon » CSV.
Est-ce que les opérations faites sur l’état sont très spécifiques (et ne peuvent pas se faire au niveau inférieur) ?
tout fonctionne bien, si ce n’est que mes champs sont coupés a 255 caracteres !! comment faire pour contourner ce probleme?
Ce sont des champs de type Mémo (ou « Texte long » sur Access 2013) ?