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

acces fichier texte en mode aléatoire

9 réponses
Avatar
cedric.leonard
Excusez-moi, le message posté précedemment comportait une erreur de
reproduction (j'ai fait le ménage dans ma macro pour plus de
lisibilité pour le mpfe).

>A l'aide !!!
>Je n'arrive pas a écrire dans un fichier que j'ouvre en mode
aléatoire
>Svp, y a t-il une bonne âme qui voit ce qui cloche dans ma macro ?
>
>Type LineFile
> Instant As Single
> Variable As Single
>End Type
>
>Sub EcrireFichier()
> NumFile = FreeFile()
>
>
> Dim ToWrite As LineFile
>
> ToWrite.Instant = 2000010101
> ToWrite.Variable = 12.7
> Filename = "U.\toto.txt"
> Open Filename For Random As #NumFile Len = Len(ToWrite)
> Put #NumFile, 1, ToWrite
>
>End Sub
>
>Ca écrit dans le fichier des choses obscène (wkîN33KA par exemple)
qui
>n'on rien à voir avec ce que je veux!
>En fait ca ne marche que si je ne définis que des chaines de
>caractères dans le Type LineFile
>
>Merci beaucoup d'avance, Cédric

9 réponses

Avatar
cedric.leonard
Merci Pierre, en fait, j'arrive bien à relire ce que j'ai écrit avec
le VBA (en utilisant Get). Le pb est que je voudrais communiquer avec
un autre logiciel qui lui lit des fichiers textes. Et le format des
fichiers écrit en mode aléatoire ne ressemble pas trop à du texte. Le
pb ne vient pas du type que j'ai moi-même défini (LineFile) car le pb
se produit aussi avec des type Integer ou Single.
Seule les chiaines de caractères sont lisibles avec une éditeur
quelconque ....
Cédric




"Pierre Jagut" wrote in message news:<bj2g89$mt1>$...
Bonjour,

Je ne suis pas sûr de moi car je ne connais pas ce mode d'écriture.
Cependant, il me semble avoir repéré quelque chose : ta variable "ToWrite"
est d'un type que tu as défini. Il est constitué de deux variables de 4
octets (un single tient bien sur 4 octets ?). Dans le fichier résultat, tu
as 8 caractères. Cela correspond donc probablement au contenu de ta variable
"ToWrite", mais le bloc note (ou autre outil de visulaisation du fichier)
traduit les octets écrits en caractères. Si, au lieu d'écrire "ToWrite", tu
écris "Towrite.Instant" puis "ToWrite.Variable" (éventuellement séparés par
une tabulation ou autre), tu auras peut-être un résultat plus lisible avec
le bloc note, ou bien il faudrait les écrire dans des champs texte.
Mais si cela se trouve, en relisant le fichier tel que tu l'as écrit (donc
avec un type "LineFile"), tu retrouveras les données.

Bon courage.
Pierre JAGUT

"cedric leonard" a écrit dans le message
de news:
Excusez-moi, le message posté précedemment comportait une erreur de
reproduction (j'ai fait le ménage dans ma macro pour plus de
lisibilité pour le mpfe).

A l'aide !!!
Je n'arrive pas a écrire dans un fichier que j'ouvre en mode
aléatoire


Svp, y a t-il une bonne âme qui voit ce qui cloche dans ma macro ?

Type LineFile
Instant As Single
Variable As Single
End Type

Sub EcrireFichier()
NumFile = FreeFile()


Dim ToWrite As LineFile

ToWrite.Instant = 2000010101
ToWrite.Variable = 12.7
Filename = "U.toto.txt"
Open Filename For Random As #NumFile Len = Len(ToWrite)
Put #NumFile, 1, ToWrite

End Sub

Ca écrit dans le fichier des choses obscène (wkîN33KA par exemple)
qui


n'on rien à voir avec ce que je veux!
En fait ca ne marche que si je ne définis que des chaines de
caractères dans le Type LineFile

Merci beaucoup d'avance, Cédric






Avatar
Pierre Jagut
Bonjour,

Il est probable alors que l'instruction "put" écrive des octets et non pas
la valeur décimale en caractères des chiffres. Un single est sur 4 octets
(mantisse + exposant), un integer sur 2 octets, etc. Un éditeur de texte lui
ne lit que des octets et traduit chaque octet en un caractère. Il y a donc
incompatibilité. Pour pouvoir retrouver des caractères dans ton fichier de
sortie, à mon avis, tu dois y écrire des caractères.

Essaye en définissant un type de caractères. Par exemple (je ne suis pas sûr
de Format, mais ça doit être quelque chose comme ça) :
NB : si tes données ont un longueur variable, je te conseille d'insérer un
séparateur entre les champs (en général une tabulation ou un point-virgule)
que tu peux définir au niveau du type LineFileCar

Type LineFile
Instant As Single
Variable As Single
End Type
Type LineFileCar
Instant As String
Separateur As String
Variable As String
End Type

Sub EcrireFichier()
NumFile = FreeFile()

Dim ToWrite As LineFile, ToWriteCar as LineFileCar
ToWriteCar.Separateur=";"

ToWrite.Instant = 2000010101
ToWrite.Variable = 12.7
ToWriteCar.Instant=Format(ToWrite.Instant,"0000000000")
ToWriteCar.Variable=Format(ToWrite.Variable,"00.0")
Filename = "U:toto.txt"
Open Filename For Random As #NumFile Len = Len(ToWriteCar)
Put #AllInfoFile.NumFile, 1, ToWriteCar

End Sub

.

Dis-moi ce que cela donne.
Pierre.

"cedric leonard" a écrit dans le message
de news:
Merci Pierre, en fait, j'arrive bien à relire ce que j'ai écrit avec
le VBA (en utilisant Get). Le pb est que je voudrais communiquer avec
un autre logiciel qui lui lit des fichiers textes. Et le format des
fichiers écrit en mode aléatoire ne ressemble pas trop à du texte. Le
pb ne vient pas du type que j'ai moi-même défini (LineFile) car le pb
se produit aussi avec des type Integer ou Single.
Seule les chiaines de caractères sont lisibles avec une éditeur
quelconque ....
Cédric




"Pierre Jagut" wrote in message
news:<bj2g89$mt1>$...


Bonjour,

Je ne suis pas sûr de moi car je ne connais pas ce mode d'écriture.
Cependant, il me semble avoir repéré quelque chose : ta variable
"ToWrite"


est d'un type que tu as défini. Il est constitué de deux variables de 4
octets (un single tient bien sur 4 octets ?). Dans le fichier résultat,
tu


as 8 caractères. Cela correspond donc probablement au contenu de ta
variable


"ToWrite", mais le bloc note (ou autre outil de visulaisation du
fichier)


traduit les octets écrits en caractères. Si, au lieu d'écrire "ToWrite",
tu


écris "Towrite.Instant" puis "ToWrite.Variable" (éventuellement séparés
par


une tabulation ou autre), tu auras peut-être un résultat plus lisible
avec


le bloc note, ou bien il faudrait les écrire dans des champs texte.
Mais si cela se trouve, en relisant le fichier tel que tu l'as écrit
(donc


avec un type "LineFile"), tu retrouveras les données.

Bon courage.
Pierre JAGUT

"cedric leonard" a écrit dans le
message


de news:
Excusez-moi, le message posté précedemment comportait une erreur de
reproduction (j'ai fait le ménage dans ma macro pour plus de
lisibilité pour le mpfe).

A l'aide !!!
Je n'arrive pas a écrire dans un fichier que j'ouvre en mode
aléatoire


Svp, y a t-il une bonne âme qui voit ce qui cloche dans ma macro ?

Type LineFile
Instant As Single
Variable As Single
End Type

Sub EcrireFichier()
NumFile = FreeFile()


Dim ToWrite As LineFile

ToWrite.Instant = 2000010101
ToWrite.Variable = 12.7
Filename = "U.toto.txt"
Open Filename For Random As #NumFile Len = Len(ToWrite)
Put #NumFile, 1, ToWrite

End Sub

Ca écrit dans le fichier des choses obscène (wkîN33KA par exemple)
qui


n'on rien à voir avec ce que je veux!
En fait ca ne marche que si je ne définis que des chaines de
caractères dans le Type LineFile

Merci beaucoup d'avance, Cédric








Avatar
cedric.leonard
Merci Pierre pour ton aide. En fait, malgré tout ca n'en fait pas un
fichier complètement texte. Il y a des caractères pour séparer les
chaines de caract`res qui ne sont pas des tabulations. Et de ce fait,
mon logiciel n'arrive pas è lire le fichier ainsi produit. Une
solution est donc de ne créer qu'une seule chaine de caractère par
enregistrement qui contient une concaténation de ce que je veux écrire
par ligne (séparé par chr(9) (=la tabulation)). Ceci dit, j'ai encore
le pb que les lignes ne sont pas séparés entre elles par un retour
chariot. Bref, je continue à chercher. Merci bcp pour vos
contributions.
Une autre solution au cas ou personne ne trouve de solution, serait de
traiter en acces séquentiel, mais dans ce cas, il faut que je réécrire
tout mon fichier alors qu'initialement je ne veux que modifier qq
lignes.
Cédric






"Pierre Jagut" wrote in message news:<bj44fs$cfl$...
Bonjour,

Il est probable alors que l'instruction "put" écrive des octets et non pas
la valeur décimale en caractères des chiffres. Un single est sur 4 octets
(mantisse + exposant), un integer sur 2 octets, etc. Un éditeur de texte lui
ne lit que des octets et traduit chaque octet en un caractère. Il y a donc
incompatibilité. Pour pouvoir retrouver des caractères dans ton fichier de
sortie, à mon avis, tu dois y écrire des caractères.

Essaye en définissant un type de caractères. Par exemple (je ne suis pas sûr
de Format, mais ça doit être quelque chose comme ça) :
NB : si tes données ont un longueur variable, je te conseille d'insérer un
séparateur entre les champs (en général une tabulation ou un point-virgule)
que tu peux définir au niveau du type LineFileCar

Type LineFile
Instant As Single
Variable As Single
End Type
Type LineFileCar
Instant As String
Separateur As String
Variable As String
End Type

Sub EcrireFichier()
NumFile = FreeFile()

Dim ToWrite As LineFile, ToWriteCar as LineFileCar
ToWriteCar.Separateur=";"

ToWrite.Instant = 2000010101
ToWrite.Variable = 12.7
ToWriteCar.Instant=Format(ToWrite.Instant,"0000000000")
ToWriteCar.Variable=Format(ToWrite.Variable,"00.0")
Filename = "U:toto.txt"
Open Filename For Random As #NumFile Len = Len(ToWriteCar)
Put #AllInfoFile.NumFile, 1, ToWriteCar

End Sub

.

Dis-moi ce que cela donne.
Pierre.

"cedric leonard" a écrit dans le message
de news:
Merci Pierre, en fait, j'arrive bien à relire ce que j'ai écrit avec
le VBA (en utilisant Get). Le pb est que je voudrais communiquer avec
un autre logiciel qui lui lit des fichiers textes. Et le format des
fichiers écrit en mode aléatoire ne ressemble pas trop à du texte. Le
pb ne vient pas du type que j'ai moi-même défini (LineFile) car le pb
se produit aussi avec des type Integer ou Single.
Seule les chiaines de caractères sont lisibles avec une éditeur
quelconque ....
Cédric




"Pierre Jagut" wrote in message
news:<bj2g89$mt1>$...


Bonjour,

Je ne suis pas sûr de moi car je ne connais pas ce mode d'écriture.
Cependant, il me semble avoir repéré quelque chose : ta variable
"ToWrite"


est d'un type que tu as défini. Il est constitué de deux variables de 4
octets (un single tient bien sur 4 octets ?). Dans le fichier résultat,
tu


as 8 caractères. Cela correspond donc probablement au contenu de ta
variable


"ToWrite", mais le bloc note (ou autre outil de visulaisation du
fichier)


traduit les octets écrits en caractères. Si, au lieu d'écrire "ToWrite",
tu


écris "Towrite.Instant" puis "ToWrite.Variable" (éventuellement séparés
par


une tabulation ou autre), tu auras peut-être un résultat plus lisible
avec


le bloc note, ou bien il faudrait les écrire dans des champs texte.
Mais si cela se trouve, en relisant le fichier tel que tu l'as écrit
(donc


avec un type "LineFile"), tu retrouveras les données.

Bon courage.
Pierre JAGUT

"cedric leonard" a écrit dans le
message


de news:
Excusez-moi, le message posté précedemment comportait une erreur de
reproduction (j'ai fait le ménage dans ma macro pour plus de
lisibilité pour le mpfe).

A l'aide !!!
Je n'arrive pas a écrire dans un fichier que j'ouvre en mode
aléatoire




Svp, y a t-il une bonne âme qui voit ce qui cloche dans ma macro ?

Type LineFile
Instant As Single
Variable As Single
End Type

Sub EcrireFichier()
NumFile = FreeFile()


Dim ToWrite As LineFile

ToWrite.Instant = 2000010101
ToWrite.Variable = 12.7
Filename = "U.toto.txt"
Open Filename For Random As #NumFile Len = Len(ToWrite)
Put #NumFile, 1, ToWrite

End Sub

Ca écrit dans le fichier des choses obscène (wkîN33KA par exemple)
qui




n'on rien à voir avec ce que je veux!
En fait ca ne marche que si je ne définis que des chaines de
caractères dans le Type LineFile

Merci beaucoup d'avance, Cédric










Avatar
Pierre Jagut
Bonjour,

De mémoire, il y a effectivement un premier octet au début des chaines de
type String qui contient la longueur de la chaîne. Ce qui expliquerait
probablement ce caractère intempestif.
Compte tenu des difficultés que tu rencontres, mon conseil serait de traiter
le fichier sous Access, en le lisant de la même manière et en générant une
table. Tu pourras alors effectuer différents traitements de contrôles, et
exporter ton fichier à un format standard. Je cite Access car il permet
d'avoir un grand nombre d'enregistrements et les requêtes sont souvent plus
simples que des traitements Excel pour programmer les contrôles un peu
complexes, mais Excel peut convenir pour les cas simples.

Pierre.

"cedric leonard" a écrit dans le message
de news:
Merci Pierre pour ton aide. En fait, malgré tout ca n'en fait pas un
fichier complètement texte. Il y a des caractères pour séparer les
chaines de caract`res qui ne sont pas des tabulations. Et de ce fait,
mon logiciel n'arrive pas è lire le fichier ainsi produit. Une
solution est donc de ne créer qu'une seule chaine de caractère par
enregistrement qui contient une concaténation de ce que je veux écrire
par ligne (séparé par chr(9) (=la tabulation)). Ceci dit, j'ai encore
le pb que les lignes ne sont pas séparés entre elles par un retour
chariot. Bref, je continue à chercher. Merci bcp pour vos
contributions.
Une autre solution au cas ou personne ne trouve de solution, serait de
traiter en acces séquentiel, mais dans ce cas, il faut que je réécrire
tout mon fichier alors qu'initialement je ne veux que modifier qq
lignes.
Cédric






"Pierre Jagut" wrote in message
news:<bj44fs$cfl$...

Bonjour,

Il est probable alors que l'instruction "put" écrive des octets et non
pas


la valeur décimale en caractères des chiffres. Un single est sur 4
octets


(mantisse + exposant), un integer sur 2 octets, etc. Un éditeur de texte
lui


ne lit que des octets et traduit chaque octet en un caractère. Il y a
donc


incompatibilité. Pour pouvoir retrouver des caractères dans ton fichier
de


sortie, à mon avis, tu dois y écrire des caractères.

Essaye en définissant un type de caractères. Par exemple (je ne suis pas
sûr


de Format, mais ça doit être quelque chose comme ça) :
NB : si tes données ont un longueur variable, je te conseille d'insérer
un


séparateur entre les champs (en général une tabulation ou un
point-virgule)


que tu peux définir au niveau du type LineFileCar

Type LineFile
Instant As Single
Variable As Single
End Type
Type LineFileCar
Instant As String
Separateur As String
Variable As String
End Type

Sub EcrireFichier()
NumFile = FreeFile()

Dim ToWrite As LineFile, ToWriteCar as LineFileCar
ToWriteCar.Separateur=";"

ToWrite.Instant = 2000010101
ToWrite.Variable = 12.7
ToWriteCar.Instant=Format(ToWrite.Instant,"0000000000")
ToWriteCar.Variable=Format(ToWrite.Variable,"00.0")
Filename = "U:toto.txt"
Open Filename For Random As #NumFile Len = Len(ToWriteCar)
Put #AllInfoFile.NumFile, 1, ToWriteCar

End Sub

.

Dis-moi ce que cela donne.
Pierre.

"cedric leonard" a écrit dans le
message


de news:
Merci Pierre, en fait, j'arrive bien à relire ce que j'ai écrit avec
le VBA (en utilisant Get). Le pb est que je voudrais communiquer avec
un autre logiciel qui lui lit des fichiers textes. Et le format des
fichiers écrit en mode aléatoire ne ressemble pas trop à du texte. Le
pb ne vient pas du type que j'ai moi-même défini (LineFile) car le pb
se produit aussi avec des type Integer ou Single.
Seule les chiaines de caractères sont lisibles avec une éditeur
quelconque ....
Cédric




"Pierre Jagut" wrote in message
news:<bj2g89$mt1>$...


Bonjour,

Je ne suis pas sûr de moi car je ne connais pas ce mode d'écriture.
Cependant, il me semble avoir repéré quelque chose : ta variable
"ToWrite"


est d'un type que tu as défini. Il est constitué de deux variables
de 4




octets (un single tient bien sur 4 octets ?). Dans le fichier
résultat,




tu
as 8 caractères. Cela correspond donc probablement au contenu de ta
variable


"ToWrite", mais le bloc note (ou autre outil de visulaisation du
fichier)


traduit les octets écrits en caractères. Si, au lieu d'écrire
"ToWrite",




tu
écris "Towrite.Instant" puis "ToWrite.Variable" (éventuellement
séparés




par
une tabulation ou autre), tu auras peut-être un résultat plus
lisible




avec
le bloc note, ou bien il faudrait les écrire dans des champs texte.
Mais si cela se trouve, en relisant le fichier tel que tu l'as écrit
(donc


avec un type "LineFile"), tu retrouveras les données.

Bon courage.
Pierre JAGUT

"cedric leonard" a écrit dans le
message


de news:
Excusez-moi, le message posté précedemment comportait une erreur
de





reproduction (j'ai fait le ménage dans ma macro pour plus de
lisibilité pour le mpfe).

A l'aide !!!
Je n'arrive pas a écrire dans un fichier que j'ouvre en mode
aléatoire




Svp, y a t-il une bonne âme qui voit ce qui cloche dans ma macro
?







Type LineFile
Instant As Single
Variable As Single
End Type

Sub EcrireFichier()
NumFile = FreeFile()


Dim ToWrite As LineFile

ToWrite.Instant = 2000010101
ToWrite.Variable = 12.7
Filename = "U.toto.txt"
Open Filename For Random As #NumFile Len = Len(ToWrite)
Put #NumFile, 1, ToWrite

End Sub

Ca écrit dans le fichier des choses obscène (wkîN33KA par
exemple)






qui
n'on rien à voir avec ce que je veux!
En fait ca ne marche que si je ne définis que des chaines de
caractères dans le Type LineFile

Merci beaucoup d'avance, Cédric












Avatar
cedric.leonard
Meric pour ton consiel, mais le pb c'est que ma macro est sous VBA
Excel et je ne sais pas si je peux faire des choses avec acces a
partir de la maco. Sinon, est-il possible de la convertir en macro
acces (si ca existe des macro acces) ?

"Pierre Jagut" wrote in message news:<bj6pi5$tjj$...
Bonjour,

De mémoire, il y a effectivement un premier octet au début des chaines de
type String qui contient la longueur de la chaîne. Ce qui expliquerait
probablement ce caractère intempestif.
Compte tenu des difficultés que tu rencontres, mon conseil serait de traiter
le fichier sous Access, en le lisant de la même manière et en générant une
table. Tu pourras alors effectuer différents traitements de contrôles, et
exporter ton fichier à un format standard. Je cite Access car il permet
d'avoir un grand nombre d'enregistrements et les requêtes sont souvent plus
simples que des traitements Excel pour programmer les contrôles un peu
complexes, mais Excel peut convenir pour les cas simples.

Pierre.

"cedric leonard" a écrit dans le message
de news:
Merci Pierre pour ton aide. En fait, malgré tout ca n'en fait pas un
fichier complètement texte. Il y a des caractères pour séparer les
chaines de caract`res qui ne sont pas des tabulations. Et de ce fait,
mon logiciel n'arrive pas è lire le fichier ainsi produit. Une
solution est donc de ne créer qu'une seule chaine de caractère par
enregistrement qui contient une concaténation de ce que je veux écrire
par ligne (séparé par chr(9) (=la tabulation)). Ceci dit, j'ai encore
le pb que les lignes ne sont pas séparés entre elles par un retour
chariot. Bref, je continue à chercher. Merci bcp pour vos
contributions.
Une autre solution au cas ou personne ne trouve de solution, serait de
traiter en acces séquentiel, mais dans ce cas, il faut que je réécrire
tout mon fichier alors qu'initialement je ne veux que modifier qq
lignes.
Cédric






"Pierre Jagut" wrote in message
news:<bj44fs$cfl$...

Bonjour,

Il est probable alors que l'instruction "put" écrive des octets et non
pas


la valeur décimale en caractères des chiffres. Un single est sur 4
octets


(mantisse + exposant), un integer sur 2 octets, etc. Un éditeur de texte
lui


ne lit que des octets et traduit chaque octet en un caractère. Il y a
donc


incompatibilité. Pour pouvoir retrouver des caractères dans ton fichier
de


sortie, à mon avis, tu dois y écrire des caractères.

Essaye en définissant un type de caractères. Par exemple (je ne suis pas
sûr


de Format, mais ça doit être quelque chose comme ça) :
NB : si tes données ont un longueur variable, je te conseille d'insérer
un


séparateur entre les champs (en général une tabulation ou un
point-virgule)


que tu peux définir au niveau du type LineFileCar

Type LineFile
Instant As Single
Variable As Single
End Type
Type LineFileCar
Instant As String
Separateur As String
Variable As String
End Type

Sub EcrireFichier()
NumFile = FreeFile()

Dim ToWrite As LineFile, ToWriteCar as LineFileCar
ToWriteCar.Separateur=";"

ToWrite.Instant = 2000010101
ToWrite.Variable = 12.7
ToWriteCar.Instant=Format(ToWrite.Instant,"0000000000")
ToWriteCar.Variable=Format(ToWrite.Variable,"00.0")
Filename = "U:toto.txt"
Open Filename For Random As #NumFile Len = Len(ToWriteCar)
Put #AllInfoFile.NumFile, 1, ToWriteCar

End Sub

.

Dis-moi ce que cela donne.
Pierre.

"cedric leonard" a écrit dans le
message


de news:
Merci Pierre, en fait, j'arrive bien à relire ce que j'ai écrit avec
le VBA (en utilisant Get). Le pb est que je voudrais communiquer avec
un autre logiciel qui lui lit des fichiers textes. Et le format des
fichiers écrit en mode aléatoire ne ressemble pas trop à du texte. Le
pb ne vient pas du type que j'ai moi-même défini (LineFile) car le pb
se produit aussi avec des type Integer ou Single.
Seule les chiaines de caractères sont lisibles avec une éditeur
quelconque ....
Cédric




"Pierre Jagut" wrote in message
news:<bj2g89$mt1>$...




Bonjour,

Je ne suis pas sûr de moi car je ne connais pas ce mode d'écriture.
Cependant, il me semble avoir repéré quelque chose : ta variable
"ToWrite"




est d'un type que tu as défini. Il est constitué de deux variables
de 4




octets (un single tient bien sur 4 octets ?). Dans le fichier
résultat,




tu
as 8 caractères. Cela correspond donc probablement au contenu de ta
variable




"ToWrite", mais le bloc note (ou autre outil de visulaisation du
fichier)




traduit les octets écrits en caractères. Si, au lieu d'écrire
"ToWrite",




tu
écris "Towrite.Instant" puis "ToWrite.Variable" (éventuellement
séparés




par
une tabulation ou autre), tu auras peut-être un résultat plus
lisible




avec
le bloc note, ou bien il faudrait les écrire dans des champs texte.
Mais si cela se trouve, en relisant le fichier tel que tu l'as écrit
(donc




avec un type "LineFile"), tu retrouveras les données.

Bon courage.
Pierre JAGUT

"cedric leonard" a écrit dans le
message




de news:
Excusez-moi, le message posté précedemment comportait une erreur
de





reproduction (j'ai fait le ménage dans ma macro pour plus de
lisibilité pour le mpfe).

A l'aide !!!
Je n'arrive pas a écrire dans un fichier que j'ouvre en mode
aléatoire






Svp, y a t-il une bonne âme qui voit ce qui cloche dans ma macro
?







Type LineFile
Instant As Single
Variable As Single
End Type

Sub EcrireFichier()
NumFile = FreeFile()


Dim ToWrite As LineFile

ToWrite.Instant = 2000010101
ToWrite.Variable = 12.7
Filename = "U.toto.txt"
Open Filename For Random As #NumFile Len = Len(ToWrite)
Put #NumFile, 1, ToWrite

End Sub

Ca écrit dans le fichier des choses obscène (wkîN33KA par
exemple)






qui
n'on rien à voir avec ce que je veux!
En fait ca ne marche que si je ne définis que des chaines de
caractères dans le Type LineFile

Merci beaucoup d'avance, Cédric














Avatar
cedric.leonard
J'ai un exemple de VBA Excel qui lances des requetes SQL sur une base
Acces. Donc ca je devrais savoir faire. L'export sous forme de fichier
texte, je sais le faire "à la main", mais j'ai besoin que ce soit
automatisé. Est-il possible de lancer cà à partir de ma macro sous
Excel ?
Merci d'avance,
Cédric



"Pierre Jagut" wrote in message news:<bkmnsa$qrp$...
Bonjour,

Access dispose également de macros. Il y a deux types de macros : un langage
spécifique à Access (assez simple à utiliser), et des modules qui sont en
fait du code VBA. Mais je pense que tu retrouveras les problèmes d'Excel
liés aux fichiers binaires dans Access. Le principe d'utiliser Access serait
d'utiliser une table de données (tes données ont l'air d'être formatées de
manière fixe) : tu importes tes données dans la table (l'import de fichier
texte se fait avec un assistant), tu effectues les traitements de controles
et de corrections (assistant de requêtes : une requête par traitement ou
contrôle), puis tu exportes tes données au format que tu souhaites
(assistant d'export). Pour des traitements simples de ce genre, tu n'as pas
besoin de VBA. Cela revient cependant à lire ton fichier de manière
séquentielle et à le ré-écrire : ça n'est probablement pas optimal.

Dis-moi si tu as besoin d'un coup de main sur Access.
Pierre.

"cedric leonard" a écrit dans le message
de news:
Meric pour ton consiel, mais le pb c'est que ma macro est sous VBA
Excel et je ne sais pas si je peux faire des choses avec acces a
partir de la maco. Sinon, est-il possible de la convertir en macro
acces (si ca existe des macro acces) ?

"Pierre Jagut" wrote in message
news:<bj6pi5$tjj$...

Bonjour,

De mémoire, il y a effectivement un premier octet au début des chaines
de


type String qui contient la longueur de la chaîne. Ce qui expliquerait
probablement ce caractère intempestif.
Compte tenu des difficultés que tu rencontres, mon conseil serait de
traiter


le fichier sous Access, en le lisant de la même manière et en générant
une


table. Tu pourras alors effectuer différents traitements de contrôles,
et


exporter ton fichier à un format standard. Je cite Access car il permet
d'avoir un grand nombre d'enregistrements et les requêtes sont souvent
plus


simples que des traitements Excel pour programmer les contrôles un peu
complexes, mais Excel peut convenir pour les cas simples.

Pierre.

"cedric leonard" a écrit dans le
message


de news:
Merci Pierre pour ton aide. En fait, malgré tout ca n'en fait pas un
fichier complètement texte. Il y a des caractères pour séparer les
chaines de caract`res qui ne sont pas des tabulations. Et de ce fait,
mon logiciel n'arrive pas è lire le fichier ainsi produit. Une
solution est donc de ne créer qu'une seule chaine de caractère par
enregistrement qui contient une concaténation de ce que je veux écrire
par ligne (séparé par chr(9) (=la tabulation)). Ceci dit, j'ai encore
le pb que les lignes ne sont pas séparés entre elles par un retour
chariot. Bref, je continue à chercher. Merci bcp pour vos
contributions.
Une autre solution au cas ou personne ne trouve de solution, serait de
traiter en acces séquentiel, mais dans ce cas, il faut que je réécrire
tout mon fichier alors qu'initialement je ne veux que modifier qq
lignes.
Cédric






"Pierre Jagut" wrote in message
news:<bj44fs$cfl$...



Bonjour,

Il est probable alors que l'instruction "put" écrive des octets et
non




pas
la valeur décimale en caractères des chiffres. Un single est sur 4
octets




(mantisse + exposant), un integer sur 2 octets, etc. Un éditeur de
texte




lui
ne lit que des octets et traduit chaque octet en un caractère. Il y
a




donc
incompatibilité. Pour pouvoir retrouver des caractères dans ton
fichier




de
sortie, à mon avis, tu dois y écrire des caractères.

Essaye en définissant un type de caractères. Par exemple (je ne suis
pas




sûr
de Format, mais ça doit être quelque chose comme ça) :
NB : si tes données ont un longueur variable, je te conseille
d'insérer




un
séparateur entre les champs (en général une tabulation ou un
point-virgule)




que tu peux définir au niveau du type LineFileCar

Type LineFile
Instant As Single
Variable As Single
End Type
Type LineFileCar
Instant As String
Separateur As String
Variable As String
End Type

Sub EcrireFichier()
NumFile = FreeFile()

Dim ToWrite As LineFile, ToWriteCar as LineFileCar
ToWriteCar.Separateur=";"

ToWrite.Instant = 2000010101
ToWrite.Variable = 12.7
ToWriteCar.Instant=Format(ToWrite.Instant,"0000000000")
ToWriteCar.Variable=Format(ToWrite.Variable,"00.0")
Filename = "U:toto.txt"
Open Filename For Random As #NumFile Len = Len(ToWriteCar)
Put #AllInfoFile.NumFile, 1, ToWriteCar

End Sub

.

Dis-moi ce que cela donne.
Pierre.

"cedric leonard" a écrit dans le
message




de news:
Merci Pierre, en fait, j'arrive bien à relire ce que j'ai écrit
avec





le VBA (en utilisant Get). Le pb est que je voudrais communiquer
avec





un autre logiciel qui lui lit des fichiers textes. Et le format
des





fichiers écrit en mode aléatoire ne ressemble pas trop à du texte.
Le





pb ne vient pas du type que j'ai moi-même défini (LineFile) car le
pb





se produit aussi avec des type Integer ou Single.
Seule les chiaines de caractères sont lisibles avec une éditeur
quelconque ....
Cédric




"Pierre Jagut" wrote in message
news:<bj2g89$mt1>$...






Bonjour,

Je ne suis pas sûr de moi car je ne connais pas ce mode
d'écriture.






Cependant, il me semble avoir repéré quelque chose : ta variable
"ToWrite"






est d'un type que tu as défini. Il est constitué de deux
variables






de 4
octets (un single tient bien sur 4 octets ?). Dans le fichier
résultat,




tu
as 8 caractères. Cela correspond donc probablement au contenu de
ta






variable
"ToWrite", mais le bloc note (ou autre outil de visulaisation du
fichier)






traduit les octets écrits en caractères. Si, au lieu d'écrire
"ToWrite",




tu
écris "Towrite.Instant" puis "ToWrite.Variable" (éventuellement
séparés




par
une tabulation ou autre), tu auras peut-être un résultat plus
lisible




avec
le bloc note, ou bien il faudrait les écrire dans des champs
texte.






Mais si cela se trouve, en relisant le fichier tel que tu l'as
écrit






(donc
avec un type "LineFile"), tu retrouveras les données.

Bon courage.
Pierre JAGUT

"cedric leonard" a écrit dans
le






message
de news:
Excusez-moi, le message posté précedemment comportait une
erreur







de
reproduction (j'ai fait le ménage dans ma macro pour plus de
lisibilité pour le mpfe).

A l'aide !!!
Je n'arrive pas a écrire dans un fichier que j'ouvre en mode
aléatoire








Svp, y a t-il une bonne âme qui voit ce qui cloche dans ma
macro








?

Type LineFile
Instant As Single
Variable As Single
End Type

Sub EcrireFichier()
NumFile = FreeFile()


Dim ToWrite As LineFile

ToWrite.Instant = 2000010101
ToWrite.Variable = 12.7
Filename = "U.toto.txt"
Open Filename For Random As #NumFile Len = Len(ToWrite)
Put #NumFile, 1, ToWrite

End Sub

Ca écrit dans le fichier des choses obscène (wkîN33KA par
exemple)






qui
n'on rien à voir avec ce que je veux!
En fait ca ne marche que si je ne définis que des chaines de
caractères dans le Type LineFile

Merci beaucoup d'avance, Cédric


















Avatar
Pierre Jagut
Bonsoir,

Sous Access, tu peux automatiser l'import de fichier texte s'il est
structuré.
Quand tu importes "à la main", dans l'assistant, il suffit de cliquer sur
"paramètre" avant de "terminer" : tous les éléments que tu as sélectionné
sont mémorisés. Avec le bouton "Enregistrer", tu nommes ces spécifications
d'import (en notant ce nom).
Dans les macro Access (onglet "Macro"), tu sélectionnes "TransfertTexte", et
tu lui spécifies tout, dont ces spécifications d'import. Pour l'exécuter, tu
peux lancer la macro que tu viens de créer. Tu peux également le traduire en
VBA (avec l'outil de traduction azutomatique).
Juste un truc : quand tu importes un fichier texte la première fois et
qu'Access te créée la structure, les champs "Texte" sont pas défaut à
"Chaîne vide autorisée = Non". Cela peut causer des problèmes si tu
ré-importes un fichier dont un champ texte est vide (il saute
l'enregistrement je crois) : je te conseille donc de mettre cette propriété
à Oui pour tous les champs texte, quitte à le contrôler après.

Pierre.


"cedric leonard" a écrit dans le message
de news:
J'ai un exemple de VBA Excel qui lances des requetes SQL sur une base
Acces. Donc ca je devrais savoir faire. L'export sous forme de fichier
texte, je sais le faire "à la main", mais j'ai besoin que ce soit
automatisé. Est-il possible de lancer cà à partir de ma macro sous
Excel ?
Merci d'avance,
Cédric



"Pierre Jagut" wrote in message
news:<bkmnsa$qrp$...

Bonjour,

Access dispose également de macros. Il y a deux types de macros : un
langage


spécifique à Access (assez simple à utiliser), et des modules qui sont
en


fait du code VBA. Mais je pense que tu retrouveras les problèmes d'Excel
liés aux fichiers binaires dans Access. Le principe d'utiliser Access
serait


d'utiliser une table de données (tes données ont l'air d'être formatées
de


manière fixe) : tu importes tes données dans la table (l'import de
fichier


texte se fait avec un assistant), tu effectues les traitements de
controles


et de corrections (assistant de requêtes : une requête par traitement ou
contrôle), puis tu exportes tes données au format que tu souhaites
(assistant d'export). Pour des traitements simples de ce genre, tu n'as
pas


besoin de VBA. Cela revient cependant à lire ton fichier de manière
séquentielle et à le ré-écrire : ça n'est probablement pas optimal.

Dis-moi si tu as besoin d'un coup de main sur Access.
Pierre.

"cedric leonard" a écrit dans le
message


de news:
Meric pour ton consiel, mais le pb c'est que ma macro est sous VBA
Excel et je ne sais pas si je peux faire des choses avec acces a
partir de la maco. Sinon, est-il possible de la convertir en macro
acces (si ca existe des macro acces) ?

"Pierre Jagut" wrote in message
news:<bj6pi5$tjj$...

Bonjour,

De mémoire, il y a effectivement un premier octet au début des
chaines




de
type String qui contient la longueur de la chaîne. Ce qui
expliquerait




probablement ce caractère intempestif.
Compte tenu des difficultés que tu rencontres, mon conseil serait de
traiter


le fichier sous Access, en le lisant de la même manière et en
générant




une
table. Tu pourras alors effectuer différents traitements de
contrôles,




et
exporter ton fichier à un format standard. Je cite Access car il
permet




d'avoir un grand nombre d'enregistrements et les requêtes sont
souvent




plus
simples que des traitements Excel pour programmer les contrôles un
peu




complexes, mais Excel peut convenir pour les cas simples.

Pierre.

"cedric leonard" a écrit dans le
message


de news:
Merci Pierre pour ton aide. En fait, malgré tout ca n'en fait pas
un





fichier complètement texte. Il y a des caractères pour séparer les
chaines de caract`res qui ne sont pas des tabulations. Et de ce
fait,





mon logiciel n'arrive pas è lire le fichier ainsi produit. Une
solution est donc de ne créer qu'une seule chaine de caractère par
enregistrement qui contient une concaténation de ce que je veux
écrire





par ligne (séparé par chr(9) (=la tabulation)). Ceci dit, j'ai
encore





le pb que les lignes ne sont pas séparés entre elles par un retour
chariot. Bref, je continue à chercher. Merci bcp pour vos
contributions.
Une autre solution au cas ou personne ne trouve de solution,
serait de





traiter en acces séquentiel, mais dans ce cas, il faut que je
réécrire





tout mon fichier alors qu'initialement je ne veux que modifier qq
lignes.
Cédric






"Pierre Jagut" wrote in message
news:<bj44fs$cfl$...



Bonjour,

Il est probable alors que l'instruction "put" écrive des octets
et






non
pas
la valeur décimale en caractères des chiffres. Un single est sur
4






octets
(mantisse + exposant), un integer sur 2 octets, etc. Un éditeur
de






texte
lui
ne lit que des octets et traduit chaque octet en un caractère.
Il y






a
donc
incompatibilité. Pour pouvoir retrouver des caractères dans ton
fichier




de
sortie, à mon avis, tu dois y écrire des caractères.

Essaye en définissant un type de caractères. Par exemple (je ne
suis






pas
sûr
de Format, mais ça doit être quelque chose comme ça) :
NB : si tes données ont un longueur variable, je te conseille
d'insérer




un
séparateur entre les champs (en général une tabulation ou un
point-virgule)




que tu peux définir au niveau du type LineFileCar

Type LineFile
Instant As Single
Variable As Single
End Type
Type LineFileCar
Instant As String
Separateur As String
Variable As String
End Type

Sub EcrireFichier()
NumFile = FreeFile()

Dim ToWrite As LineFile, ToWriteCar as LineFileCar
ToWriteCar.Separateur=";"

ToWrite.Instant = 2000010101
ToWrite.Variable = 12.7
ToWriteCar.Instant=Format(ToWrite.Instant,"0000000000")
ToWriteCar.Variable=Format(ToWrite.Variable,"00.0")
Filename = "U:toto.txt"
Open Filename For Random As #NumFile Len = Len(ToWriteCar)
Put #AllInfoFile.NumFile, 1, ToWriteCar

End Sub

.

Dis-moi ce que cela donne.
Pierre.

"cedric leonard" a écrit dans
le






message
de news:
Merci Pierre, en fait, j'arrive bien à relire ce que j'ai
écrit







avec
le VBA (en utilisant Get). Le pb est que je voudrais
communiquer







avec
un autre logiciel qui lui lit des fichiers textes. Et le
format







des
fichiers écrit en mode aléatoire ne ressemble pas trop à du
texte.







Le
pb ne vient pas du type que j'ai moi-même défini (LineFile)
car le







pb
se produit aussi avec des type Integer ou Single.
Seule les chiaines de caractères sont lisibles avec une
éditeur







quelconque ....
Cédric




"Pierre Jagut" wrote in message
news:<bj2g89$mt1>$...






Bonjour,

Je ne suis pas sûr de moi car je ne connais pas ce mode
d'écriture.






Cependant, il me semble avoir repéré quelque chose : ta
variable








"ToWrite"
est d'un type que tu as défini. Il est constitué de deux
variables






de 4
octets (un single tient bien sur 4 octets ?). Dans le
fichier








résultat,
tu
as 8 caractères. Cela correspond donc probablement au
contenu de








ta
variable
"ToWrite", mais le bloc note (ou autre outil de
visulaisation du








fichier)
traduit les octets écrits en caractères. Si, au lieu
d'écrire








"ToWrite",
tu
écris "Towrite.Instant" puis "ToWrite.Variable"
(éventuellement








séparés
par
une tabulation ou autre), tu auras peut-être un résultat
plus








lisible
avec
le bloc note, ou bien il faudrait les écrire dans des champs
texte.






Mais si cela se trouve, en relisant le fichier tel que tu
l'as








écrit
(donc
avec un type "LineFile"), tu retrouveras les données.

Bon courage.
Pierre JAGUT

"cedric leonard" a écrit
dans








le
message
de news:
Excusez-moi, le message posté précedemment comportait une
erreur







de
reproduction (j'ai fait le ménage dans ma macro pour plus
de









lisibilité pour le mpfe).

A l'aide !!!
Je n'arrive pas a écrire dans un fichier que j'ouvre en
mode










aléatoire
Svp, y a t-il une bonne âme qui voit ce qui cloche dans
ma










macro
?

Type LineFile
Instant As Single
Variable As Single
End Type

Sub EcrireFichier()
NumFile = FreeFile()


Dim ToWrite As LineFile

ToWrite.Instant = 2000010101
ToWrite.Variable = 12.7
Filename = "U.toto.txt"
Open Filename For Random As #NumFile Len Len(ToWrite)
Put #NumFile, 1, ToWrite

End Sub

Ca écrit dans le fichier des choses obscène (wkîN33KA par
exemple)






qui
n'on rien à voir avec ce que je veux!
En fait ca ne marche que si je ne définis que des chaines
de










caractères dans le Type LineFile

Merci beaucoup d'avance, Cédric




















Avatar
Pierre Jagut
Bonjour,

Ma question est : Excel est-il nécessaire ?
S'il s'agit de faire un import de fichier texte dans une table, des
traitements SQL, puis un export de fichier texte tabulé, Access me semble
suffisant. A moins que tu utilises des fonctions spéciales d'Excel non
disponibles sous Access.

Sans Excel, la procédure est la suivante :
- Créés la table d'import sous Access.
- Importe le fichier texte "à la main" une première fois, en enregistrant
les spécifications d'import (à la fin de l'assistant : "Paramètres", puis
"Enregistrer").
- Construis tes requêtes de mise à jour pour contrôles, requêtes de calculs,
etc., et garde bien en tête leur enchaînement.
- Exporte la table finale "à la main" une première fois, en enregistrant les
spécifications d'export (à la fin de l'assistant, "Paramètres", puis
"Enregistrer").
- Construis une requête de suppression qui vide la table d'import.
- Créés une nouvelle macro qui contient les instructions suivantes :
- OuvrirRequête : la requête qui vide la table d'import
- TransférerTexte : en précisant le sens (import), le nom du fichier à
importer, le format (spécifications d'import enregistrées), la table dans
laquelle sont ajoutés les enregistrements, etc.
- OuvrirRequête : les requêtes de mise à jour, de contrôle, etc., autant
de fois qu'il y a de requêtes
- TransférerTexte : en précisant le sens (export), le format
(spécifications d'export enregistrées), la table ou le re^qte qui est
exportée, le nom du fichier texte généré, etc.
- Si tu ne veux pas des messages d'Access indiquant le nombre
d'enregistrements supprimés, importés, mis à jours, etc., tu peux ajouter au
début une commande "Avertissements" à "Non", et à la fin "Avertissements" à
"Oui" (souvent associée à "Sablier" "Oui" puis "Sablier" "Non").
Si tu nommes cette requête "AutoExec", elle se lancera automatiquement à
l'ouverture de la base (n'oublie pas une instruction "Quitter" à la fin s'il
faut fermer Access après le traitement) (pour ne pas lancer la macro
"AutoExec" au démarrage, l'ouvrir en appuyant sur "Shift") (sans l'appeler
"AutoExec", tu peux lancer une macro à l'ouverture de la base en indiquant
dans la ligne de commande ".../Access.exe .../MaBase.mdb /X=MaMacro" ou
quelquechose comme ça).

Si tu souhaites absolument intégrer Excel et Access, il y a deux moyens :
- "L'automation", c'est à dire le fait de piloter Access depuis Excel : tu
génères des instructions VBA Access depuis un module Excel. Je ne l'ai
jamais fait, mais je sais que c'est possible avec les objets "Application".
- La liaison de la feuille Excel de données avec une table Access (liens DDE
ou OLEDB je crois) : dans Access, tu lie une table à une autre source avec
Fichier/Données externes/Lier, en précisant la feuille Excel. Si tu modifies
l'une des données, l'autre est également modifiée.

En combinant ces 3 possibilités, tu devrais pouvoir t'en sortir. Pour
l'automation, pose une autre question sur ce sujet au groupe : d'autres
pourront certainement te répondre.

Remarque : sur les fichiers assez volumineux, dont la source est "brute",
sur lesquels il faut effectuer de nombreux contrôles, modifications et états
statistiques, nous utilisons plutôt des logiciels spécifiques de traitement
de données (chez nous, c'est SAS).

Bonne journée.
Pierre.

"cedric leonard" a écrit dans le message
de news:
Bonjour,
En fait je cherche seulement à exporter vers un fichier texte. Ma
macro VBA excel mettra à jour une bd access avec des requêtes SQL,
mais je dois ensuite régulièrement en faire de facon automatique un
export sous forme de fichier texte tabulé. et là je bloque car si je
sais bien faire la manipulation à la main, je ne vois pas comment vba
excel pourrait commander à acces de faire la manip.
Cédric


"Pierre Jagut" wrote in message
news:<bkvcqc$n8j$...

Bonsoir,

Sous Access, tu peux automatiser l'import de fichier texte s'il est
structuré.
Quand tu importes "à la main", dans l'assistant, il suffit de cliquer
sur


"paramètre" avant de "terminer" : tous les éléments que tu as
sélectionné


sont mémorisés. Avec le bouton "Enregistrer", tu nommes ces
spécifications


d'import (en notant ce nom).
Dans les macro Access (onglet "Macro"), tu sélectionnes
"TransfertTexte", et


tu lui spécifies tout, dont ces spécifications d'import. Pour
l'exécuter, tu


peux lancer la macro que tu viens de créer. Tu peux également le
traduire en


VBA (avec l'outil de traduction azutomatique).
Juste un truc : quand tu importes un fichier texte la première fois et
qu'Access te créée la structure, les champs "Texte" sont pas défaut à
"Chaîne vide autorisée = Non". Cela peut causer des problèmes si tu
ré-importes un fichier dont un champ texte est vide (il saute
l'enregistrement je crois) : je te conseille donc de mettre cette
propriété


à Oui pour tous les champs texte, quitte à le contrôler après.

Pierre.


"cedric leonard" a écrit dans le
message


de news:
J'ai un exemple de VBA Excel qui lances des requetes SQL sur une base
Acces. Donc ca je devrais savoir faire. L'export sous forme de fichier
texte, je sais le faire "à la main", mais j'ai besoin que ce soit
automatisé. Est-il possible de lancer cà à partir de ma macro sous
Excel ?
Merci d'avance,
Cédric



"Pierre Jagut" wrote in message
news:<bkmnsa$qrp$...

Bonjour,

Access dispose également de macros. Il y a deux types de macros : un
langage


spécifique à Access (assez simple à utiliser), et des modules qui
sont




en
fait du code VBA. Mais je pense que tu retrouveras les problèmes
d'Excel




liés aux fichiers binaires dans Access. Le principe d'utiliser
Access




serait
d'utiliser une table de données (tes données ont l'air d'être
formatées




de
manière fixe) : tu importes tes données dans la table (l'import de
fichier


texte se fait avec un assistant), tu effectues les traitements de
controles


et de corrections (assistant de requêtes : une requête par
traitement ou




contrôle), puis tu exportes tes données au format que tu souhaites
(assistant d'export). Pour des traitements simples de ce genre, tu
n'as




pas
besoin de VBA. Cela revient cependant à lire ton fichier de manière
séquentielle et à le ré-écrire : ça n'est probablement pas optimal.

Dis-moi si tu as besoin d'un coup de main sur Access.
Pierre.

"cedric leonard" a écrit dans le
message


de news:
Meric pour ton consiel, mais le pb c'est que ma macro est sous VBA
Excel et je ne sais pas si je peux faire des choses avec acces a
partir de la maco. Sinon, est-il possible de la convertir en macro
acces (si ca existe des macro acces) ?

"Pierre Jagut" wrote in message
news:<bj6pi5$tjj$...



Bonjour,

De mémoire, il y a effectivement un premier octet au début des
chaines




de
type String qui contient la longueur de la chaîne. Ce qui
expliquerait




probablement ce caractère intempestif.
Compte tenu des difficultés que tu rencontres, mon conseil
serait de






traiter
le fichier sous Access, en le lisant de la même manière et en
générant




une
table. Tu pourras alors effectuer différents traitements de
contrôles,




et
exporter ton fichier à un format standard. Je cite Access car il
permet




d'avoir un grand nombre d'enregistrements et les requêtes sont
souvent




plus
simples que des traitements Excel pour programmer les contrôles
un






peu
complexes, mais Excel peut convenir pour les cas simples.

Pierre.

"cedric leonard" a écrit dans
le






message
de news:
Merci Pierre pour ton aide. En fait, malgré tout ca n'en fait
pas







un
fichier complètement texte. Il y a des caractères pour séparer
les







chaines de caract`res qui ne sont pas des tabulations. Et de
ce







fait,
mon logiciel n'arrive pas è lire le fichier ainsi produit. Une
solution est donc de ne créer qu'une seule chaine de caractère
par







enregistrement qui contient une concaténation de ce que je
veux







écrire
par ligne (séparé par chr(9) (=la tabulation)). Ceci dit, j'ai
encore





le pb que les lignes ne sont pas séparés entre elles par un
retour







chariot. Bref, je continue à chercher. Merci bcp pour vos
contributions.
Une autre solution au cas ou personne ne trouve de solution,
serait de





traiter en acces séquentiel, mais dans ce cas, il faut que je
réécrire





tout mon fichier alors qu'initialement je ne veux que modifier
qq







lignes.
Cédric






"Pierre Jagut" wrote in message
news:<bj44fs$cfl$...





Bonjour,

Il est probable alors que l'instruction "put" écrive des
octets








et
non
pas
la valeur décimale en caractères des chiffres. Un single est
sur








4
octets
(mantisse + exposant), un integer sur 2 octets, etc. Un
éditeur








de
texte
lui
ne lit que des octets et traduit chaque octet en un
caractère.








Il y
a
donc
incompatibilité. Pour pouvoir retrouver des caractères dans
ton








fichier
de
sortie, à mon avis, tu dois y écrire des caractères.

Essaye en définissant un type de caractères. Par exemple (je
ne








suis
pas
sûr
de Format, mais ça doit être quelque chose comme ça) :
NB : si tes données ont un longueur variable, je te
conseille








d'insérer
un
séparateur entre les champs (en général une tabulation ou un
point-virgule)






que tu peux définir au niveau du type LineFileCar

Type LineFile
Instant As Single
Variable As Single
End Type
Type LineFileCar
Instant As String
Separateur As String
Variable As String
End Type

Sub EcrireFichier()
NumFile = FreeFile()

Dim ToWrite As LineFile, ToWriteCar as LineFileCar
ToWriteCar.Separateur=";"

ToWrite.Instant = 2000010101
ToWrite.Variable = 12.7
ToWriteCar.Instant=Format(ToWrite.Instant,"0000000000")
ToWriteCar.Variable=Format(ToWrite.Variable,"00.0")
Filename = "U:toto.txt"
Open Filename For Random As #NumFile Len Len(ToWriteCar)
Put #AllInfoFile.NumFile, 1, ToWriteCar

End Sub

.

Dis-moi ce que cela donne.
Pierre.

"cedric leonard" a écrit
dans








le
message
de news:
Merci Pierre, en fait, j'arrive bien à relire ce que j'ai
écrit







avec
le VBA (en utilisant Get). Le pb est que je voudrais
communiquer







avec
un autre logiciel qui lui lit des fichiers textes. Et le
format







des
fichiers écrit en mode aléatoire ne ressemble pas trop à
du









texte.
Le
pb ne vient pas du type que j'ai moi-même défini
(LineFile)









car le
pb
se produit aussi avec des type Integer ou Single.
Seule les chiaines de caractères sont lisibles avec une
éditeur







quelconque ....
Cédric




"Pierre Jagut" wrote in message
news:<bj2g89$mt1>$...








Bonjour,

Je ne suis pas sûr de moi car je ne connais pas ce mode
d'écriture.








Cependant, il me semble avoir repéré quelque chose : ta
variable








"ToWrite"
est d'un type que tu as défini. Il est constitué de deux
variables






de 4
octets (un single tient bien sur 4 octets ?). Dans le
fichier








résultat,
tu
as 8 caractères. Cela correspond donc probablement au
contenu de








ta
variable
"ToWrite", mais le bloc note (ou autre outil de
visulaisation du








fichier)
traduit les octets écrits en caractères. Si, au lieu
d'écrire








"ToWrite",
tu
écris "Towrite.Instant" puis "ToWrite.Variable"
(éventuellement








séparés
par
une tabulation ou autre), tu auras peut-être un résultat
plus








lisible
avec
le bloc note, ou bien il faudrait les écrire dans des
champs










texte.
Mais si cela se trouve, en relisant le fichier tel que
tu










l'as
écrit
(donc
avec un type "LineFile"), tu retrouveras les données.

Bon courage.
Pierre JAGUT

"cedric leonard" a
écrit










dans
le
message
de
news:










Excusez-moi, le message posté précedemment comportait
une











erreur
de
reproduction (j'ai fait le ménage dans ma macro pour
plus











de
lisibilité pour le mpfe).

A l'aide !!!
Je n'arrive pas a écrire dans un fichier que j'ouvre
en












mode
aléatoire
Svp, y a t-il une bonne âme qui voit ce qui cloche
dans












ma
macro
?

Type LineFile
Instant As Single
Variable As Single
End Type

Sub EcrireFichier()
NumFile = FreeFile()


Dim ToWrite As LineFile

ToWrite.Instant = 2000010101
ToWrite.Variable = 12.7
Filename = "U.toto.txt"
Open Filename For Random As #NumFile Len > > Len(ToWrite)
Put #NumFile, 1, ToWrite

End Sub

Ca écrit dans le fichier des choses obscène (wkîN33KA
par












exemple)
qui
n'on rien à voir avec ce que je veux!
En fait ca ne marche que si je ne définis que des
chaines












de
caractères dans le Type LineFile

Merci beaucoup d'avance, Cédric
























Avatar
cedric.leonard
D'abord merci,
J'ai effectivement absolument besoin de lancer à partir d'excel
(traitement par ailleur d'information sur des cellules). J'ai regardé
un peu ce que tu propopse avec application. Il semble effectivement
possible de lancer à partir d'excel l'export d'access en fichier
texte. Je vais regarder un peu plus.
Cédric