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 :

[A-00] Ecriture de données dans un fichier texte


Sujet :

VBA Access

  1. #1
    Membre habitué
    Avatar de DamKre
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2007
    Messages
    495
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2007
    Messages : 495
    Points : 184
    Points
    184
    Par défaut [2000] Ecriture de données dans un fichier texte
    Bonjour à tous !

    Je me permets à nouveau de faire appel à vous pour m'aider à résoudre un problème à l'aide de vos lumières

    Je suis dans un formulaire, qui contient des données. Dans ce formulaire, j'ai insérée un sous-formulaire ( les deux tables sont liées ).

    Sur ce formulaire principal, j'ai un bouton, qui écrit des données dans un fichier texte ( tout cela fonctionne ), sur base de ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Set fs = CreateObject("Scripting.FileSystemObject")
    Set a = fs.CreateTextFile(CurrentProject.Path & "\Résultats.txt", True)
     
    'Lignes à écrire
    a.WriteLine
    a.WriteLine ("Test de texte" & me.MONCHAMP.Value )
     
    a.Close
     
    MsgBox "Le fichier généré a été créé.", vbInformation, "MON APPLICATION"
    Je souhaite maintenant écrire plusieurs lignes, qui seraient toutes celles contenues dans mon sous-formulaire.

    Comment y arriver ?

    Merci de vos réponses.

  2. #2
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 5 124
    Points : 12 176
    Points
    12 176
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    Il faut que tu établisses ce que tu veux écrire à travers une requête.
    De là, avec un objet Recordset, tu lis ta requête ligne à ligne et tu écris dans ton fichier avant chaque MoveNext.
    Par contre, la méthode que tu as choisi avec ton fso n'est pas suffisante, il te faut un Textstream avec un paramètre ForAppending.
    Sinon, tel que tu l'as écris, tu écraseras toujours ton fichier avec la dernière valeur.

    Argy

  3. #3
    Membre habitué
    Avatar de DamKre
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2007
    Messages
    495
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2007
    Messages : 495
    Points : 184
    Points
    184
    Par défaut
    Bonjour !

    Je me permets de demande quelques précisions :

    Citation Envoyé par argyronet Voir le message
    Il faut que tu établisses ce que tu veux écrire à travers une requête.
    => Cela veut-il dire que je dois créer une requête, et que celle-ci soit un objet de ma DB, ou dois-je simplement l'écrire dans mon code ?

    Citation Envoyé par argyronet Voir le message
    De là, avec un objet Recordset, tu lis ta requête ligne à ligne et tu écris dans ton fichier avant chaque MoveNext
    => Là, je ne comprends pas très bien comment faire...
    Quel code taper en VBA ?

    Citation Envoyé par argyronet Voir le message
    Par contre, la méthode que tu as choisi avec ton fso n'est pas suffisante, il te faut un Textstream avec un paramètre ForAppending.
    Sinon, tel que tu l'as écris, tu écraseras toujours ton fichier avec la dernière valeur.
    => Cela, je l'avais bien compris, ne t'inquiète pas...
    J'y viendrai dès que ce qui précède sera résolu.

  4. #4
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 5 124
    Points : 12 176
    Points
    12 176
    Billets dans le blog
    5
    Par défaut
    Oui, dans le code.
    Si possible, générique.

    Par exemple :
    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
     
    Private Sub cmdWriteIntoFile_Click()
    Dim oFSO                                As Scripting.FileSystemObject
    Dim oTextStream                         As Scripting.TextStream
    Dim oDB                                 As DAO.Database
    Dim oRS                                 As DAO.Recordset
    Dim SQLCommand                          As String
    Dim strLine                             As String
    Dim strFieldValue                       As String
    Dim strFileName                         As String
    Dim I                                   As Long
    Dim F                                   As Long
     
        Set oFSO = New Scripting.FileSystemObject
        strFileName = "C:\_Test\Un fichier.txt"
        With oFSO
            Set oTextStream = .CreateTextFile(strFileName, True, False)
        End With
        SQLCommand = "SELECT * FROM [Détails commandes complets] _
    WHERE [N° commande] = " & Me![N° commande]
        Set oDB = CurrentDb
        Set oRS = oDB.OpenRecordset(SQLCommand, dbOpenDynaset)
        With oRS
            Do While Not .EOF
                I = I + 1
                For F = 0 To .Fields.Count - 1
                    strFieldValue = strFieldValue & .Fields(F).Value & ";"
                Next
                strLine = strFieldValue
                oTextStream.WriteLine strLine
                strFieldValue = vbNullString
                .MoveNext
            Loop
            .Close
        End With
        oDB.Close
        Set oRS = Nothing
        Set oDB = Nothing
    End Sub
    Argy

  5. #5
    Membre habitué
    Avatar de DamKre
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2007
    Messages
    495
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2007
    Messages : 495
    Points : 184
    Points
    184
    Par défaut
    J'ai fait ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Dim iRst As DAO.Recordset
        Set iRst = CurrentDb.OpenRecordset("SELECT etc FROM etc WHERE etc ", dbOpenDynaset)
     
    While Not iRst.EOF
        a.WriteLine (MES LIGNES A INSÉRER)
        iRst.MoveNext
     
    Wend
    iRst.Close
    Set iRst = Nothing
    Et cela fonctionne...

    ( J'avais trouvé cela entretemps, en chipotant un peu )

    Est-ce tout aussi correct, ou faut-il rectifier quelque chose pour rendre cela plus simple ?

    Ah, et autre question ( tant qu'on y est) : peut-on prévoir des alignements ( avec par exemple des tabulations ), ou est-ce irréalisable ?

  6. #6
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 5 124
    Points : 12 176
    Points
    12 176
    Billets dans le blog
    5
    Par défaut
    Oui, on peu prévoir des alignement.
    Il te faut formater le champ en fonction de sa longueur au momenet de la lecture et sa longueur désirée et ajouter des espaces à gauche ou à droite selon que c'est un numérique ou une chaîne.
    Cela s'effectue au moment de la construction de la chaîne "strFieldValue" que je t'ai proposé hier.
    Il te faut alors créer la fonction qui s'en charge, le mieux étant d'avoir une nomenclature préalable Type, LongueurChamp, LongueurFinale, Alignement.

    Argy

Discussions similaires

  1. [VBA-E]Ecriture de données dans un fichier texte
    Par osito57 dans le forum Macros et VBA Excel
    Réponses: 15
    Dernier message: 18/08/2017, 19h42
  2. Réponses: 0
    Dernier message: 26/05/2009, 10h10
  3. [CSV] Ecriture des données dans un fichier
    Par kagura dans le forum Langage
    Réponses: 3
    Dernier message: 07/11/2006, 22h55
  4. Réponses: 2
    Dernier message: 16/01/2006, 19h34
  5. Réponses: 3
    Dernier message: 22/02/2004, 20h09

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