Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Création fichier TXT à partir d'une requête

2 réponses
Avatar
Sophie
Bonjour à tous,

Je vais vous mettre en contexte avant de vous expliquer mon problème,
j'aprécierais et j'espère que vous prendrez le temps de tout lire et
d'essayer de m'aider malgré la longueur de mon message.
Je travaille dans le milieu scolaire et je crée des fichiers pour aider à la
création des élèves (répertoire personnel, mot de passe, accès réseau) sur
les serveurs de l'école. Mon problème est avec le fichier texte. Je dois
écrire dans un fichier une ligne de commande pour chaque élève. J'ai donc
une requête qui me permet d'aller chercher les informations dans une base de
donnée d'élève.

J'ai donc utiliser cette commande :

DoCmd.OutputTo acReport, stDocName4, acFormatTXT, stdocoutputname4

Le problème avec cette commande c'est qu'il crée un état avant de le
transférer en fichier TXT et donc, si j'ai des noms qui sont long il fait un
saut de ligne et pour une raison que j'ignore dans mon fichier texte la
seconde ligne ne s'affiche pas. J'ai donc certain élèves qui ne sont pas
créé parce qu'ils ont un nom trop long pour la mise en page de l'état et
leur ligne de commande est donc tronqué (et dans certaines écoles j'en ai
vraiment beaucoup).

J'ai donc penser à utiliser la méthode de transfertext qui permet d'exporter
une requête dans un fichier avec cette commande :

DoCmd.TransferText acExportDelim, "", stDocName4, stDocOutputName4,
True, ""

Le problème avec cette commande c'est qu'il transfère mes données en texte
et chacune de mes lignes est encadré par des " " et mon utilitaire de
création des élèves ne fonctionne pas dans ce cas là.

J'ai donc pensé à une autre solution qui est d'écrire moi même chacune des
lignes de commandes en parcourant ma requête enregistrement par
enregistrement, ce qui donne le code suivant (dans mon code de access je
n'ai pas de saut de ligne mais pour faciliter la lecture j'en ai fait ici.
Je n'ai pas d'erreur de "syntaxe" dans mon code, tout s'exécute très bien
alors ce n'est pas ce qu'il faut regarder pour solutionner mon problème) :

'création de ma requête
cmdSelect = "SELECT dbo_E_Freq.EcoCen, dbo_E_Freq.DateFin,
dbo_E_Freq.Annee, dbo_E_Ele.Fiche, dbo_E_Z_Usager.PnomModifie,
dbo_E_Z_Usager.NomModifie,
dbo_E_Z_Usager.MotPasse, Extraction.LettreSharing,
Extraction.Script, dbo_E_Freq.Dist FROM Extraction,
(dbo_E_Freq INNER JOIN dbo_E_Ele ON dbo_E_Freq.Fiche
= dbo_E_Ele.Fiche) INNER JOIN dbo_E_Z_Usager ON dbo_E_Freq.Fiche =
dbo_E_Z_Usager.Fiche WHERE
(((dbo_E_Freq.EcoCen)=" & "'" & chEcole & "'" & ")
AND ((dbo_E_Freq.DateFin)=" & " '" & chDateFin & "'" & ")AND
((dbo_E_Freq.Annee)=" & chAnnee & "));"


cmdReq.ActiveConnection = CurrentProject.Connection
cmdReq.CommandText = cmdSelect
cmdReq.CommandType = adCmdText
cmdReq.Execute

'assigne l'ensemble à un enregistrement

rc.CursorType = adOpenStatic
rc.LockType = adLockReadOnly
rc.Open cmdReq

Dim stDocName4 As String
Dim stRepertoireFichier As String

'répertoire et nom du fichier
stRepertoireFichier = [Forms]![extraction]![RepertoireStorage] & "\" &
[Forms]![extraction]![Ecole] & "\"
stDocOutputName4 = stRepertoireFichier & [Forms]![extraction]![Ecole] &
"-USR.TXT"
stDocName4 = "NTELEUSR"


Const ForReading = 1, ForWriting = 2, ForAppending = 8
Const TristateUseDefault = -2, TristateTrue = -1, TristateFalse = 0
Dim fs, f, ts, s
Set fs = CreateObject("Scripting.FileSystemObject")
fs.CreateTextFile stDocOutputName4 'Creation du fichier
Set f = fs.GetFile(stDocOutputName4)
Set ts = f.OpenAsTextStream(ForWriting, TristateUseDefault) 'ouverture du
fichier

'création du fichier ligne par ligne
ts.Write "[USER]" & chr(10)
rc.MoveFirst
While Not rc.EOF
chLettrePartage = rc!LettreSharing
'création de ma ligne de commande suivi d'un retour de chariot
ts.Write Right(("00000" & rc!fiche), 7) & "~" & (RTrim(rc!PnomModifie))
& " " & (RTrim(rc!NOMModifie)) & "~" & Trim((rc!motpasse)) & "~~" &
chLettrePartage & ":~" & chDestination
& "\" & Right("00000" & rc!fiche, 7) & "$" & "~~" &
(rc!script) & Chr(13)
ts.Close
rc.MoveNext
Wend

Tout ca s'exécute à merveille. Ma requête fonctionne et mon texte s'écrit
dans mon document texte sans tronquer les informations. Mon problème c'est
qu'il ne comprend ni le chr(10), ni le chr(13). Comme vous pouvez le
remarquer j'ai utiliser les deux afin de les tester. Donc mon fichier
s'écrit et lorsque je l'ouvre (avec notepad) à la place du saut de ligne il
affiche un symbole (un petit carré) au lieu de faire mon saut de ligne.
Donc mon fichier ne peut être utiliser avec mon utilitaire. Je n'ai plus
d'idée de comment régler mon problème. Et la création des élèves doit être
fait depuis une semaine... (ceux qui n'étais pas tronquer ont été créé mais
les noms long ne peuvent l'être tant que je n'ai pas trouvé une solution).

J'apprécierais vraiment beaucoup avoir des réponses. Je sais que mon
problème n'est pas simple et que mon message est très long mais vous êtes
mon dernier espoir. Au fond c'est simple, je dois trouver comment faire un
saut de ligne ou alors vous connaissez une commande qui transfert une
requête sans les " " ou vous connaissez une méthode (dans access) qui permet
de supprimer les " " (au début et à la fin de chaque ligne) dans un fichier
texte déjà créé.

Merci à l'avance de l'attention que vous apporterez à mon message et de
l'aide que vous pourrez me donner. Si je ne suis pas clair n'hésiter
surtout pas à me poser des questions, j'ai vraiment besoin de votre aide.

Bonne journée à tous
Sophie

2 réponses

Avatar
Raymond [mvp]
Bonjour.

Si tu veux créer des vrais sauts de lignes, indiques toujours Chr(13) &
Chr(10) et dans cet ordre sinon ça ne fonctionne pas.
en vba tu indiques vbCRLf

--
@+
Raymond Access MVP
http://access.seneque.free.fr/
http://access.vba.free.fr/
http://access2003.free.fr/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"Sophie" a écrit dans le message de
news:%
Bonjour à tous,

Je vais vous mettre en contexte avant de vous expliquer mon problème,
j'aprécierais et j'espère que vous prendrez le temps de tout lire et
d'essayer de m'aider malgré la longueur de mon message.
Je travaille dans le milieu scolaire et je crée des fichiers pour aider à
la

création des élèves (répertoire personnel, mot de passe, accès réseau) sur
les serveurs de l'école. Mon problème est avec le fichier texte. Je dois
écrire dans un fichier une ligne de commande pour chaque élève. J'ai donc
une requête qui me permet d'aller chercher les informations dans une base
de

donnée d'élève.

J'ai donc utiliser cette commande :

DoCmd.OutputTo acReport, stDocName4, acFormatTXT, stdocoutputname4

Le problème avec cette commande c'est qu'il crée un état avant de le
transférer en fichier TXT et donc, si j'ai des noms qui sont long il fait
un

saut de ligne et pour une raison que j'ignore dans mon fichier texte la
seconde ligne ne s'affiche pas. J'ai donc certain élèves qui ne sont pas
créé parce qu'ils ont un nom trop long pour la mise en page de l'état et
leur ligne de commande est donc tronqué (et dans certaines écoles j'en ai
vraiment beaucoup).

J'ai donc penser à utiliser la méthode de transfertext qui permet
d'exporter

une requête dans un fichier avec cette commande :

DoCmd.TransferText acExportDelim, "", stDocName4,
stDocOutputName4,

True, ""

Le problème avec cette commande c'est qu'il transfère mes données en texte
et chacune de mes lignes est encadré par des " " et mon utilitaire de
création des élèves ne fonctionne pas dans ce cas là.

J'ai donc pensé à une autre solution qui est d'écrire moi même chacune des
lignes de commandes en parcourant ma requête enregistrement par
enregistrement, ce qui donne le code suivant (dans mon code de access je
n'ai pas de saut de ligne mais pour faciliter la lecture j'en ai fait ici.
Je n'ai pas d'erreur de "syntaxe" dans mon code, tout s'exécute très bien
alors ce n'est pas ce qu'il faut regarder pour solutionner mon problème) :

'création de ma requête
cmdSelect = "SELECT dbo_E_Freq.EcoCen, dbo_E_Freq.DateFin,
dbo_E_Freq.Annee, dbo_E_Ele.Fiche, dbo_E_Z_Usager.PnomModifie,
dbo_E_Z_Usager.NomModifie,
dbo_E_Z_Usager.MotPasse, Extraction.LettreSharing,
Extraction.Script, dbo_E_Freq.Dist FROM Extraction,
(dbo_E_Freq INNER JOIN dbo_E_Ele ON
dbo_E_Freq.Fiche

= dbo_E_Ele.Fiche) INNER JOIN dbo_E_Z_Usager ON dbo_E_Freq.Fiche > dbo_E_Z_Usager.Fiche WHERE
(((dbo_E_Freq.EcoCen)=" & "'" & chEcole & "'" &
")

AND ((dbo_E_Freq.DateFin)=" & " '" & chDateFin & "'" & ")AND
((dbo_E_Freq.Annee)=" & chAnnee & "));"


cmdReq.ActiveConnection = CurrentProject.Connection
cmdReq.CommandText = cmdSelect
cmdReq.CommandType = adCmdText
cmdReq.Execute

'assigne l'ensemble à un enregistrement

rc.CursorType = adOpenStatic
rc.LockType = adLockReadOnly
rc.Open cmdReq

Dim stDocName4 As String
Dim stRepertoireFichier As String

'répertoire et nom du fichier
stRepertoireFichier = [Forms]![extraction]![RepertoireStorage] & "" &
[Forms]![extraction]![Ecole] & ""
stDocOutputName4 = stRepertoireFichier & [Forms]![extraction]![Ecole] &
"-USR.TXT"
stDocName4 = "NTELEUSR"


Const ForReading = 1, ForWriting = 2, ForAppending = 8
Const TristateUseDefault = -2, TristateTrue = -1, TristateFalse = 0
Dim fs, f, ts, s
Set fs = CreateObject("Scripting.FileSystemObject")
fs.CreateTextFile stDocOutputName4 'Creation du fichier
Set f = fs.GetFile(stDocOutputName4)
Set ts = f.OpenAsTextStream(ForWriting, TristateUseDefault) 'ouverture
du

fichier

'création du fichier ligne par ligne
ts.Write "[USER]" & chr(10)
rc.MoveFirst
While Not rc.EOF
chLettrePartage = rc!LettreSharing
'création de ma ligne de commande suivi d'un retour de chariot
ts.Write Right(("00000" & rc!fiche), 7) & "~" &
(RTrim(rc!PnomModifie))

& " " & (RTrim(rc!NOMModifie)) & "~" & Trim((rc!motpasse)) & "~~" &
chLettrePartage & ":~" & chDestination
& "" & Right("00000" & rc!fiche, 7) & "$" & "~~" &
(rc!script) & Chr(13)
ts.Close
rc.MoveNext
Wend

Tout ca s'exécute à merveille. Ma requête fonctionne et mon texte s'écrit
dans mon document texte sans tronquer les informations. Mon problème
c'est

qu'il ne comprend ni le chr(10), ni le chr(13). Comme vous pouvez le
remarquer j'ai utiliser les deux afin de les tester. Donc mon fichier
s'écrit et lorsque je l'ouvre (avec notepad) à la place du saut de ligne
il

affiche un symbole (un petit carré) au lieu de faire mon saut de ligne.
Donc mon fichier ne peut être utiliser avec mon utilitaire. Je n'ai plus
d'idée de comment régler mon problème. Et la création des élèves doit
être

fait depuis une semaine... (ceux qui n'étais pas tronquer ont été créé
mais

les noms long ne peuvent l'être tant que je n'ai pas trouvé une solution).

J'apprécierais vraiment beaucoup avoir des réponses. Je sais que mon
problème n'est pas simple et que mon message est très long mais vous êtes
mon dernier espoir. Au fond c'est simple, je dois trouver comment faire
un

saut de ligne ou alors vous connaissez une commande qui transfert une
requête sans les " " ou vous connaissez une méthode (dans access) qui
permet

de supprimer les " " (au début et à la fin de chaque ligne) dans un
fichier

texte déjà créé.

Merci à l'avance de l'attention que vous apporterez à mon message et de
l'aide que vous pourrez me donner. Si je ne suis pas clair n'hésiter
surtout pas à me poser des questions, j'ai vraiment besoin de votre aide.

Bonne journée à tous
Sophie




Avatar
Sophie
MERCI MERCI MERCI MERCI MERCI MERCI MERCI MERCI MERCI MERCI MERCI MERCI

ca fonctionne à merveille je t'en suis vraiment énormément reconnaissante!
:)

"Raymond [mvp]" a écrit dans le message de
news:e$
Bonjour.

Si tu veux créer des vrais sauts de lignes, indiques toujours Chr(13) &
Chr(10) et dans cet ordre sinon ça ne fonctionne pas.
en vba tu indiques vbCRLf

--
@+
Raymond Access MVP
http://access.seneque.free.fr/
http://access.vba.free.fr/
http://access2003.free.fr/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"Sophie" a écrit dans le message de
news:%
Bonjour à tous,

Je vais vous mettre en contexte avant de vous expliquer mon problème,
j'aprécierais et j'espère que vous prendrez le temps de tout lire et
d'essayer de m'aider malgré la longueur de mon message.
Je travaille dans le milieu scolaire et je crée des fichiers pour aider
à


la
création des élèves (répertoire personnel, mot de passe, accès réseau)
sur


les serveurs de l'école. Mon problème est avec le fichier texte. Je
dois


écrire dans un fichier une ligne de commande pour chaque élève. J'ai
donc


une requête qui me permet d'aller chercher les informations dans une
base


de
donnée d'élève.

J'ai donc utiliser cette commande :

DoCmd.OutputTo acReport, stDocName4, acFormatTXT, stdocoutputname4

Le problème avec cette commande c'est qu'il crée un état avant de le
transférer en fichier TXT et donc, si j'ai des noms qui sont long il
fait


un
saut de ligne et pour une raison que j'ignore dans mon fichier texte la
seconde ligne ne s'affiche pas. J'ai donc certain élèves qui ne sont
pas


créé parce qu'ils ont un nom trop long pour la mise en page de l'état et
leur ligne de commande est donc tronqué (et dans certaines écoles j'en
ai


vraiment beaucoup).

J'ai donc penser à utiliser la méthode de transfertext qui permet
d'exporter

une requête dans un fichier avec cette commande :

DoCmd.TransferText acExportDelim, "", stDocName4,
stDocOutputName4,

True, ""

Le problème avec cette commande c'est qu'il transfère mes données en
texte


et chacune de mes lignes est encadré par des " " et mon utilitaire de
création des élèves ne fonctionne pas dans ce cas là.

J'ai donc pensé à une autre solution qui est d'écrire moi même chacune
des


lignes de commandes en parcourant ma requête enregistrement par
enregistrement, ce qui donne le code suivant (dans mon code de access je
n'ai pas de saut de ligne mais pour faciliter la lecture j'en ai fait
ici.


Je n'ai pas d'erreur de "syntaxe" dans mon code, tout s'exécute très
bien


alors ce n'est pas ce qu'il faut regarder pour solutionner mon problème)
:



'création de ma requête
cmdSelect = "SELECT dbo_E_Freq.EcoCen, dbo_E_Freq.DateFin,
dbo_E_Freq.Annee, dbo_E_Ele.Fiche, dbo_E_Z_Usager.PnomModifie,
dbo_E_Z_Usager.NomModifie,
dbo_E_Z_Usager.MotPasse,
Extraction.LettreSharing,


Extraction.Script, dbo_E_Freq.Dist FROM Extraction,
(dbo_E_Freq INNER JOIN dbo_E_Ele ON
dbo_E_Freq.Fiche

= dbo_E_Ele.Fiche) INNER JOIN dbo_E_Z_Usager ON dbo_E_Freq.Fiche > > dbo_E_Z_Usager.Fiche WHERE
(((dbo_E_Freq.EcoCen)=" & "'" & chEcole & "'" &
")

AND ((dbo_E_Freq.DateFin)=" & " '" & chDateFin & "'" & ")AND
((dbo_E_Freq.Annee)=" & chAnnee & "));"


cmdReq.ActiveConnection = CurrentProject.Connection
cmdReq.CommandText = cmdSelect
cmdReq.CommandType = adCmdText
cmdReq.Execute

'assigne l'ensemble à un enregistrement

rc.CursorType = adOpenStatic
rc.LockType = adLockReadOnly
rc.Open cmdReq

Dim stDocName4 As String
Dim stRepertoireFichier As String

'répertoire et nom du fichier
stRepertoireFichier = [Forms]![extraction]![RepertoireStorage] & "" &
[Forms]![extraction]![Ecole] & ""
stDocOutputName4 = stRepertoireFichier & [Forms]![extraction]![Ecole]
&


"-USR.TXT"
stDocName4 = "NTELEUSR"


Const ForReading = 1, ForWriting = 2, ForAppending = 8
Const TristateUseDefault = -2, TristateTrue = -1, TristateFalse = 0
Dim fs, f, ts, s
Set fs = CreateObject("Scripting.FileSystemObject")
fs.CreateTextFile stDocOutputName4 'Creation du fichier
Set f = fs.GetFile(stDocOutputName4)
Set ts = f.OpenAsTextStream(ForWriting, TristateUseDefault)
'ouverture


du
fichier

'création du fichier ligne par ligne
ts.Write "[USER]" & chr(10)
rc.MoveFirst
While Not rc.EOF
chLettrePartage = rc!LettreSharing
'création de ma ligne de commande suivi d'un retour de chariot
ts.Write Right(("00000" & rc!fiche), 7) & "~" &
(RTrim(rc!PnomModifie))

& " " & (RTrim(rc!NOMModifie)) & "~" & Trim((rc!motpasse)) & "~~" &
chLettrePartage & ":~" & chDestination
& "" & Right("00000" & rc!fiche, 7) & "$" & "~~" &
(rc!script) & Chr(13)
ts.Close
rc.MoveNext
Wend

Tout ca s'exécute à merveille. Ma requête fonctionne et mon texte
s'écrit


dans mon document texte sans tronquer les informations. Mon problème
c'est

qu'il ne comprend ni le chr(10), ni le chr(13). Comme vous pouvez le
remarquer j'ai utiliser les deux afin de les tester. Donc mon fichier
s'écrit et lorsque je l'ouvre (avec notepad) à la place du saut de ligne
il

affiche un symbole (un petit carré) au lieu de faire mon saut de ligne.
Donc mon fichier ne peut être utiliser avec mon utilitaire. Je n'ai
plus


d'idée de comment régler mon problème. Et la création des élèves doit
être

fait depuis une semaine... (ceux qui n'étais pas tronquer ont été créé
mais

les noms long ne peuvent l'être tant que je n'ai pas trouvé une
solution).



J'apprécierais vraiment beaucoup avoir des réponses. Je sais que mon
problème n'est pas simple et que mon message est très long mais vous
êtes


mon dernier espoir. Au fond c'est simple, je dois trouver comment faire
un

saut de ligne ou alors vous connaissez une commande qui transfert une
requête sans les " " ou vous connaissez une méthode (dans access) qui
permet

de supprimer les " " (au début et à la fin de chaque ligne) dans un
fichier

texte déjà créé.

Merci à l'avance de l'attention que vous apporterez à mon message et de
l'aide que vous pourrez me donner. Si je ne suis pas clair n'hésiter
surtout pas à me poser des questions, j'ai vraiment besoin de votre
aide.



Bonne journée à tous
Sophie