"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éatoireSvp, 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)
quin'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
"Pierre Jagut" <jagut@geta.fr> wrote in message news:<bj2g89$mt1>$1@s1.read.news.oleane.net>...
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" <cedric.leonard@steweag-steg.com> a écrit dans le message
de news:7f4001b4.0309020556.1c6de8e2@posting.google.com...
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
"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éatoireSvp, 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)
quin'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
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éatoireSvp, 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)
quin'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
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" <jagut@geta.fr> wrote in message
news:<bj2g89$mt1>$1@s1.read.news.oleane.net>...
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" <cedric.leonard@steweag-steg.com> a écrit dans le
message
de news:7f4001b4.0309020556.1c6de8e2@posting.google.com...
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
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éatoireSvp, 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)
quin'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
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,
tuas 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
parune tabulation ou autre), tu auras peut-être un résultat plus lisible
avecle 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
(doncavec un type "LineFile"), tu retrouveras les données.
Bon courage.
Pierre JAGUT
"cedric leonard" a écrit dans le
messagede 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éatoireSvp, 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)
quin'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
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" <cedric.leonard@steweag-steg.com> a écrit dans le message
de news:7f4001b4.0309022210.17efb69f@posting.google.com...
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" <jagut@geta.fr> wrote in message
news:<bj2g89$mt1>$1@s1.read.news.oleane.net>...
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" <cedric.leonard@steweag-steg.com> a écrit dans le
message
de news:7f4001b4.0309020556.1c6de8e2@posting.google.com...
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
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,
tuas 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
parune tabulation ou autre), tu auras peut-être un résultat plus lisible
avecle 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
(doncavec un type "LineFile"), tu retrouveras les données.
Bon courage.
Pierre JAGUT
"cedric leonard" a écrit dans le
messagede 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éatoireSvp, 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)
quin'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
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,
tuas 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
parune tabulation ou autre), tu auras peut-être un résultat plus
lisible
avecle 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
(doncavec un type "LineFile"), tu retrouveras les données.
Bon courage.
Pierre JAGUT
"cedric leonard" a écrit dans le
messagede 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éatoireSvp, 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)
quin'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
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" <jagut@geta.fr> wrote in message
news:<bj44fs$cfl$1@s1.read.news.oleane.net>...
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" <cedric.leonard@steweag-steg.com> a écrit dans le
message
de news:7f4001b4.0309022210.17efb69f@posting.google.com...
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" <jagut@geta.fr> wrote in message
news:<bj2g89$mt1>$1@s1.read.news.oleane.net>...
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" <cedric.leonard@steweag-steg.com> a écrit dans le
message
de news:7f4001b4.0309020556.1c6de8e2@posting.google.com...
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
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,
tuas 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
parune tabulation ou autre), tu auras peut-être un résultat plus
lisible
avecle 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
(doncavec un type "LineFile"), tu retrouveras les données.
Bon courage.
Pierre JAGUT
"cedric leonard" a écrit dans le
messagede 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éatoireSvp, 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)
quin'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
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
pasla 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
luine lit que des octets et traduit chaque octet en un caractère. Il y a
doncincompatibilité. Pour pouvoir retrouver des caractères dans ton fichier
desortie, à 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ûrde Format, mais ça doit être quelque chose comme ça) :
NB : si tes données ont un longueur variable, je te conseille d'insérer
unsé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
messagede 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 4octets (un single tient bien sur 4 octets ?). Dans le fichier
résultat,
tuas 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
parune tabulation ou autre), tu auras peut-être un résultat plus
lisible
avecle 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
(doncavec un type "LineFile"), tu retrouveras les données.
Bon courage.
Pierre JAGUT
"cedric leonard" a écrit dans le
messagede news:Excusez-moi, le message posté précedemment comportait une erreur
dereproduction (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éatoireSvp, 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)
quin'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
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" <cedric.leonard@steweag-steg.com> a écrit dans le message
de news:7f4001b4.0309030825.3a671faa@posting.google.com...
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" <jagut@geta.fr> wrote in message
news:<bj44fs$cfl$1@s1.read.news.oleane.net>...
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" <cedric.leonard@steweag-steg.com> a écrit dans le
message
de news:7f4001b4.0309022210.17efb69f@posting.google.com...
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" <jagut@geta.fr> wrote in message
news:<bj2g89$mt1>$1@s1.read.news.oleane.net>...
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" <cedric.leonard@steweag-steg.com> a écrit dans le
message
de news:7f4001b4.0309020556.1c6de8e2@posting.google.com...
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
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
pasla 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
luine lit que des octets et traduit chaque octet en un caractère. Il y a
doncincompatibilité. Pour pouvoir retrouver des caractères dans ton fichier
desortie, à 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ûrde Format, mais ça doit être quelque chose comme ça) :
NB : si tes données ont un longueur variable, je te conseille d'insérer
unsé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
messagede 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 4octets (un single tient bien sur 4 octets ?). Dans le fichier
résultat,
tuas 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
parune tabulation ou autre), tu auras peut-être un résultat plus
lisible
avecle 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
(doncavec un type "LineFile"), tu retrouveras les données.
Bon courage.
Pierre JAGUT
"cedric leonard" a écrit dans le
messagede news:Excusez-moi, le message posté précedemment comportait une erreur
dereproduction (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éatoireSvp, 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)
quin'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
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
detype 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
traiterle fichier sous Access, en le lisant de la même manière et en générant
unetable. Tu pourras alors effectuer différents traitements de contrôles,
etexporter ton fichier à un format standard. Je cite Access car il permet
d'avoir un grand nombre d'enregistrements et les requêtes sont souvent
plussimples 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
messagede 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
pasla 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
luine lit que des octets et traduit chaque octet en un caractère. Il y
a
doncincompatibilité. Pour pouvoir retrouver des caractères dans ton
fichier
desortie, à 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ûrde Format, mais ça doit être quelque chose comme ça) :
NB : si tes données ont un longueur variable, je te conseille
d'insérer
unsé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
messagede news:Merci Pierre, en fait, j'arrive bien à relire ce que j'ai écrit
avecle VBA (en utilisant Get). Le pb est que je voudrais communiquer
avecun autre logiciel qui lui lit des fichiers textes. Et le format
desfichiers écrit en mode aléatoire ne ressemble pas trop à du texte.
Lepb ne vient pas du type que j'ai moi-même défini (LineFile) car le
pbse 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 4octets (un single tient bien sur 4 octets ?). Dans le fichier
résultat,
tuas 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
parune tabulation ou autre), tu auras peut-être un résultat plus
lisible
avecle 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
(doncavec un type "LineFile"), tu retrouveras les données.
Bon courage.
Pierre JAGUT
"cedric leonard" a écrit dans
le
messagede news:Excusez-moi, le message posté précedemment comportait une
erreur
dereproduction (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éatoireSvp, 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)
quin'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
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" <cedric.leonard@steweag-steg.com> a écrit dans le message
de news:7f4001b4.0309180603.7e75c02c@posting.google.com...
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" <jagut@geta.fr> wrote in message
news:<bj6pi5$tjj$1@s1.read.news.oleane.net>...
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" <cedric.leonard@steweag-steg.com> a écrit dans le
message
de news:7f4001b4.0309030825.3a671faa@posting.google.com...
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" <jagut@geta.fr> wrote in message
news:<bj44fs$cfl$1@s1.read.news.oleane.net>...
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" <cedric.leonard@steweag-steg.com> a écrit dans le
message
de news:7f4001b4.0309022210.17efb69f@posting.google.com...
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" <jagut@geta.fr> wrote in message
news:<bj2g89$mt1>$1@s1.read.news.oleane.net>...
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" <cedric.leonard@steweag-steg.com> a écrit dans
le
message
de news:7f4001b4.0309020556.1c6de8e2@posting.google.com...
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
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
detype 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
traiterle fichier sous Access, en le lisant de la même manière et en générant
unetable. Tu pourras alors effectuer différents traitements de contrôles,
etexporter ton fichier à un format standard. Je cite Access car il permet
d'avoir un grand nombre d'enregistrements et les requêtes sont souvent
plussimples 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
messagede 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
pasla 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
luine lit que des octets et traduit chaque octet en un caractère. Il y
a
doncincompatibilité. Pour pouvoir retrouver des caractères dans ton
fichier
desortie, à 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ûrde Format, mais ça doit être quelque chose comme ça) :
NB : si tes données ont un longueur variable, je te conseille
d'insérer
unsé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
messagede news:Merci Pierre, en fait, j'arrive bien à relire ce que j'ai écrit
avecle VBA (en utilisant Get). Le pb est que je voudrais communiquer
avecun autre logiciel qui lui lit des fichiers textes. Et le format
desfichiers écrit en mode aléatoire ne ressemble pas trop à du texte.
Lepb ne vient pas du type que j'ai moi-même défini (LineFile) car le
pbse 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 4octets (un single tient bien sur 4 octets ?). Dans le fichier
résultat,
tuas 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
parune tabulation ou autre), tu auras peut-être un résultat plus
lisible
avecle 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
(doncavec un type "LineFile"), tu retrouveras les données.
Bon courage.
Pierre JAGUT
"cedric leonard" a écrit dans
le
messagede news:Excusez-moi, le message posté précedemment comportait une
erreur
dereproduction (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éatoireSvp, 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)
quin'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
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
detype 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
traiterle fichier sous Access, en le lisant de la même manière et en
générant
unetable. Tu pourras alors effectuer différents traitements de
contrôles,
etexporter ton fichier à un format standard. Je cite Access car il
permet
d'avoir un grand nombre d'enregistrements et les requêtes sont
souvent
plussimples 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
messagede 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
pasla 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
luine lit que des octets et traduit chaque octet en un caractère.
Il y
a
doncincompatibilité. Pour pouvoir retrouver des caractères dans ton
fichier
desortie, à 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ûrde Format, mais ça doit être quelque chose comme ça) :
NB : si tes données ont un longueur variable, je te conseille
d'insérer
unsé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
messagede news:Merci Pierre, en fait, j'arrive bien à relire ce que j'ai
écrit
avecle VBA (en utilisant Get). Le pb est que je voudrais
communiquer
avecun autre logiciel qui lui lit des fichiers textes. Et le
format
desfichiers écrit en mode aléatoire ne ressemble pas trop à du
texte.
Lepb ne vient pas du type que j'ai moi-même défini (LineFile)
car le
pbse 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 4octets (un single tient bien sur 4 octets ?). Dans le
fichier
résultat,
tuas 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
parune tabulation ou autre), tu auras peut-être un résultat
plus
lisible
avecle 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
(doncavec un type "LineFile"), tu retrouveras les données.
Bon courage.
Pierre JAGUT
"cedric leonard" a écrit
dans
le
messagede news:Excusez-moi, le message posté précedemment comportait une
erreur
dereproduction (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éatoireSvp, 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)
quin'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
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" <jagut@geta.fr> wrote in message
news:<bkmnsa$qrp$1@s1.read.news.oleane.net>...
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" <cedric.leonard@steweag-steg.com> a écrit dans le
message
de news:7f4001b4.0309180603.7e75c02c@posting.google.com...
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" <jagut@geta.fr> wrote in message
news:<bj6pi5$tjj$1@s1.read.news.oleane.net>...
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" <cedric.leonard@steweag-steg.com> a écrit dans le
message
de news:7f4001b4.0309030825.3a671faa@posting.google.com...
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" <jagut@geta.fr> wrote in message
news:<bj44fs$cfl$1@s1.read.news.oleane.net>...
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" <cedric.leonard@steweag-steg.com> a écrit dans
le
message
de news:7f4001b4.0309022210.17efb69f@posting.google.com...
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" <jagut@geta.fr> wrote in message
news:<bj2g89$mt1>$1@s1.read.news.oleane.net>...
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" <cedric.leonard@steweag-steg.com> a écrit
dans
le
message
de news:7f4001b4.0309020556.1c6de8e2@posting.google.com...
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
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
detype 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
traiterle fichier sous Access, en le lisant de la même manière et en
générant
unetable. Tu pourras alors effectuer différents traitements de
contrôles,
etexporter ton fichier à un format standard. Je cite Access car il
permet
d'avoir un grand nombre d'enregistrements et les requêtes sont
souvent
plussimples 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
messagede 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
pasla 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
luine lit que des octets et traduit chaque octet en un caractère.
Il y
a
doncincompatibilité. Pour pouvoir retrouver des caractères dans ton
fichier
desortie, à 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ûrde Format, mais ça doit être quelque chose comme ça) :
NB : si tes données ont un longueur variable, je te conseille
d'insérer
unsé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
messagede news:Merci Pierre, en fait, j'arrive bien à relire ce que j'ai
écrit
avecle VBA (en utilisant Get). Le pb est que je voudrais
communiquer
avecun autre logiciel qui lui lit des fichiers textes. Et le
format
desfichiers écrit en mode aléatoire ne ressemble pas trop à du
texte.
Lepb ne vient pas du type que j'ai moi-même défini (LineFile)
car le
pbse 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 4octets (un single tient bien sur 4 octets ?). Dans le
fichier
résultat,
tuas 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
parune tabulation ou autre), tu auras peut-être un résultat
plus
lisible
avecle 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
(doncavec un type "LineFile"), tu retrouveras les données.
Bon courage.
Pierre JAGUT
"cedric leonard" a écrit
dans
le
messagede news:Excusez-moi, le message posté précedemment comportait une
erreur
dereproduction (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éatoireSvp, 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)
quin'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
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
langagespécifique à Access (assez simple à utiliser), et des modules qui
sont
enfait 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
seraitd'utiliser une table de données (tes données ont l'air d'être
formatées
demanière fixe) : tu importes tes données dans la table (l'import de
fichiertexte se fait avec un assistant), tu effectues les traitements de
controleset 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
pasbesoin 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
messagede 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
detype String qui contient la longueur de la chaîne. Ce qui
expliqueraitprobablement ce caractère intempestif.
Compte tenu des difficultés que tu rencontres, mon conseil
serait de
traiterle fichier sous Access, en le lisant de la même manière et en
générant
unetable. Tu pourras alors effectuer différents traitements de
contrôles,
etexporter ton fichier à un format standard. Je cite Access car il
permetd'avoir un grand nombre d'enregistrements et les requêtes sont
souvent
plussimples que des traitements Excel pour programmer les contrôles
un
peucomplexes, mais Excel peut convenir pour les cas simples.
Pierre.
"cedric leonard" a écrit dans
le
messagede news:Merci Pierre pour ton aide. En fait, malgré tout ca n'en fait
pas
unfichier 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
écrirepar ligne (séparé par chr(9) (=la tabulation)). Ceci dit, j'ai
encorele 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 detraiter en acces séquentiel, mais dans ce cas, il faut que je
réécriretout mon fichier alors qu'initialement je ne veux que modifier
lignes.
Cédric
"Pierre Jagut" wrote in message
news:<bj44fs$cfl$...Bonjour,
Il est probable alors que l'instruction "put" écrive des
octets
etnon
pasla valeur décimale en caractères des chiffres. Un single est
sur
4
octets(mantisse + exposant), un integer sur 2 octets, etc. Un
éditeur
detexte
luine lit que des octets et traduit chaque octet en un
caractère.
Il ya
doncincompatibilité. Pour pouvoir retrouver des caractères dans
ton
fichier
desortie, à mon avis, tu dois y écrire des caractères.
Essaye en définissant un type de caractères. Par exemple (je
ne
suispas
sûrde Format, mais ça doit être quelque chose comme ça) :
NB : si tes données ont un longueur variable, je te
conseille
d'insérer
unsé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
messagede news:Merci Pierre, en fait, j'arrive bien à relire ce que j'ai
écrit
avecle VBA (en utilisant Get). Le pb est que je voudrais
communiquer
avecun autre logiciel qui lui lit des fichiers textes. Et le
format
desfichiers écrit en mode aléatoire ne ressemble pas trop à
du
texte.
Lepb ne vient pas du type que j'ai moi-même défini
(LineFile)
car le
pbse produit aussi avec des type Integer ou Single.
Seule les chiaines de caractères sont lisibles avec une
éditeurquelconque ....
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 4octets (un single tient bien sur 4 octets ?). Dans le
fichierrésultat,
tuas 8 caractères. Cela correspond donc probablement au
contenu deta
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"
(éventuellementséparés
parune tabulation ou autre), tu auras peut-être un résultat
pluslisible
avecle 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
(doncavec un type "LineFile"), tu retrouveras les données.
Bon courage.
Pierre JAGUT
"cedric leonard" a
écrit
dansle
messagede
news:
Excusez-moi, le message posté précedemment comportait
une
erreur
dereproduction (j'ai fait le ménage dans ma macro pour
plus
delisibilité pour le mpfe).A l'aide !!!
Je n'arrive pas a écrire dans un fichier que j'ouvre
en
mode
aléatoireSvp, y a t-il une bonne âme qui voit ce qui cloche
dans
mamacro
?
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)
quin'on rien à voir avec ce que je veux!
En fait ca ne marche que si je ne définis que des
chaines
decaractères dans le Type LineFile
Merci beaucoup d'avance, Cédric
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" <jagut@geta.fr> wrote in message
news:<bkvcqc$n8j$1@s1.read.news.oleane.net>...
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" <cedric.leonard@steweag-steg.com> a écrit dans le
message
de news:7f4001b4.0309250741.7eedc0d@posting.google.com...
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" <jagut@geta.fr> wrote in message
news:<bkmnsa$qrp$1@s1.read.news.oleane.net>...
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" <cedric.leonard@steweag-steg.com> a écrit dans le
message
de news:7f4001b4.0309180603.7e75c02c@posting.google.com...
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" <jagut@geta.fr> wrote in message
news:<bj6pi5$tjj$1@s1.read.news.oleane.net>...
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" <cedric.leonard@steweag-steg.com> a écrit dans
le
message
de news:7f4001b4.0309030825.3a671faa@posting.google.com...
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
lignes.
Cédric
"Pierre Jagut" <jagut@geta.fr> wrote in message
news:<bj44fs$cfl$1@s1.read.news.oleane.net>...
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" <cedric.leonard@steweag-steg.com> a écrit
dans
le
message
de news:7f4001b4.0309022210.17efb69f@posting.google.com...
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" <jagut@geta.fr> wrote in message
news:<bj2g89$mt1>$1@s1.read.news.oleane.net>...
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" <cedric.leonard@steweag-steg.com> a
écrit
dans
le
message
de
news:7f4001b4.0309020556.1c6de8e2@posting.google.com...
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
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
langagespécifique à Access (assez simple à utiliser), et des modules qui
sont
enfait 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
seraitd'utiliser une table de données (tes données ont l'air d'être
formatées
demanière fixe) : tu importes tes données dans la table (l'import de
fichiertexte se fait avec un assistant), tu effectues les traitements de
controleset 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
pasbesoin 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
messagede 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
detype String qui contient la longueur de la chaîne. Ce qui
expliqueraitprobablement ce caractère intempestif.
Compte tenu des difficultés que tu rencontres, mon conseil
serait de
traiterle fichier sous Access, en le lisant de la même manière et en
générant
unetable. Tu pourras alors effectuer différents traitements de
contrôles,
etexporter ton fichier à un format standard. Je cite Access car il
permetd'avoir un grand nombre d'enregistrements et les requêtes sont
souvent
plussimples que des traitements Excel pour programmer les contrôles
un
peucomplexes, mais Excel peut convenir pour les cas simples.
Pierre.
"cedric leonard" a écrit dans
le
messagede news:Merci Pierre pour ton aide. En fait, malgré tout ca n'en fait
pas
unfichier 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
écrirepar ligne (séparé par chr(9) (=la tabulation)). Ceci dit, j'ai
encorele 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 detraiter en acces séquentiel, mais dans ce cas, il faut que je
réécriretout mon fichier alors qu'initialement je ne veux que modifier
lignes.
Cédric
"Pierre Jagut" wrote in message
news:<bj44fs$cfl$...Bonjour,
Il est probable alors que l'instruction "put" écrive des
octets
etnon
pasla valeur décimale en caractères des chiffres. Un single est
sur
4
octets(mantisse + exposant), un integer sur 2 octets, etc. Un
éditeur
detexte
luine lit que des octets et traduit chaque octet en un
caractère.
Il ya
doncincompatibilité. Pour pouvoir retrouver des caractères dans
ton
fichier
desortie, à mon avis, tu dois y écrire des caractères.
Essaye en définissant un type de caractères. Par exemple (je
ne
suispas
sûrde Format, mais ça doit être quelque chose comme ça) :
NB : si tes données ont un longueur variable, je te
conseille
d'insérer
unsé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
messagede news:Merci Pierre, en fait, j'arrive bien à relire ce que j'ai
écrit
avecle VBA (en utilisant Get). Le pb est que je voudrais
communiquer
avecun autre logiciel qui lui lit des fichiers textes. Et le
format
desfichiers écrit en mode aléatoire ne ressemble pas trop à
du
texte.
Lepb ne vient pas du type que j'ai moi-même défini
(LineFile)
car le
pbse produit aussi avec des type Integer ou Single.
Seule les chiaines de caractères sont lisibles avec une
éditeurquelconque ....
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 4octets (un single tient bien sur 4 octets ?). Dans le
fichierrésultat,
tuas 8 caractères. Cela correspond donc probablement au
contenu deta
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"
(éventuellementséparés
parune tabulation ou autre), tu auras peut-être un résultat
pluslisible
avecle 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
(doncavec un type "LineFile"), tu retrouveras les données.
Bon courage.
Pierre JAGUT
"cedric leonard" a
écrit
dansle
messagede
news:
Excusez-moi, le message posté précedemment comportait
une
erreur
dereproduction (j'ai fait le ménage dans ma macro pour
plus
delisibilité pour le mpfe).A l'aide !!!
Je n'arrive pas a écrire dans un fichier que j'ouvre
en
mode
aléatoireSvp, y a t-il une bonne âme qui voit ce qui cloche
dans
mamacro
?
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)
quin'on rien à voir avec ce que je veux!
En fait ca ne marche que si je ne définis que des
chaines
decaractères dans le Type LineFile
Merci beaucoup d'avance, Cédric