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

Access Discussion :

Exporter plusieurs requêtes sur fichier text avec mise en page


Sujet :

Access

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2006
    Messages : 15
    Points : 7
    Points
    7
    Par défaut Exporter plusieurs requêtes sur fichier text avec mise en page
    Bonjour,

    J'ai doit exporter 3 requêtes d'une base de donnée ACCESS
    vers un fichier text .txt et ce avec mise en page séquentiel, c-à-d :

    1ere requête sera l'entête de page du fichier
    2ème requête sera le corps de page du fichier
    3ème requête sera le pied de page du fichier .

    Je dois utiliser du code VBA et SQL.

    Pourriez vous m'aider quel serait la solution sans devoir passer par une table intérmédiaire ? Merci

    Kenzo

  2. #2
    Membre expérimenté
    Avatar de Papy Turbo
    Homme Profil pro
    Développeur Office/VBA
    Inscrit en
    Mars 2004
    Messages
    822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Office/VBA
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2004
    Messages : 822
    Points : 1 709
    Points
    1 709
    Par défaut
    Puisque tu sembles en être au stade d'analyse, en gros :
    - il n'est pas question de table intermédiaire, du simple fait que tes 3 requêtes ont très probablement des structures très différentes,
    - tu ne devrais pas avoir besoin de SQL non plus, si tu te contentes de créer tes 3 requêtes dans Access et de les enregistrer. À toi de dire si elles ont besoin d'être paramétrées ?
    - tu vas écrire une sub ou une fonction VBA qui va
    1- créer un document text. Le plus simple est d'ajouter une référence au Scripting.FileSystemObject : objet Microsoft Scripting Runtime (tu trouveras en FAQ, sources... et ailleurs sur DVP des exemples pour créer un fichier et y ajouter du texte)
    2- tu vas ouvrir la 1ère requête SQL comme un recordset (au choix ADO.recordset ou, plus simple, DAO.recordset), lire chaque ligne, la mettre en forme en un string, exporter le string dans le fichier texte, en en-tête.
    3- dépendant du nombre d'enregistrements de la 2ème (quelques uns ou des milliers possibles ?), tu choisiras une méthode pour exporter le corps du fichier,
    4- idem pour le pied de fichier.

    Qu'est-ce qui n'est pas clair ?

  3. #3
    Expert éminent sénior

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Points : 32 311
    Points
    32 311
    Par défaut
    Pour illustrer les objets TextStream du FlieSystemObject recommandé par PapyTurbo, tu as ceci :

    http://access.developpez.com/sources...s#FichierTexte


  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2006
    Messages : 15
    Points : 7
    Points
    7
    Par défaut
    Bonjour,

    Merci beaucoup pour cette rapidité et les informations , je vais m'y mettre.

    Merci

    Kenzo

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2006
    Messages : 15
    Points : 7
    Points
    7
    Par défaut Sauvegarde de requêtes dans fichier texte + stockage
    Bonjour,

    pour ce qui est du Sauvegarde de requêtes dans le fichier texte

    le code ci dessous je pense que serait bon :

    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
     
    Public Sub SauvegarderRqt(strFichier As String)
    Dim Db As DAO.Database
    Dim qry As DAO.QueryDef
    Dim FSO As New Scripting.FileSystemObject
    Dim oFileText As Scripting.TextStream
        On Error Goto Err
        'Instancie Db
        Set Db = CurrentDb
        'Ouvre le fichier texte (le crée s'il n'existe pas)
        Set oFileText = FSO.OpenTextFile(strFichier, ForWriting, True)
        'Pour chaque requête
        For Each qry In Db.QueryDefs
            'si la requête n'est pas sytème (commence par ~)
            If Left(qry.Name, 1) <> "~" Then
                'Ecrit le nom de la requête et son code SQL
                With oFileText
                    'Ecrit le titre et des #
                    .WriteLine String(Len(qry.Name) + 4, "#")
                    .WriteLine "# " & qry.Name & " #"
                    .WriteLine String(Len(qry.Name) + 4, "#")
                    'Saute 1 ligne et écrit le SQL
                    .WriteBlankLines (1)
                    .WriteLine qry.SQL
                    'Saute 3 lignes
                    .WriteBlankLines (3)
                End With
            End If
        Next qry
        'Ferme le fichier, libère la mémoire
        oFileText.Close
        Set FSO = Nothing
        Db.Close
        Set Db = Nothing
        'Demande à l'utilisateur s'il veut visualiser le fichier
        If MsgBox("Voulez vous ouvrir le fichier généré ?", _
            vbQuestion + vbYesNo, "Sauvegarde requête") = vbYes Then
                Shell "notepad.exe " & strFichier, vbMaximizedFocus
            End If
        Exit Sub    '======================
    Err:
        Msgbox "Une erreur est survenue."
    End Sub

    Remarque: mais je dois créer 2 fichiers dont le contenu est semblable mais que les noms différent.



    De plus je dois également stocker sur une table le chemin du fichier texte ainsi que son nom sur 2 champs différents . Quel sera le code en VBA et comment pourrais-je implementer ce code dans le code ci-dessus?

    Merci

    Kenzo

  6. #6
    Membre expérimenté
    Avatar de Papy Turbo
    Homme Profil pro
    Développeur Office/VBA
    Inscrit en
    Mars 2004
    Messages
    822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Office/VBA
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2004
    Messages : 822
    Points : 1 709
    Points
    1 709
    Par défaut
    Ben, à toi de tester et nous dire si ton code marche ou pas ?
    Quelques remarques quand même :
    1-
    For Each qry In Db.QueryDefs
    qui me paraît assez dangereux : ça m'étonnerait beaucoup que tu n'aies pas plus de 3 requêtes dans ton application (il va vite y en avoir d'autres).
    Donc, il vaudrait mieux :
    - ouvrir chaque requête par son nom : Set qry = db.OpenQueryDef("Nomrequête")
    - appeler à chaque fois une sub qui ajoute son contenu au fichier texte ouvert. Par exemple une Sub ou Fonction intitulée AppendText()

    2-
    C'est apparemment le nom de chaque requête que tu exportes dans ton fichier texte. Tu ne veux pas exporter leur contenu ?

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2006
    Messages : 15
    Points : 7
    Points
    7
    Par défaut
    Bonjour,

    Oui effectivement, je dois exporter le CONTENU de mes requêtes dans les 2 fichiers.
    Par contre je dois exporter sur les champs d'une table (qui sert d'élément traceur, de remplissages, d'arguments) le chemin auquel j'enregistre mes fichiers et le nom de mes requêtes.


    (PS: Merci pour le message, j'en prendrai compte)

    En vous remerciant

    Kenzo

  8. #8
    Membre expérimenté
    Avatar de Papy Turbo
    Homme Profil pro
    Développeur Office/VBA
    Inscrit en
    Mars 2004
    Messages
    822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Office/VBA
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2004
    Messages : 822
    Points : 1 709
    Points
    1 709
    Par défaut
    Bon,

    je m'en tiens à une seule question à la fois : exporter le contenu des requêtes.
    Tu n'auras probablement aucun besoin d'ouvrir un objet querydef.
    Tu dois connaître leurs noms ? Ils doivent être fixes, non ?
    Si tu veux exporter leur contenu, il faut
    - les ouvrir en tant que jeux d'enregistrements (DAO.Recordset) avec un db.OpenRecordset(), puis
    - exporter le contenu de chaque champ du premier enregistrement,
    - parcourir chaque enregistrement s'il y en a plusieurs (au moins pour le corps) et continuer jusqu'à la fin du fichier,
    - passer à la requête suivante.

    Il s'agit d'une opération assez complexe. Je pense que tu auras intérêt à la scinder en plusieurs subs(), ne serait-ce que pour y voir clair.

    Le code pour exporter dans le fichier texte est bon (à tester au fur et à mesure : quand tu fais tourner cette sub, elle crée un fichier avec les noms des requêtes et des lignes vides dedans, ou elle se plante ?).
    Tu peux nous proposer un code qui lit les enregistrements et les exporte ?

  9. #9
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2006
    Messages : 15
    Points : 7
    Points
    7
    Par défaut
    Bonjour,

    voici le code que je propose :


    Private Sub BT_EXPORTER_Click()
    Dim sql As String
    Dim rs As DAO.Recordset
    Dim i As Integer
    Dim t1 As Integer
    Dim t2 As Integer
    Dim Nbrdesauts1 As Integer
    Dim Nbrdesauts2 As Integer
    Dim NbrOccurences As Integer
    Dim File1 As String
    Dim File2 As String
    Dim Message, DateTime

    Dim Id_Arg As Integer
    Dim Reference As Integer
    Dim Localisation As String
    Dim Argument As String
    Dim Description As String

    Rem Dim Today
    Rem Today = Format(Now, dd / mm / yy)

    Id_Arg = 0
    Reference = 0
    Localisation = ""
    Argument = ""
    Description = ""

    File1 = "c:\isa1.txt"
    File2 = "c:\isa2.txt"

    Open File1 For Output As FE1
    Open File2 For Output As FE2

    Message = "Entrez la date pivot"
    DateTime = InputBox(Message, "Paramètre")

    Rem EXPORT_AIDES = " ""0"" & ""0000"" & Format(Date(),""ddmmyy"") & ""050"" & ""02"" & String(10,""0"") & ""00410629011"" & ""00001306332"" & ""068241693715"" & ""5" & " " & Format([DATE PIVOT], "ddmmyy") & String(60, " ") & "FIN"
    Rem Print #FE1, EXPORT_AIDES
    Set sql = "SELECT ""0"" & ""0000"" & Format(Date(),""ddmmyy"") & ""050"" & ""02"" & String(10,""0"") & ""00410629011"" & ""00001306332"" & ""068241693715"" & ""5"" & "" "" & Format([DATE PIVOT], ""ddmmyy"") & String(60, "" "") & ""FIN"" AS EXPORT_AIDES;"
    Set rs = CurrenDb.OpenRecordset(sql)

    rs.MoveFirst
    Print #FE1, rs!EXPORT_AIDES
    Print #FE2, rs!EXPORT_AIDES

    Rem Print #FE1, "char(13)"
    Nbrdesauts1 = 7 ' Valeur du saut de l'en-tête au corps, à évaluer
    For t1 = 1 To Nbrdesauts1
    Print #FE1,
    Print #FE2,
    Next

    sql = ""
    Set sql = "SELECT ""1"" & Right(""0000"" & [NumLigne],4) & Right(String(12,""0"") & tbl_facturations!NDOSSIER,12) & ""0"" & [MT1] & [MT2] & Left(tbl_facturations!F_NOM & String(26,"" ""),26) & Left(tbl_facturations!COM_STRUCT & String(15,"" ""),15) & ""AIDES "" & String(12,""0"") & String(30,"" "") & ""FIN"" AS EXPORT, DCount(""DOMICILIATION"",""TBL_FACTURATIONS"",""DOMICILIATION <=" & [DOMICILIATION] & " and DOMICILIATION >0"") AS NumLigne, Right(String(10,""0"") & Int([MT_TOTAL_TVAC]),10) AS MT1, Right(""0"" & CStr(Round([MT_TOTAL_TVAC]-CLng([MT1]),2)*100),2) AS MT2 FROM TBL_FACTURATIONS INNER JOIN TBL_FACTURATIONS_DETAILS ON TBL_FACTURATIONS.ID_FACTURATION = TBL_FACTURATIONS_DETAILS.ID_FACTURATION"" WHERE (((TBL_FACTURATIONS.DOMICILIATION) Is Not Null And (TBL_FACTURATIONS.DOMICILIATION) <> ""0"")) ORDER BY TBL_FACTURATIONS.DOMICILIATION;"
    Set rs = CurrenDb.OpenRecordset(sql)
    rs.MoveLast
    NbrOccurences = rs.RecordCount
    rs.MoveFirst
    For i = 1 To NbrOccurences
    Print #FE1, rs!EXPORT & NumLigne & MT1 & MT2
    Print #FE2, rs!EXPORT & NumLigne & MT1 & MT2
    rs.MoveNext
    Next


    Nbrdesauts2 = 10 ' Valeur du saut du corpd au pied de page, à évaluer
    For t2 = 1 To Nbrdesauts2
    Print #FE1,
    Print #FE2,
    Next


    sql = ""
    Set sql = " SELECT ""9"" & Right(String(4,""0"") & [MT1],4) & [MT2] & [MT3] & ""0000"" & String(12,""0"") & String(15,""0"") & String(65,"" "") & ""FIN"" AS EXPORT, DCount(""*"",""TLOC_DOMICILIATIONS"","")-1 AS MT1, Left(DLookUp(""Tot_Fact"",""REQ_DOMICILIATIONS_req_totaux_aides"",""),10) & Right(DLookUp(""Tot_Fact"",""REQ_DOMICILIATIONS_req_totaux_aides"",""),2) AS MT2, DLookUp(""Tot_Dom"",""REQ_DOMICILIATIONS_req_totaux_aides"","") AS MT3;"
    Set rs = CurrenDb.OpenRecordset(sql)

    rs.MoveFirst
    Print #FE1, rs!EXPORT & MT1 & MT2 & MT3
    Print #FE2, rs!EXPORT & MT1 & MT2 & MT3

    Close #FE1
    Close #FE2

    Id_Arg = 0
    Reference = 0
    Localisation = "FRM_FACTURATION"
    Argument = "INFO"
    Description = "Exportation domicilations vers 2 fichiers format isabel localisation fichier1 : c:\isa1.txt et fichier 2 : c:\isa2.txt"


    rs.OpenRecordset ("TBL_ARGUMENTS")
    rs.AddNew
    rs.Fields.Append (Id_Arg)
    rs.Fields.Append (Reference)
    rs.Fields.Append (Localisation)
    rs.Fields.Append (Argument)
    rs.Fields.Append (Description)
    rs.Update


    End Sub

    Ici j'enregistre également sur une table des données d'informations.
    Pour la mise en page j'ai simplement placer des lignes vides,
    y-a-t'il plus facile ou des fonctions spéciales?

    Comment exporter les données d'une table ( requête ), sans passer par une table intermédiare, vers un fichier texte ?

    Merci

    Kenzo

  10. #10
    Membre expérimenté
    Avatar de Papy Turbo
    Homme Profil pro
    Développeur Office/VBA
    Inscrit en
    Mars 2004
    Messages
    822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Office/VBA
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2004
    Messages : 822
    Points : 1 709
    Points
    1 709
    Par défaut
    Désolé, il m'arrive souvent de reprendre les messages mal formatés, d'ajouter les balises de code, les indentations, mais là, y en a trop.
    Et pis, c'est le ouikène, suis trop flemmard pour ariver à lire ce code non indenté.

    Donc, j'espère que tu ne m'en voudras pas, mais merci d'éditer ton message et de le mettre en forme pour qu'on arrive à le lire.

    D'autre part, je rappelle que les gens de DVP ne sont pas là pour faire vos applications à votre place mais pour vous aider à résoudre chaque problème ou difficulté.

    Donc, plutôt que de coller tout le code et attendre une réponse, il serait bien de tester ce qui a été proposé et de poursuivre la discussion en disant ce qui va bien (on est contents, on oublie ça), pour se concentrer sur le prochain problème, mais rien que le problème.

  11. #11
    Membre du Club
    Profil pro
    Developer
    Inscrit en
    Juin 2004
    Messages
    194
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Developer

    Informations forums :
    Inscription : Juin 2004
    Messages : 194
    Points : 58
    Points
    58
    Par défaut
    Bonjour,

    Désolé, je suis débutant en Access, je fais ça par passion en complément et je ne connais pas bcp la politique de DVP donc c pour ça que j'ai posté tous le code , sinon il est bien de partager nos connaissances. La prochaine fois je serais plus spécifique, c vrai.

    Merci

    Kenzo

  12. #12
    Membre expérimenté
    Avatar de Papy Turbo
    Homme Profil pro
    Développeur Office/VBA
    Inscrit en
    Mars 2004
    Messages
    822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Office/VBA
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2004
    Messages : 822
    Points : 1 709
    Points
    1 709
    Par défaut
    J'ai du mal à te suivre sous tes divers pseudos !
    Sinon, il n'y a aucun mal à poser des questions claires, débutant ou confirmé, mais tous ceux qui répondent le font aussi par passion, donc le minimum est de poser des questions lisibles.
    Ca ne devrait pas te prendre très longtemps de revoir le code ci-dessus pour le rendre lisible, avec indentations et balises de code.

    Essaye de prendre une question à la fois, de la définir aussi clairement que possible, et tu auras beaucoup plus de chances de recevoir des réponses.

    Bon courage.

Discussions similaires

  1. Requête sur fichier XML avec liaison de données
    Par lpyann dans le forum XML/XSL et SOAP
    Réponses: 8
    Dernier message: 14/08/2014, 22h44
  2. batch sur fichier texte avec redondance de 7 jours
    Par kaynan dans le forum Windows
    Réponses: 0
    Dernier message: 19/03/2014, 17h09
  3. Importer fichier texte avec mise en forme sur page Web
    Par Ditrius dans le forum Langage
    Réponses: 6
    Dernier message: 18/10/2010, 17h34
  4. Export base Access vers fichier texte et mise en forme
    Par Neau57 dans le forum Débuter
    Réponses: 2
    Dernier message: 16/07/2010, 10h04
  5. export de données en fichier texte avec accents
    Par Akazed dans le forum Réplications
    Réponses: 6
    Dernier message: 29/09/2009, 11h03

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