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 délimiteur point virgule ;


Sujet :

VBA Access

  1. #1
    Membre régulier
    Inscrit en
    Avril 2011
    Messages
    465
    Détails du profil
    Informations forums :
    Inscription : Avril 2011
    Messages : 465
    Points : 97
    Points
    97
    Par défaut Export csv délimiteur point virgule ;
    Bonjour,

    Je souhaiterais exporter une requête Access en csv avec un délimiteur de type ";".

    J'ai tout essayé mais je n'y arrive pas.

    Actuellement, la seule chose que j'arrive à faire est d'exporter en format excel mais ce dernier n'est pas compatible avec le logiciel dans lequel je dois intégrer ce fichier

    le nom de la requête que je dois exporter est "Production"

    Voici le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Sub TransferSpreadsheet()
        DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel8, "Production", "C:\Users\moi\Documents\Production", True
     
     
    End Sub
    Merci d'avance pour votre aide

  2. #2
    Membre confirmé
    Inscrit en
    Février 2011
    Messages
    465
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 465
    Points : 549
    Points
    549
    Par défaut
    Bonjour,
    Le delimitteur par défaut est défini dans les Windows Locales (Control panel / Region).
    C'est assez ennuyeux parce que si vous développez une application et que vous la donnez à votre collègue de Birmingham ou de Milan, cela risque de donner des résultats différents.

    Une manière d'être totalement sûr d'avoir des points-virgules ou un autre caractère est de le forcer en créant un fichier texte.
    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
    Function demo_CSV()
    Dim db As DAO.Database
    Dim rst As DAO.Recordset
     
    Dim strLine As String
    Dim iFileNbr As Integer
    Dim strSQL As String
     
    Set db = Application.CurrentDb
    Set rst = db.OpenRecordset("Table1")
     
    'The file is created as a text file because the Transfertext method relies on Windows locales 
     
    'prendre le premier numero de fichier libre
    iFileNbr = FreeFile
     
    'ouvrir le fichier
    Open "C:\Temp\Test.csv" For Output As iFileNbr
    'parcourir la table avec mes données
    rst.MoveFirst
    Do Until rst.EOF
        strLine = rst![Entier]
        'composer la ligne en séparant les champs par le caractère de mon choix
        strLine = strLine & ";" & rst![NombreDouble]
        strLine = strLine & ";" & rst![NombreDecimal]
        'De la Table1, j'exporte trois champs.  Le premier champ s'appelle 'Entier', le second 'NombreDouble' et le troisieme s'appelle 'NombreDecimal'
        'écrire la ligne sur le fichier texte
        Print #iFileNbr, strLine
        rst.MoveNext
    Loop
     
    'fermer le fichier
    Close iFileNbr
     
    'supprimer les pointeurs
    Set rst = Nothing
    Set db = Nothing
     
    End Function
    Evidement, une telle procédure est un peu plus lourde que le simple Transferspreadsheet

  3. #3
    Expert éminent
    Homme Profil pro
    Webplanneur
    Inscrit en
    Octobre 2007
    Messages
    4 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Réunion

    Informations professionnelles :
    Activité : Webplanneur

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 262
    Points : 6 561
    Points
    6 561
    Par défaut
    Salut
    Je pense que tu devrais utiliser cette méthode et appeler l'argument SpecificationName que tu auras au préalable paramétré et sauvegardé en réalisant une exportation manuelle de type Text. 2ème étape de l'assistant cliquer sur le btn Avancé.
    "Le savoir est la seule matière qui s'accroit quand on la partage" (Socrate)
    UR - ESIROI - GPME/CG/DCG8
    QTH :21°19'18"S - 055°25'32"E
    Inutile de me contacter par MP
    Merci de cliquer sur si la réponse vous a permis de résoudre votre problème et n'oubliez pas de clôturer le fil en cliquant sur

  4. #4
    Membre régulier
    Inscrit en
    Avril 2011
    Messages
    465
    Détails du profil
    Informations forums :
    Inscription : Avril 2011
    Messages : 465
    Points : 97
    Points
    97
    Par défaut
    Citation Envoyé par PipoWIL Voir le message

    Merci pour ta réponse, j'ai adapté ton code à mon cas :

    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
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    Sub envoie()
     
    Dim Ol_App As New Outlook.Application
    Dim num As String
     Dim Ol_Item As Outlook.MailItem
     Set Ol_Item = Ol_App.CreateItem(olMailItem)
     num = Forms.Accueil.Semaine
     
     With Ol_Item
     .To = "forfert.remi@mondo.lu;"
     .Subject = "Production Lux - semaine " & num
     .Body = "Bonjour," & vbCrLf & vbCrLf & "Ci joint le fichier de production de la semaine " & num & vbCrLf & vbCrLf & "Rémi Forfert"
     .Attachments.Add "\\neo\PUBLIC-DOCUMENTS\Département caoutchouc\Canada\Production Lux.xls"
     .Save
     .Send
     End With
     
    End Sub
     
    Function demo_CSV()
    Dim db As DAO.Database
    Dim rst As DAO.Recordset
     
    Dim strLine As String
    Dim iFileNbr As Integer
    Dim strSQL As String
     
    Set db = Application.CurrentDb
    Set rst = db.OpenRecordset("Production")
     
    'The file is created as a text file because the Transfertext method relies on Windows locales
     
    'prendre le premier numero de fichier libre
    iFileNbr = FreeFile
     
    'ouvrir le fichier
    Open "C:\Users\moi\Documents\Production" For Output As iFileNbr
    'parcourir la table avec mes données
    rst.MoveFirst
    Do Until rst.EOF
        strLine = rst![Entier]
        'composer la ligne en séparant les champs par le caractère de mon choix
        strLine = strLine & ";" & rst![NombreDouble]
        strLine = strLine & ";" & rst![NombreDecimal]
        'De la Table1, j'exporte trois champs.  Le premier champ s'appelle 'Entier', le second 'NombreDouble' et le troisieme s'appelle 'NombreDecimal'
        'écrire la ligne sur le fichier texte
        Print #iFileNbr, strLine
        rst.MoveNext
    Loop
     
    'fermer le fichier
    Close iFileNbr
     
    'supprimer les pointeurs
    Set rst = Nothing
    Set db = Nothing
     
    End Function
    Cela ne fonctionne pas à partir de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set rst = db.OpenRecordset("Production")
    Peut-être parce que c'est une requête et non une table?

    Citation Envoyé par hyperion13 Voir le message
    Merci de ta réponse, justement quand je veux faire un export en fichier texte j'ai le message d'erreur suivant "Too few parameters. Expected 2"

    Une idée?

  5. #5
    Membre confirmé
    Inscrit en
    Février 2011
    Messages
    465
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 465
    Points : 549
    Points
    549
    Par défaut
    Bonjour,
    Tu peux utiliser
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set rst = db.OpenRecordset("Production", dbOpenDynaset)
    Tu peux essayer avec dbOpenDynamic ou dbOpenDynaset. (==> https://docs.microsoft.com/en-us/off...numeration-dao

    La proposition de hyperion13 est aussi très valable et plus courte.

  6. #6
    Membre chevronné Avatar de Thumb down
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2019
    Messages
    1 420
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2019
    Messages : 1 420
    Points : 2 179
    Points
    2 179
    Par défaut
    Bonsoir,
    Regarde la méthode DoCmd.TransferText mais il faut au préalable generer le fichier chema.ini

  7. #7
    Expert éminent
    Homme Profil pro
    Webplanneur
    Inscrit en
    Octobre 2007
    Messages
    4 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Réunion

    Informations professionnelles :
    Activité : Webplanneur

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 262
    Points : 6 561
    Points
    6 561
    Par défaut
    Citation Envoyé par John Parker Voir le message
    Merci de ta réponse, justement quand je veux faire un export en fichier texte j'ai le message d'erreur suivant "Too few parameters. Expected 2"
    Une idée?
    Re
    Je viens de faire un essai avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    DoCmd.TransferText TransferType, SpecificationName, TableName, FileName, HasFieldNames
    DoCmd.TransferText acExportDelim, "MaSpecification", "tbl_Matable", "C:\Users\....\tbl_Matable.csv", True
    et ça fonctionne.
    Pas forcément besoin d'un fichier .ini
    Je viens de lire que ta source est une requête, des champs date ou des mots-clé interdits dans cette requête ?
    A lire.
    "Le savoir est la seule matière qui s'accroit quand on la partage" (Socrate)
    UR - ESIROI - GPME/CG/DCG8
    QTH :21°19'18"S - 055°25'32"E
    Inutile de me contacter par MP
    Merci de cliquer sur si la réponse vous a permis de résoudre votre problème et n'oubliez pas de clôturer le fil en cliquant sur

  8. #8
    Membre régulier
    Inscrit en
    Avril 2011
    Messages
    465
    Détails du profil
    Informations forums :
    Inscription : Avril 2011
    Messages : 465
    Points : 97
    Points
    97
    Par défaut
    Citation Envoyé par hyperion13 Voir le message
    Re,

    Je ne comprends pas ce que je dois mettre à la place de "MaSpecification" ?

    Non il n'y a aucun champs date ni aucun mot interdit dans le résultat de ma requête à exporter

    Merci

    Citation Envoyé par PipoWIL Voir le message
    J'ai remplacé le code avec la solution que tu m'as apporté.

    j'ai le message d'erreur suivant :
    Error 3061. Too few parameters. Expected 2.

  9. #9
    Membre confirmé
    Inscrit en
    Février 2011
    Messages
    465
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 465
    Points : 549
    Points
    549
    Par défaut
    Bonjour,
    Que se passe-t-il quand tu ouvres ta query "Production"

  10. #10
    Membre régulier
    Inscrit en
    Avril 2011
    Messages
    465
    Détails du profil
    Informations forums :
    Inscription : Avril 2011
    Messages : 465
    Points : 97
    Points
    97
    Par défaut
    Citation Envoyé par PipoWIL Voir le message
    Bonjour,
    Que se passe-t-il quand tu ouvres ta query "Production"
    Rien elle s'ouvre normalement...

  11. #11
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 648
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 648
    Points : 14 626
    Points
    14 626
    Par défaut
    bonjour,
    j'ai le message d'erreur suivant : Error 3061. Too few parameters. Expected 2.
    le message indique qu'il y a des paramètres qu'il faut saisir ... ta requête contient-elle des critères de sélection ?
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

  12. #12
    Membre confirmé
    Inscrit en
    Février 2011
    Messages
    465
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 465
    Points : 549
    Points
    549
    Par défaut
    Bonjour,
    Comment faites-vous d'habitude quand vous voulez lire une table ou une query ?
    Pouvez-vous comparer avec une autre de vos bases Access?
    Avez-vous essayé un test avec une table simple ?
    Avez-vous essayé avec une autre query ?
    Il y a aussi une documentation intéressante ici : https://warin.developpez.com/access/dao/?page=partie_5

  13. #13
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    113
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 113
    Points : 124
    Points
    124
    Par défaut
    Je ne comprends pas ce que je dois mettre à la place de "MaSpecification" ?

    Comme suggéré par Hyperion13, fais une extraction "manuelle" de ta requête "production" en utilisant l'assistant Exportation. La première pop-up te demande le chemin et le nom du fichier à créer, la deuxième te demande la nature de la séparation des données (dans ton cas, choisis "délimité") puis clique sur le bouton "Avancé" en bas de la fenêtre. Dans la nouvelle pop-up qui s'ouvre tu vérifies que le délimiteur retenu est bien le ";" puis tu cliques sur "Enregistrer sous" en donnant le nom que tu souhaites, par exemple "extract_production". C'est ce nom que tu mettras à la place de "MaSpecification", ce qui permettra à vba de reproduire l'extraction telle que tu l'as faite manuellement.

    Bien cordialement
    el

  14. #14
    Membre régulier
    Inscrit en
    Avril 2011
    Messages
    465
    Détails du profil
    Informations forums :
    Inscription : Avril 2011
    Messages : 465
    Points : 97
    Points
    97
    Par défaut
    J'ai suivi vos conseils.

    Pour m'enlever le doute de la requête qui contient des filtres j'ai créé une table "Production".

    J'ai donc fait un export manuel de ma table "Production" en mettant le ";" comme délimiteur et en enregistrant en csv, le nom du fichier exporté et "Production"

    Ensuite j'ai tapé ce code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Sub TransferSpreadsheet()
        DoCmd.TransferText acExportDelim, "Production", "Production", "C:\Users\...\Documents\Production.csv", True
     
     
    End Sub
    Je dois loupé quelque chose car ça ne fonctionne toujours pas ...

  15. #15
    Membre confirmé
    Inscrit en
    Février 2011
    Messages
    465
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 465
    Points : 549
    Points
    549
    Par défaut
    Avez-vous un message d'erreur ?
    Que dit-il ?

  16. #16
    Membre régulier
    Inscrit en
    Avril 2011
    Messages
    465
    Détails du profil
    Informations forums :
    Inscription : Avril 2011
    Messages : 465
    Points : 97
    Points
    97
    Par défaut
    Citation Envoyé par PipoWIL Voir le message
    Avez-vous un message d'erreur ?
    Que dit-il ?
    J'ai le message d'erreur suivant : Error '3625'. The text file Specification "Production" does not exist. You cannot import, export or link using the specification

  17. #17
    Membre confirmé
    Inscrit en
    Février 2011
    Messages
    465
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 465
    Points : 549
    Points
    549
    Par défaut
    Bonjour,

    Comme suggéré par Hyperion13 et par Elgordopresto, "fais une extraction "manuelle" de ta requête "production" en utilisant l'assistant Exportation. La première pop-up te demande le chemin et le nom du fichier à créer, la deuxième te demande la nature de la séparation des données (dans ton cas, choisis "délimité") puis clique sur le bouton "Avancé" en bas de la fenêtre. Dans la nouvelle pop-up qui s'ouvre tu vérifies que le délimiteur retenu est bien le ";" puis tu cliques sur "Enregistrer sous" en donnant le nom que tu souhaites, par exemple "extract_production". C'est ce nom que tu mettras à la place de "MaSpecification", ce qui permettra à vba de reproduire l'extraction telle que tu l'as faite manuellement."

    et donc, si tu as utilisé extract_production, ton code devient
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Sub TransferSpreadsheet()
        DoCmd.TransferText acExportDelim, "extract_production", "Production", "C:\Users\...\Documents\Production.csv", True
     
     
    End Sub

  18. #18
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    113
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 113
    Points : 124
    Points
    124
    Par défaut
    Juste au cas où...

    @John Parker : As-tu bien sauvegardé la configuration avant de finaliser l'export manuel ? Quel nom as-tu donné à la configuration ?

  19. #19
    Membre régulier
    Inscrit en
    Avril 2011
    Messages
    465
    Détails du profil
    Informations forums :
    Inscription : Avril 2011
    Messages : 465
    Points : 97
    Points
    97
    Par défaut
    Citation Envoyé par elgordopresto Voir le message
    Juste au cas où...

    @John Parker : As-tu bien sauvegardé la configuration avant de finaliser l'export manuel ? Quel nom as-tu donné à la configuration ?
    En effet, je n'avais pas sauvegardé la configuration, d'ailleurs je ne savais même pas que c'était possible!

    Mon problème est résolu!

    je vous remercie tous pour votre aide !

  20. #20
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    113
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 113
    Points : 124
    Points
    124
    Par défaut
    Du coup, peux-tu passer la discussion en "résolue" ? Merci par avance.

Discussions similaires

  1. [Toutes versions] Export csv ou txt avec largeur fixe et séparateur point virgule
    Par shizzle971 dans le forum Excel
    Réponses: 1
    Dernier message: 07/05/2014, 20h56
  2. [XL-2007] Exporter csv point virgule
    Par wamkey dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 19/01/2014, 20h41
  3. Supprimer certains points virgules en export CSV
    Par elcascador2 dans le forum Excel
    Réponses: 1
    Dernier message: 26/03/2009, 18h08
  4. vba - Conversion xls / csv : point virgule
    Par House MD dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 26/06/2008, 10h36
  5. [CSV] Problème avec CSV et point virgules
    Par Lotz dans le forum Langage
    Réponses: 6
    Dernier message: 09/03/2006, 15h11

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