Forum des développeurs  

Le forum de référence en programmation et développement. Articles, cours et tutoriels du débutant au chef de projet et DBA confirmé.
Précédent   Forum des développeurs > Hardware, Systèmes et Logiciels > Microsoft Office > Access > VBA Access

VBA Access Le forum pour les questions relatives au code VBA sous Access, et à son environnement de développement VBE.

Réponse
 
Outils de la discussion
Vieux 07/10/2008, 21h49   #1 (permalink)
Membre éclairé
 
Avatar de damkre
 
Date d'inscription: janvier 2007
Localisation: Bruxelles - Belgique
Messages: 360
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 :
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.
__________________
DamKre



Mon forum : http://indigo.xooit.be/

Un responsable informatique finit toujours par être considéré :
- soit inutile, puisque ça marche,
- soit incompétent, puisque ça marche pas.
(Sagesse populaire)

Dernière modification par damkre ; 11/10/2008 à 09h55 Motif: Ajout des balises code
damkre est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 07/10/2008, 22h02   #2 (permalink)
Rédacteur

 
Avatar de argyronet
 
Date d'inscription: mai 2004
Localisation: Dans une bulle d'air, voyons...
Messages: 2 082
Envoyer un message via MSN à argyronet
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
__________________
Ce qui donne son sens à la communication, c´est la réponse que l´on obtient. Si vous n´obtenez pas la réponse voulue, communiquez différemment...

Web Site@Mail
Livres : VBA pour OFFICE 2007 et MICROSOFT ACCESS 2007
Tutoriels : Créer un gestionnaire de Post-It pour vos applications Access et Synchroniser 2 zones de liste dans un formulaire
MDB Viewer : Visionneuse Access v3.0
argyronet est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 08/10/2008, 16h58   #3 (permalink)
Membre éclairé
 
Avatar de damkre
 
Date d'inscription: janvier 2007
Localisation: Bruxelles - Belgique
Messages: 360
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.
__________________
DamKre



Mon forum : http://indigo.xooit.be/

Un responsable informatique finit toujours par être considéré :
- soit inutile, puisque ça marche,
- soit incompétent, puisque ça marche pas.
(Sagesse populaire)
damkre est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 08/10/2008, 22h49   #4 (permalink)
Rédacteur

 
Avatar de argyronet
 
Date d'inscription: mai 2004
Localisation: Dans une bulle d'air, voyons...
Messages: 2 082
Envoyer un message via MSN à argyronet
Par défaut

Oui, dans le code.
Si possible, générique.

Par exemple :
Code :
 
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
__________________
Ce qui donne son sens à la communication, c´est la réponse que l´on obtient. Si vous n´obtenez pas la réponse voulue, communiquez différemment...

Web Site@Mail
Livres : VBA pour OFFICE 2007 et MICROSOFT ACCESS 2007
Tutoriels : Créer un gestionnaire de Post-It pour vos applications Access et Synchroniser 2 zones de liste dans un formulaire
MDB Viewer : Visionneuse Access v3.0
argyronet est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 09/10/2008, 20h49   #5 (permalink)
Membre éclairé
 
Avatar de damkre
 
Date d'inscription: janvier 2007
Localisation: Bruxelles - Belgique
Messages: 360
Par défaut

J'ai fait ceci :

Code :
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 ?
__________________
DamKre



Mon forum : http://indigo.xooit.be/

Un responsable informatique finit toujours par être considéré :
- soit inutile, puisque ça marche,
- soit incompétent, puisque ça marche pas.
(Sagesse populaire)
damkre est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 10/10/2008, 15h29   #6 (permalink)
Rédacteur

 
Avatar de argyronet
 
Date d'inscription: mai 2004
Localisation: Dans une bulle d'air, voyons...
Messages: 2 082
Envoyer un message via MSN à argyronet
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
__________________
Ce qui donne son sens à la communication, c´est la réponse que l´on obtient. Si vous n´obtenez pas la réponse voulue, communiquez différemment...

Web Site@Mail
Livres : VBA pour OFFICE 2007 et MICROSOFT ACCESS 2007
Tutoriels : Créer un gestionnaire de Post-It pour vos applications Access et Synchroniser 2 zones de liste dans un formulaire
MDB Viewer : Visionneuse Access v3.0
argyronet est déconnecté   Envoyer un message privé Réponse avec citation
Réponse

Précédent   Forum des développeurs > Hardware, Systèmes et Logiciels > Microsoft Office > Access > VBA Access

 
Offres d' emploi informatique sur Lesjeudis.com


Outils de la discussion

Règles de messages
Vous ne pouvez pas créer de nouvelles discussions
Vous ne pouvez pas envoyer des réponses
Vous ne pouvez pas envoyer des pièces jointes
Vous ne pouvez pas modifier vos messages

Les balises BB sont activées : oui
Les smileys sont activés : oui
La balise [IMG] est activée : oui
Le code HTML peut être employé : non
Trackbacks are non
Pingbacks are non
Refbacks are non
Navigation rapide