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 :

Exportation dans un fichier texte à partir d'une subroutine


Sujet :

VBA Access

  1. #1
    Membre actif
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2008
    Messages
    464
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Mars 2008
    Messages : 464
    Points : 268
    Points
    268
    Par défaut Exportation dans un fichier texte à partir d'une subroutine
    Bonjour,
    Je souhaiterais exporter une requête dans un fichier texte dans une subroutine.
    Le principe est simple : je veux que l'utilisateur appuit sur un bouton est que par conséquent les fichiers sont exportés sans qu'il ait besoin de savoir quelle requête est à exporter ni sous quel forme.

    Pour cela : j'ai créer une fonction suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Sub Export_Fic()
    On Error GoTo Export_Fic_Err
     
        DoCmd.TransferText acExportDelim, "", "QueryA", "fic.txt", False, ""
     
     
    Export_Fic_Exit:
        Exit Sub
     
    Export_Fic_Err:
        MsgBox Error$
        Resume Export_Fic_Exit
     
    End Sub
    Cette fonction est appelé depuis une procédure événementielle activée sur un PUSH BUTTON. Mon soucis c'est qu'il demande une spécification. Or je veux bien comprendre que pour une importation on puisse avoir des tables liées d'exemple pour la spécification mais pour l'exportation je ne comprends pas. D'autant plus que j'ai une table d'exemple pour l"exportation mais quand je la mets dans le code il me dit que la spécification pour cette table n'existe pas

  2. #2
    Membre expérimenté
    Homme Profil pro
    Indépendant développeur et formateur
    Inscrit en
    Octobre 2007
    Messages
    1 036
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Indépendant développeur et formateur
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2007
    Messages : 1 036
    Points : 1 598
    Points
    1 598
    Par défaut
    hello
    je suis en train de m'em.... avec la même fonction
    jusqu'à récement, elle marchait avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DoCmd.TransferText acExportDelim, , "QueryA", "fic.txt", False
    aujourd'hui, elle ne me donne pas la même erreur que toi, donc, peut être que c'est la solution!?!

    par contre, j'ai un truc de fou avec erreur 3441 qui me dit
    "Le séparateur du champ de spécification du fichier texte est identique au séparateur décimal ou au délimiteur de texte."
    pour ça, je suis allé dans l'aide, j'ai fini par visiter le registre où j'ai bien trouvé Access Connectivity Engine et ISAM formats
    mais là, pas moyen de modifier les valeurs par défaut de textdelimiter ou autre: je ne les ai pas trouvé

    j'ai aussi essayé comme dit l'aide par l'enregistrement de format d'importation, mais dans le format par défaut, on ne retrouve pas deux fois le même caractère

    Alors je patine:

  3. #3
    Membre habitué Avatar de Daniel MOREAU
    Inscrit en
    Décembre 2004
    Messages
    372
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 372
    Points : 142
    Points
    142
    Par défaut
    Bonjour,

    J'ai opéré de cette façon et ça fonctionne. Il te faut préciser le nom du fichier d'exportation qui correspond au 1er critère ("Export_Nvx_Osct_T_Clt").

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        DoCmd.TransferText acExportDelim, "Export_Nvx_Osct_T_Clt", "QueryA", "c:\Mondossier\fic.txt", False, ""
    tu peux retrouver le nom du ficher d'exportation en
    - créant une macro
    - choississant TransférerTexte
    - dans l'option Format choisir dans la liste le modèle d'exportation (qui correspond au premier critère)
    - le nom de ta requête QueryA
    - l'emplacement et le nom du fichier

    Tu peux également enregistrer ta macro "Test" et ensuite choisir
    Outils dans la barre d'Outils,
    puis Macro,
    puis convertir les macros en visual basic pour en obtenir le code exact (qui tu retrouveras dans la liste des modules).

    Bon courage


    Daniel

  4. #4
    Membre actif
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2008
    Messages
    464
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Mars 2008
    Messages : 464
    Points : 268
    Points
    268
    Par défaut Re
    Bonjour et merci

    En fait Daniel c exactement ce que j'ai fait. Le seul soucis c'est mon format qui doit correspondre quand on lit la doc à un fichier *.ini
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    DoCmd.TransferText acExportDelim, "Export_Nvx_Osct_T_Clt", "QueryA", "c:\Mondossier\fic.txt", False, ""
    Dans ton exemple c'est Export_Nvx_Osct_T_Clt.
    Quand on regarde la macro on a un choix limité à une zone de liste déroulant avec à l'intérieur ... toutes les tables correspondante à mes tables liés dynamiquement avec ma base de données. J'ai considéré que l'échange entre ma table et le fichier texte de sortie était le même que l'échange entre un fichier cette fois ci importé et ma BD. J'ai donc pris les spécification de ce fichier.
    Selon le fichier j'ai des messages du type :
    spécification fichiers non trouvé
    ou
    objet non référencé dans la BD.
    Le plus curieux c'est que pour un troisième fichier spécifié dans le format ça marche ... presque :
    cette fois ci il me marque :
    fichier fic.txt non trouvé ce qui est plutot étonnant pour un fichier qui est supposé être exporté donc pas forcément existant.
    Encore plus marrant quand je ne marque pas l'extension (txt) il me met que je n'ai pas l'accès en écriture
    C très bizarre

  5. #5
    Membre actif
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2008
    Messages
    464
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Mars 2008
    Messages : 464
    Points : 268
    Points
    268
    Par défaut Simplifi même problème
    Simplifi en fait on a le même problème : toi et moi n'avions pas définis de format d'exportation. Du coup il prend pour toi la valeur par défaut (le miens doit avoir un problème de syntaxe). Par défaut le séparateur doit être le point (ou la virgule) si je comprends ton message. Mais comme tu dois avoir des champs de types décimales, la partie après la virgule est séparée par le même délimiteur (le point ou la virgule). Donc le pauvre moteur de base, il ne comprends pas comment séparer ces champs dans le fichier texte .
    Si je comprends bien tu as fait comme moi tu as essayé de chercher un format correspondant à un fichier d'importation (car en fait je comprends pas comment on peut prendre le format d'un fichier d'exportation : si il est exporté il n'est plus dans la base) mais ça marche pas apparemment. Donc on a le même problème

  6. #6
    Membre expérimenté
    Homme Profil pro
    Indépendant développeur et formateur
    Inscrit en
    Octobre 2007
    Messages
    1 036
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Indépendant développeur et formateur
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2007
    Messages : 1 036
    Points : 1 598
    Points
    1 598
    Par défaut
    hello
    oui on a le même problème mais pour le moment, je ne suis pas satisfait de ma solution
    j'avais créé un format d'exportation "essai" et ça me disait que mon format ne correspondait pas aux données
    l'histoire du point de séparation des extensions m'a fait essayer d'exporter vers fich_text au lieu de fich_text.txt et là je n'ai pas accès en écriture!!!!

    Après avoir farfouillé tout le registre comme indiqué dans un aide Microsoft, j'ai abandonné

    j'ai affiché les tables system (en 2007 c'est le bordel de trouver les options de navigation) et dans la table MSysIMEXSpecs j'ai retrouvé mon "essai", j'en ai profité pour lui coller un " dans la colonne TextDelim
    J'ai aussi trouvé la table MSysIMEXColumns qui contenait des définitions de colonnes ne pouvant correspondre au 5 requêtes que j'exporte (elle sont pas toutes pareilles) et j'ai viré le contenu de cette table

    en utilisant ensuite
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DoCmd.TransferText acExportDelim, "essai", "export_données_client", nom_fich, True
    ça a résolu le pb

    Néanmoins, si je ne suis pas totalement satisfait, c'est que l'option de ne pas préciser le nom du fichier de format existe bien dans l'aide, surtout pour une exportation de texte délimité et que je ne comprends pas du tout
    - pourquoi il y a une erreur dans les valeurs par défaut d'Access
    - et où peut on aller pour corriger cette erreur

    M'enfin, ça marche à peu près

  7. #7
    Membre actif
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2008
    Messages
    464
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Mars 2008
    Messages : 464
    Points : 268
    Points
    268
    Par défaut
    Bonjour
    En farfouillant un peu sur internet, j'ai peut être une idée que j'essaierai demain. Apparemment, il faudrait faire une exportation manuelle (Fichier/Exporter etc...) puis il devrait exister un bouton commande avancée où on propose d'enregistrer la spec. Ensuite, une fois la spec enregistrée, il faut l'utiliser dans la commande
    DoCmd...
    Je pense que si ça marche c un petit peu plus propre que de modifier les valeurs des tables systèmes (à mon humble avis de débutant d'Access).

    Ceci dit tu as l'air d'être insatisfait par le délimiteur par défaut d'Access. J'avoue que je ne vois pas pourquoi. En fait le message que tu as eu au début ne me choque pas : si par défaut Access sépare les champs par le même caractère de délimiteur que celui qui sépare la partie entière de la décimale dans un réel, il suffit que tu ais des champs de types numériques pour que ce soit le bordel.

    Par contre je vois que tu obtient la même erreur que moi quand tu enlèves l'extension de ton fichier txt et que tu n'as plus les droits en écriture. Je suppose que comme on a choisi la fonction exporter en fichier txt on a les droits en écritures que sur des fichiers de type txt ; enfin c comme ça que je l'interprète

  8. #8
    Membre expérimenté
    Homme Profil pro
    Indépendant développeur et formateur
    Inscrit en
    Octobre 2007
    Messages
    1 036
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Indépendant développeur et formateur
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2007
    Messages : 1 036
    Points : 1 598
    Points
    1 598
    Par défaut
    hello
    j'ai lu les même chose que toi et j'ai créé la spec "essai"

    j'ai encore eut des messages d'erreur parce que la spec s'enregistre dans les tables system MSysIMEXColumns et MSysIMEXSpecs

    dans Specs on trouve les colonnes textdelim, decimalpoint, fieldseparator et finalement on peut arriver à comprendre

    dans Columns, il y avait les définitions de colonnes (1 colonne par enregistrement) correspondant à l'exemple de fichier sur lequel j'ai commencé de générer la spec
    or, ce fichier, ne correspond pas à la définition de ma 1° requête à exporter et quand bien même, il ne correspondrait pas aussi à la deuxième
    et j'avais pas envie de faire essai1, essai2, etc

    j'ai donc vidé la table MSysIMEXColumns pour ne garder que les définitions de séparateurs et ça marche
    mais je suis toujours insatisfait pour les raisons au dessus

  9. #9
    Membre expérimenté
    Homme Profil pro
    Indépendant développeur et formateur
    Inscrit en
    Octobre 2007
    Messages
    1 036
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Indépendant développeur et formateur
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2007
    Messages : 1 036
    Points : 1 598
    Points
    1 598
    Par défaut
    Good night*
    je te livre le contenu de ma table MSysIMEXSpecs
    je crois que c'est plus fiable que de passer par l'assistant sachant qu'après l'assistant il faut vider MSysIMEXColumns si on veut se servir de "essai" plusieurs fois, et pour des exportations qui n'ont pas les même colonnes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    DateDelim  		/
    DateFourDigitYear 	-1
    DateLeadingZeros	 0
    DateOrder  		0   
    DecimalPoint		 .
    FieldSeparator 		;
    FileType 		1252
    SpecID 			6 
    SpecName 		Essai
    SpecType 		1
    StartRow 		0
    TextDelim		 "
    TimeDelim		 :
    *Bonne nuit

  10. #10
    Membre actif
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2008
    Messages
    464
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Mars 2008
    Messages : 464
    Points : 268
    Points
    268
    Par défaut Re
    En somme tu souhaites exporter des requêtes qui font références soit à des tables d'entrées et/ou requêtes formatant ces tables qui n'ont pas le même type de données dans leurs champs. En ce cas je ne vois pas ce que tu pourrais faire d'autre que de créer un fichier de spécifications par requêtes. Si tu en as 5 ça va encore, tu les fait une fois pour toute, puis tu te fais ta sub avec tes 5 commandes DoCmd.... En revanche si tu en as 50 je comprends ton découragement.

    Remarque : quand on regarde l'assistant d'exportation, il propose par défaut le " comme délimiteur de texte et le ; comme délimiteur de champs. Je suppose que par défaut, si on lui indique rien, c'est les délimiteurs qu'il choisit dans la commande DoCmd. Alors peut être que si dans tes requêtes tu as du texte ou un champs formatés avec ces caractères spéciaux, ça pose problème

  11. #11
    Membre expérimenté
    Homme Profil pro
    Indépendant développeur et formateur
    Inscrit en
    Octobre 2007
    Messages
    1 036
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Indépendant développeur et formateur
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2007
    Messages : 1 036
    Points : 1 598
    Points
    1 598
    Par défaut
    je dors
    Mais dans mes requêtes, j'ai fais gaffe de ne pas avoir de caractères spéciaux
    En plus tout ça marchait très bien, sur une version précédente d'Access, j'exportais 6 requêtes les unes derrières les autres, dans le même sousprogramme et sans que personne ne se soucie de rien, puisqu'un autre programme (sur AS400) vient récupérer et effacer les fichiers.

    effectivement, dans ma spec essai, j'ai l'impression de n'avoir mis que des trucs par défaut, c'est pour ça que je ne comprends pas pourquoi ça ne marche pas si on ne précise pas de fichier de spécification

    Enfin, en vidant MSysIMEXColumns, j'arrive tout à fait bien à exporter mes 6 requêtes différentes, je peux donc dire que ça marche

    reste plus que les 2 points d'insatisfaction sur 'la théorie du problème"

    A+

  12. #12
    Membre actif
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2008
    Messages
    464
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Mars 2008
    Messages : 464
    Points : 268
    Points
    268
    Par défaut
    Bonjour,
    En ce qui me concerne l'enregistrement de mes spécifications fonctionnent bien. Pour autant que je sache je ne sais pas accéder au table système tel que MSysIMEXColumns. Ceci dit j'avoue que je n'ai pas poussé l'investigation dans ce sens. En ce qui me concerne si l'enregistrement des spécifications fonctionnaient, je ne vois pas pourquoi modifier les tables systèmes.

    En tout cas merci pour ton aide. Eventuellement je chercherai vers la modification des tables systèmes si à l'avenir le problème persiste.

    Bon en ce qui me concerne il ne me reste plus qu'à créer un module de transfert ftp de mon fichier sur un serveur VAX pour que cela fonctionne mais ça.... c'est une autre histoire.

  13. #13
    Membre expérimenté
    Homme Profil pro
    Indépendant développeur et formateur
    Inscrit en
    Octobre 2007
    Messages
    1 036
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Indépendant développeur et formateur
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2007
    Messages : 1 036
    Points : 1 598
    Points
    1 598
    Par défaut
    hello
    effectivement, je ne bricole pas tous les jours dans les table system, c'est une aide sur le net qui m'a mis sur la piste et finalement c'est très simple, en 2007 c'est dans options de navigation dans les options Access de la base courante et avant c'était dans optons d'affichage, où il suffit de cocher "afficher les objets système"

    D'accord avec toi, j'aurais préféré ne pas avoir à citer de spécification et que tout marche tout seul comme avnat, mais ! ! !

    Quand au VAX (ça existe encore ça?) et vu que j'ai vu des choses similaires avec un AS400, le mieux c'est que le programmeur du VAX vienne lire les fichiers ASCII à l'endroit où Access les a posé. (à condition bien sûr que ce répertoire soit acessible par les deux logiciels)

    Bon courage

  14. #14
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1
    Points : 1
    Points
    1
    Par défaut
    Bonjour,

    J'ai eu le même problème que vous sur une base.
    Un "TransférerTexte" d'une macro qui exportait une table, et qui du jour au lendemain à remplacé les point virgules par des virgules toutes seules..

    Je ne précise pas de format, donc c'est la valeur par défaut qui est utilisée.

    Sauriez vous où elle se trouve cette valeur? car je n'arrive pas à mettre la main dessus :p

    Merci !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 6
    Dernier message: 27/10/2009, 18h05
  2. [WD14] Ajout dans un fichier a partir d'une liste
    Par mero007 dans le forum WinDev
    Réponses: 1
    Dernier message: 20/07/2009, 15h13
  3. Réponses: 3
    Dernier message: 20/07/2009, 11h15
  4. Réponses: 2
    Dernier message: 12/01/2009, 22h37
  5. Réponses: 8
    Dernier message: 07/09/2006, 11h43

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