OVH Cloud OVH Cloud

Export de données en texte préformaté

24 réponses
Avatar
chris
Bonjour
J'exporte des données d'une table vers un fichier texte qui doit
impérativement respecter un format
un entête
corps du texte
un final
Pour le moment j'ai crée un module qui me crée un fichier texte dans un
dossier prédéfini, et qui écrit dedans les données de cette manière
Printintfichier "bla bla bla" & Nz(([nomduchamp]),"-")
et ce pour chaque ligne de mon fichier (je n'ai pas en tête le code exact
mais je peux le retrouver)
Mon soucis est que si j'ai besoin de changer un paramètre, ou de supprimer
une ligne ou en rajouter une, je suis obligé de modifier le module et de
redonner une copie de mon fichier mde à tous mes utilisateurs
j'ai essayé de faire un fichier export.ini mais mes champs sont "alignés"
les uns derrière les autres et séparés par un ";", je ne sais pas si on peut
faire quelque chose du style:

champ0
Entete*
nomdeligne*-Champ1-champ2-champ3
nomdeligne2*-Champ4-champ6
nomdeligne3*-champ8-champ5
final*

*n'est pas changé par la base et où "champx" est un des champs de la table
cela me permettrais de stocker ce fichier "modele.ini" à l'extérieur de la
base et de pouvoir modifier l'entête, le final ou le nom de ligne sans avoir
à refaire un MDE

quand je regarde un fichier "export.ini"
je n'ai que des
Col1=nomduchamp typedechamp
Col2=nomduchamp typedechamp
etc.
il n'y a pas de commande type
Lig2=...
pour dire "on passe à la ligne2" etc?

10 réponses

1 2 3
Avatar
Gilbert
Bonjour,

Voici pour le mois
TonMois = Choose(Month(Date - 1), "JAN", "FEB", "MAR", "APR","...........",
"DEC")

Pour l'erreur 3251
Est-ce que l'erreur se produit à chaque enregistrement?
As-tu essayé en mettent des points d'arrêt et en testant les valeurs?

Gilbert

"chris" a écrit dans le message de
news:
Bonjour

Pour la date c'est ok, par contre
j'ai mis ceci :
Print #intFichier, rst.AbsolutePosition +1
et là il me dit :
erreur d'execution 3251
opération non autorisée pour ce type d'objet
voilou

j'ai essayé aussi de mettre dans un autre module
Print #intFichier, Format(Date - 1, "mmm") pour avoir les 3 premièrers
lettres du mois
cela fonctionne, mais le mois apparaît en minuscules (j'en ai besoin en
majuscules forcément) et en français (normal, mais là je suis encore
exigeant, je sais, mais j'en ai besoin en anglais (si ce dernier paramètre
n'est pas possible on le mettra manuellement))

Merci beaucoup

"Chris50" a écrit dans le message de
news:
ok j'essaye ça demain et je vous dis
Merci


Bonjour,

Pour la date de la veille tu peux utiliser :
Format(Date - 1, "ddmmyy")

et pour le numéro de l'enregistrement :
rst.AbsolutePosition +1 (la numérotation commence à 0)

Gilbert



"Chris50" a écrit dans le message
de



news:
Euh re bonjour,
J'ai encore 1 ou 2 ptits trucs à demander, car on m'a demandé de
modifier
un

peu le format

Avant le Nz(rst("NOM"), "-")
il faut mettre :
la date de la veille sous ce format : 141106 pour le 14 nov 2006
le numéro de l'enregistrement : c'est à dire que les enregistrements
soient

numérotés de 1 à 4 s'il y a 4 enregistrements (je sais po si je suis
clair)


Merci
If not rst.EOF then
Print #intFichier, "message emis du" & Nz(rst("DATE"), "-")
Print #intFichier, "par" Nz(rst("Nom agent"), "-")
Print #intFichier, "objet du message : listing du " &
Nz(rst("DATE"),
"-")




While Not rst.EOF
Print #intFichier, Nz(rst("NOM"), "-") & "-" & Nz(rst("Prenom"),
"-")
&



"-"
& Nz(rst("adresse"), "-") & "/" & Nz(rst("téléphone"), "-") & "-"
&






Nz(rst("email"), "-") & "-" & Nz(rst("télécopie"), "-")
Beep
MsgBox "Message prêt à être envoyé", vbInformation, "Fin"
' passer à l'enregistrement suivant
rst.MoveNext
Wend

Print #intFichier, "Fin de liste"
Else
MsgBox "Pas d'enregistrement"
End If





super ça fonctionne
merci infiniment, je va maintenant m'essayer au fichier ini
merci encore

"Gilbert" a écrit dans le message de
news:
eApDbhG$
Bonjour,

Il suffit de sortir de la boucle les écritures que tu ne veux
qu'une
fois.




If not rst.EOF then
Print #intFichier, "message emis du" & Nz(rst("DATE"), "-")
Print #intFichier, "par" Nz(rst("Nom agent"), "-")
Print #intFichier, "objet du message : listing du " &
Nz(rst("DATE"),
"-")




While Not rst.EOF
Print #intFichier, Nz(rst("NOM"), "-") & "-" & Nz(rst("Prenom"),
"-")
&



"-"
& Nz(rst("adresse"), "-") & "/" & Nz(rst("téléphone"), "-") & "-"
&






Nz(rst("email"), "-") & "-" & Nz(rst("télécopie"), "-")
Beep
MsgBox "Message prêt à être envoyé", vbInformation, "Fin"
' passer à l'enregistrement suivant
rst.MoveNext
Wend

Print #intFichier, "Fin de liste"
Else
MsgBox "Pas d'enregistrement"
End If


"chris" a écrit dans le message de
news:OWyoyza%
Merci beaucoup, je vais essayer ça

Pour un autre type de message préformaté (celui-ci est moins
changeant




que
l'autre), j'utilise ceci :
Function message()
Dim db As DAO.Database
Dim rst As DAO.Recordset
Dim intFichier As Long

'choisir la fiche
DoCmd.OpenQuery "ajout donnee au tampon message", acNormal,
acEdit




DoCmd.Close acQuery, "ajout donnee au tampon message"

'Ouvrir le recordset
Set db = CurrentDb()
Set rst = db.OpenRecordset("TAMPON message")

'Ouvrir le fichier texte en écriture
intFichier = FreeFile
Open "D:message.txt" For Output As intFichier

'Parcourir les champs et écrire les infos
While Not rst.EOF

Print #intFichier, "message emis du" & Nz(rst("DATE"), "-")
Print #intFichier, "par" Nz(rst("Nom agent"), "-")
Print #intFichier, "objet du message : listing du " &
Nz(rst("DATE"),
"-")
Print #intFichier, Nz(rst("NOM"), "-") & "-" & Nz(rst("Prenom"),
"-")
&




"-"
& Nz(rst("adresse"), "-") & "/" & Nz(rst("téléphone"), "-") &
"-"







&
Nz(rst("email"), "-") & "-" & Nz(rst("télécopie"), "-")
Print #intFichier, "Fin de liste"
Beep
MsgBox "Message prêt à être envoyé", vbInformation, "Fin"
' passer à l'enregistrement suivant
rst.MoveNext
Wend

'on ferme
Close intFichier
rst.Close
Set rst = Nothing
Set db = Nothing
End Function

et lorsque j'ai 2 enregistrements ou plus, il met met (logique)
les 4
lignes, comment faire une boucle pour qu'il mette 1 seule fois
les







3
premières ligne
puis autant de fois qu'il y a d'enregistrements la 4ème ligne et
1







fois
la
5ème ligne
Merci de votre aide précieuse

"Gilbert" a écrit dans le message de
news:





Tu peux faire un fichier texte tout simple

Entete
Champ1;Champ2;Champ54
Champ25;champ4
Champ5
...
Fin

Ensuite tu lis ton fichier séquentiellement
Open NomFichier For Input As #1
Do While Not EOF(1)
Texte = Input(LOF(1), 1)

Traitement.......

Loop
Close #1


Si tu tiens à utiliser un fichier .INI, voici 2 fonctions

Private Declare Function GetPrivateProfileString Lib
"kernel32"








Alias
"GetPrivateProfileStringA" (ByVal lpApplicationName As String,
ByVal





lpKeyName As Any, ByVal lpDefault As String, ByVal
lpReturnedString
As





String, ByVal nSize As Long, ByVal lpFileName As String) As
Long








Private Declare Function WritePrivateProfileString Lib
"kernel32"
Alias





"WritePrivateProfileStringA" (ByVal lpApplicationName As
String,








ByVal
lpKeyName As Any, ByVal lpString As Any, ByVal lpFileName As
String) As





Long


'Lecture de la Valeur d'une clé dans un fichier INI
Public Function Lecture_Valeur_Cle_Fichier_INI(ByVal
NomFichier








As
String,


_
ByVal NomSection
As
String,


_
ByVal NomCle As
String)





As
String
' Pour lire les données, on utilise la fonction
GetPrivateProfileString





' Les arguments passés à l'API Windows sont :
' Le nom de section dans le fichier INI
' Le nom de la clé qui doit être lue dans la section
' La valeur par défaut
' La variable dans laquelle on stocke la donnée lue
' La longueur de la chaîne de caractère
' Le nom du fichier INI ainsi que le répertoire dans lequel il
se
trouve
Dim Taille As Long ' Variable pour recevoir la
longueur
de





la
chaîne lue
Dim Donnee As String * 255 ' Variable pour recevoir la
valeur








de
la





clé

' Lecture de la clé dans la section
Taille = GetPrivateProfileString(NomSection, NomCle, "",
Donnee,








255,
NomFichier)
Lecture_Valeur_Cle_Fichier_INI = Mid(Donnee, 1, Taille)
End Function



'Ecriture de la Valeur d'une clé dans un fichier INI
Public Function Ecriture_Valeur_Cle_Fichier_INI(ByVal
NomFichier








As
String,
_
ByVal
NomSection








As
String,


_
ByVal NomCle As
String,





_
ByVal Donnee As
String)





As
Boolean

' Pour enregistrer les données, on utilise la fonction
WritePrivateProfileString
' Les arguments passés à l'API Windows sont :
' Le nom de section dans le fichier INI
' Le nom de la clé où doit être enregistrer la donnée dans la
section





' La donnée a enregistrer
' Le nom du fichier INI ainsi que le répertoire dans lequel il
se
trouve

' Remarques :
' Si le fichier n'existe pas ou s'il n'est pas trouvé, il est
créé.
' Si la section n'existe pas, elle est ajoutée
' Si la clé n'existe pas, elle est également ajoutée dans la
section





désirée

Dim Test ' Déclaration d'une variable de test d'écriture
' Ecriture de la valeur dans la section et dans la clé
désirées








Test = WritePrivateProfileString(NomSection, NomCle, Donnee,
NomFichier)
Ecriture_Valeur_Cle_Fichier_INI = -Test
End Function


Gilbert



"chris" a écrit dans le message de
news:
Re
ok merci mais ce que j'aimerais c'est un exemple
ou une explication des fonctionnalités

"Gilbert" a écrit dans le message
de
news:






egC$
Bonjour,

Dans la mesure où c'est toi qui va créer le fichier .INI et
qui
va







le
le
lire, tu peux bien y organiser les données comme tu
l'entends.
Il n'y a aucune obligation d'aucune sorte.

Gilbert


"chris" a écrit dans le message de
news:
Bonjour
J'exporte des données d'une table vers un fichier texte
qui











doit
impérativement respecter un format
























Avatar
Gilbert
Précision

Pour l'avoir en français il suffit de :
StrConv(Left(MonthName(Month(Date - 1)), 3), vbUpperCase)

Le nombre de m dans la fonction Format ne correspond pas au nombre de
lettres.
m ou mm donne le mois en chiffre
mmm en abrégé
mmmm le nom complet

Gilbert

"chris" a écrit dans le message de
news:
Bonjour

Pour la date c'est ok, par contre
j'ai mis ceci :
Print #intFichier, rst.AbsolutePosition +1
et là il me dit :
erreur d'execution 3251
opération non autorisée pour ce type d'objet
voilou

j'ai essayé aussi de mettre dans un autre module
Print #intFichier, Format(Date - 1, "mmm") pour avoir les 3 premièrers
lettres du mois
cela fonctionne, mais le mois apparaît en minuscules (j'en ai besoin en
majuscules forcément) et en français (normal, mais là je suis encore
exigeant, je sais, mais j'en ai besoin en anglais (si ce dernier paramètre
n'est pas possible on le mettra manuellement))

Merci beaucoup

"Chris50" a écrit dans le message de
news:
ok j'essaye ça demain et je vous dis
Merci


Bonjour,

Pour la date de la veille tu peux utiliser :
Format(Date - 1, "ddmmyy")

et pour le numéro de l'enregistrement :
rst.AbsolutePosition +1 (la numérotation commence à 0)

Gilbert



"Chris50" a écrit dans le message
de



news:
Euh re bonjour,
J'ai encore 1 ou 2 ptits trucs à demander, car on m'a demandé de
modifier
un

peu le format

Avant le Nz(rst("NOM"), "-")
il faut mettre :
la date de la veille sous ce format : 141106 pour le 14 nov 2006
le numéro de l'enregistrement : c'est à dire que les enregistrements
soient

numérotés de 1 à 4 s'il y a 4 enregistrements (je sais po si je suis
clair)


Merci
If not rst.EOF then
Print #intFichier, "message emis du" & Nz(rst("DATE"), "-")
Print #intFichier, "par" Nz(rst("Nom agent"), "-")
Print #intFichier, "objet du message : listing du " &
Nz(rst("DATE"),
"-")




While Not rst.EOF
Print #intFichier, Nz(rst("NOM"), "-") & "-" & Nz(rst("Prenom"),
"-")
&



"-"
& Nz(rst("adresse"), "-") & "/" & Nz(rst("téléphone"), "-") & "-"
&






Nz(rst("email"), "-") & "-" & Nz(rst("télécopie"), "-")
Beep
MsgBox "Message prêt à être envoyé", vbInformation, "Fin"
' passer à l'enregistrement suivant
rst.MoveNext
Wend

Print #intFichier, "Fin de liste"
Else
MsgBox "Pas d'enregistrement"
End If





super ça fonctionne
merci infiniment, je va maintenant m'essayer au fichier ini
merci encore

"Gilbert" a écrit dans le message de
news:
eApDbhG$
Bonjour,

Il suffit de sortir de la boucle les écritures que tu ne veux
qu'une
fois.




If not rst.EOF then
Print #intFichier, "message emis du" & Nz(rst("DATE"), "-")
Print #intFichier, "par" Nz(rst("Nom agent"), "-")
Print #intFichier, "objet du message : listing du " &
Nz(rst("DATE"),
"-")




While Not rst.EOF
Print #intFichier, Nz(rst("NOM"), "-") & "-" & Nz(rst("Prenom"),
"-")
&



"-"
& Nz(rst("adresse"), "-") & "/" & Nz(rst("téléphone"), "-") & "-"
&






Nz(rst("email"), "-") & "-" & Nz(rst("télécopie"), "-")
Beep
MsgBox "Message prêt à être envoyé", vbInformation, "Fin"
' passer à l'enregistrement suivant
rst.MoveNext
Wend

Print #intFichier, "Fin de liste"
Else
MsgBox "Pas d'enregistrement"
End If


"chris" a écrit dans le message de
news:OWyoyza%
Merci beaucoup, je vais essayer ça

Pour un autre type de message préformaté (celui-ci est moins
changeant




que
l'autre), j'utilise ceci :
Function message()
Dim db As DAO.Database
Dim rst As DAO.Recordset
Dim intFichier As Long

'choisir la fiche
DoCmd.OpenQuery "ajout donnee au tampon message", acNormal,
acEdit




DoCmd.Close acQuery, "ajout donnee au tampon message"

'Ouvrir le recordset
Set db = CurrentDb()
Set rst = db.OpenRecordset("TAMPON message")

'Ouvrir le fichier texte en écriture
intFichier = FreeFile
Open "D:message.txt" For Output As intFichier

'Parcourir les champs et écrire les infos
While Not rst.EOF

Print #intFichier, "message emis du" & Nz(rst("DATE"), "-")
Print #intFichier, "par" Nz(rst("Nom agent"), "-")
Print #intFichier, "objet du message : listing du " &
Nz(rst("DATE"),
"-")
Print #intFichier, Nz(rst("NOM"), "-") & "-" & Nz(rst("Prenom"),
"-")
&




"-"
& Nz(rst("adresse"), "-") & "/" & Nz(rst("téléphone"), "-") &
"-"







&
Nz(rst("email"), "-") & "-" & Nz(rst("télécopie"), "-")
Print #intFichier, "Fin de liste"
Beep
MsgBox "Message prêt à être envoyé", vbInformation, "Fin"
' passer à l'enregistrement suivant
rst.MoveNext
Wend

'on ferme
Close intFichier
rst.Close
Set rst = Nothing
Set db = Nothing
End Function

et lorsque j'ai 2 enregistrements ou plus, il met met (logique)
les 4
lignes, comment faire une boucle pour qu'il mette 1 seule fois
les







3
premières ligne
puis autant de fois qu'il y a d'enregistrements la 4ème ligne et
1







fois
la
5ème ligne
Merci de votre aide précieuse

"Gilbert" a écrit dans le message de
news:





Tu peux faire un fichier texte tout simple

Entete
Champ1;Champ2;Champ54
Champ25;champ4
Champ5
...
Fin

Ensuite tu lis ton fichier séquentiellement
Open NomFichier For Input As #1
Do While Not EOF(1)
Texte = Input(LOF(1), 1)

Traitement.......

Loop
Close #1


Si tu tiens à utiliser un fichier .INI, voici 2 fonctions

Private Declare Function GetPrivateProfileString Lib
"kernel32"








Alias
"GetPrivateProfileStringA" (ByVal lpApplicationName As String,
ByVal





lpKeyName As Any, ByVal lpDefault As String, ByVal
lpReturnedString
As





String, ByVal nSize As Long, ByVal lpFileName As String) As
Long








Private Declare Function WritePrivateProfileString Lib
"kernel32"
Alias





"WritePrivateProfileStringA" (ByVal lpApplicationName As
String,








ByVal
lpKeyName As Any, ByVal lpString As Any, ByVal lpFileName As
String) As





Long


'Lecture de la Valeur d'une clé dans un fichier INI
Public Function Lecture_Valeur_Cle_Fichier_INI(ByVal
NomFichier








As
String,


_
ByVal NomSection
As
String,


_
ByVal NomCle As
String)





As
String
' Pour lire les données, on utilise la fonction
GetPrivateProfileString





' Les arguments passés à l'API Windows sont :
' Le nom de section dans le fichier INI
' Le nom de la clé qui doit être lue dans la section
' La valeur par défaut
' La variable dans laquelle on stocke la donnée lue
' La longueur de la chaîne de caractère
' Le nom du fichier INI ainsi que le répertoire dans lequel il
se
trouve
Dim Taille As Long ' Variable pour recevoir la
longueur
de





la
chaîne lue
Dim Donnee As String * 255 ' Variable pour recevoir la
valeur








de
la





clé

' Lecture de la clé dans la section
Taille = GetPrivateProfileString(NomSection, NomCle, "",
Donnee,








255,
NomFichier)
Lecture_Valeur_Cle_Fichier_INI = Mid(Donnee, 1, Taille)
End Function



'Ecriture de la Valeur d'une clé dans un fichier INI
Public Function Ecriture_Valeur_Cle_Fichier_INI(ByVal
NomFichier








As
String,
_
ByVal
NomSection








As
String,


_
ByVal NomCle As
String,





_
ByVal Donnee As
String)





As
Boolean

' Pour enregistrer les données, on utilise la fonction
WritePrivateProfileString
' Les arguments passés à l'API Windows sont :
' Le nom de section dans le fichier INI
' Le nom de la clé où doit être enregistrer la donnée dans la
section





' La donnée a enregistrer
' Le nom du fichier INI ainsi que le répertoire dans lequel il
se
trouve

' Remarques :
' Si le fichier n'existe pas ou s'il n'est pas trouvé, il est
créé.
' Si la section n'existe pas, elle est ajoutée
' Si la clé n'existe pas, elle est également ajoutée dans la
section





désirée

Dim Test ' Déclaration d'une variable de test d'écriture
' Ecriture de la valeur dans la section et dans la clé
désirées








Test = WritePrivateProfileString(NomSection, NomCle, Donnee,
NomFichier)
Ecriture_Valeur_Cle_Fichier_INI = -Test
End Function


Gilbert



"chris" a écrit dans le message de
news:
Re
ok merci mais ce que j'aimerais c'est un exemple
ou une explication des fonctionnalités

"Gilbert" a écrit dans le message
de
news:






egC$
Bonjour,

Dans la mesure où c'est toi qui va créer le fichier .INI et
qui
va







le
le
lire, tu peux bien y organiser les données comme tu
l'entends.
Il n'y a aucune obligation d'aucune sorte.

Gilbert


"chris" a écrit dans le message de
news:
Bonjour
J'exporte des données d'une table vers un fichier texte
qui











doit
impérativement respecter un format
























Avatar
chris
l'erreur se produit à chaque enregistrement
j'ai essayé aussi en enlevant le +1 comme ceci
Print #intFichier, rst.AbsolutePosition
et en simplifiant le fichier, c'est à dire en simplifiant le nombre de
champs et de lignes
(j'ai mis le minimun) il y a 2 enregistrements dans ma table

et c'est pareil
par contre "mettre des points d'arrets", cela ne me parle pas

Merci
"Gilbert" a écrit dans le message de news:

Bonjour,

Voici pour le mois
TonMois = Choose(Month(Date - 1), "JAN", "FEB", "MAR",
"APR","...........",
"DEC")

Pour l'erreur 3251
Est-ce que l'erreur se produit à chaque enregistrement?
As-tu essayé en mettent des points d'arrêt et en testant les valeurs?

Gilbert

"chris" a écrit dans le message de
news:
Bonjour

Pour la date c'est ok, par contre
j'ai mis ceci :
Print #intFichier, rst.AbsolutePosition +1
et là il me dit :
erreur d'execution 3251
opération non autorisée pour ce type d'objet
voilou

j'ai essayé aussi de mettre dans un autre module
Print #intFichier, Format(Date - 1, "mmm") pour avoir les 3 premièrers
lettres du mois
cela fonctionne, mais le mois apparaît en minuscules (j'en ai besoin en
majuscules forcément) et en français (normal, mais là je suis encore
exigeant, je sais, mais j'en ai besoin en anglais (si ce dernier
paramètre
n'est pas possible on le mettra manuellement))

Merci beaucoup

"Chris50" a écrit dans le message de
news:
ok j'essaye ça demain et je vous dis
Merci


Bonjour,

Pour la date de la veille tu peux utiliser :
Format(Date - 1, "ddmmyy")

et pour le numéro de l'enregistrement :
rst.AbsolutePosition +1 (la numérotation commence à 0)

Gilbert



"Chris50" a écrit dans le message
de



news:
Euh re bonjour,
J'ai encore 1 ou 2 ptits trucs à demander, car on m'a demandé de
modifier
un

peu le format

Avant le Nz(rst("NOM"), "-")
il faut mettre :
la date de la veille sous ce format : 141106 pour le 14 nov 2006
le numéro de l'enregistrement : c'est à dire que les enregistrements
soient

numérotés de 1 à 4 s'il y a 4 enregistrements (je sais po si je suis
clair)


Merci
If not rst.EOF then
Print #intFichier, "message emis du" & Nz(rst("DATE"), "-")
Print #intFichier, "par" Nz(rst("Nom agent"), "-")
Print #intFichier, "objet du message : listing du " &
Nz(rst("DATE"),
"-")




While Not rst.EOF
Print #intFichier, Nz(rst("NOM"), "-") & "-" & Nz(rst("Prenom"),
"-")
&



"-"
& Nz(rst("adresse"), "-") & "/" & Nz(rst("téléphone"), "-") &
"-"
&






Nz(rst("email"), "-") & "-" & Nz(rst("télécopie"), "-")
Beep
MsgBox "Message prêt à être envoyé", vbInformation, "Fin"
' passer à l'enregistrement suivant
rst.MoveNext
Wend

Print #intFichier, "Fin de liste"
Else
MsgBox "Pas d'enregistrement"
End If





super ça fonctionne
merci infiniment, je va maintenant m'essayer au fichier ini
merci encore

"Gilbert" a écrit dans le message de
news:
eApDbhG$
Bonjour,

Il suffit de sortir de la boucle les écritures que tu ne veux
qu'une
fois.




If not rst.EOF then
Print #intFichier, "message emis du" & Nz(rst("DATE"), "-")
Print #intFichier, "par" Nz(rst("Nom agent"), "-")
Print #intFichier, "objet du message : listing du " &
Nz(rst("DATE"),
"-")




While Not rst.EOF
Print #intFichier, Nz(rst("NOM"), "-") & "-" & Nz(rst("Prenom"),
"-")
&



"-"
& Nz(rst("adresse"), "-") & "/" & Nz(rst("téléphone"), "-") &
"-"
&






Nz(rst("email"), "-") & "-" & Nz(rst("télécopie"), "-")
Beep
MsgBox "Message prêt à être envoyé", vbInformation, "Fin"
' passer à l'enregistrement suivant
rst.MoveNext
Wend

Print #intFichier, "Fin de liste"
Else
MsgBox "Pas d'enregistrement"
End If


"chris" a écrit dans le message de
news:OWyoyza%
Merci beaucoup, je vais essayer ça

Pour un autre type de message préformaté (celui-ci est moins
changeant




que
l'autre), j'utilise ceci :
Function message()
Dim db As DAO.Database
Dim rst As DAO.Recordset
Dim intFichier As Long

'choisir la fiche
DoCmd.OpenQuery "ajout donnee au tampon message", acNormal,
acEdit




DoCmd.Close acQuery, "ajout donnee au tampon message"

'Ouvrir le recordset
Set db = CurrentDb()
Set rst = db.OpenRecordset("TAMPON message")

'Ouvrir le fichier texte en écriture
intFichier = FreeFile
Open "D:message.txt" For Output As intFichier

'Parcourir les champs et écrire les infos
While Not rst.EOF

Print #intFichier, "message emis du" & Nz(rst("DATE"), "-")
Print #intFichier, "par" Nz(rst("Nom agent"), "-")
Print #intFichier, "objet du message : listing du " &
Nz(rst("DATE"),
"-")
Print #intFichier, Nz(rst("NOM"), "-") & "-" &
Nz(rst("Prenom"),
"-")
&




"-"
& Nz(rst("adresse"), "-") & "/" & Nz(rst("téléphone"), "-") &
"-"







&
Nz(rst("email"), "-") & "-" & Nz(rst("télécopie"), "-")
Print #intFichier, "Fin de liste"
Beep
MsgBox "Message prêt à être envoyé", vbInformation, "Fin"
' passer à l'enregistrement suivant
rst.MoveNext
Wend

'on ferme
Close intFichier
rst.Close
Set rst = Nothing
Set db = Nothing
End Function

et lorsque j'ai 2 enregistrements ou plus, il met met (logique)
les 4
lignes, comment faire une boucle pour qu'il mette 1 seule fois
les







3
premières ligne
puis autant de fois qu'il y a d'enregistrements la 4ème ligne
et
1







fois
la
5ème ligne
Merci de votre aide précieuse

"Gilbert" a écrit dans le message
de
news:





Tu peux faire un fichier texte tout simple

Entete
Champ1;Champ2;Champ54
Champ25;champ4
Champ5
...
Fin

Ensuite tu lis ton fichier séquentiellement
Open NomFichier For Input As #1
Do While Not EOF(1)
Texte = Input(LOF(1), 1)

Traitement.......

Loop
Close #1


Si tu tiens à utiliser un fichier .INI, voici 2 fonctions

Private Declare Function GetPrivateProfileString Lib
"kernel32"








Alias
"GetPrivateProfileStringA" (ByVal lpApplicationName As
String,
ByVal





lpKeyName As Any, ByVal lpDefault As String, ByVal
lpReturnedString
As





String, ByVal nSize As Long, ByVal lpFileName As String) As
Long








Private Declare Function WritePrivateProfileString Lib
"kernel32"
Alias





"WritePrivateProfileStringA" (ByVal lpApplicationName As
String,








ByVal
lpKeyName As Any, ByVal lpString As Any, ByVal lpFileName As
String) As





Long


'Lecture de la Valeur d'une clé dans un fichier INI
Public Function Lecture_Valeur_Cle_Fichier_INI(ByVal
NomFichier








As
String,


_
ByVal
NomSection
As
String,


_
ByVal NomCle As
String)





As
String
' Pour lire les données, on utilise la fonction
GetPrivateProfileString





' Les arguments passés à l'API Windows sont :
' Le nom de section dans le fichier INI
' Le nom de la clé qui doit être lue dans la section
' La valeur par défaut
' La variable dans laquelle on stocke la donnée lue
' La longueur de la chaîne de caractère
' Le nom du fichier INI ainsi que le répertoire dans lequel
il
se
trouve
Dim Taille As Long ' Variable pour recevoir la
longueur
de





la
chaîne lue
Dim Donnee As String * 255 ' Variable pour recevoir la
valeur








de
la





clé

' Lecture de la clé dans la section
Taille = GetPrivateProfileString(NomSection, NomCle, "",
Donnee,








255,
NomFichier)
Lecture_Valeur_Cle_Fichier_INI = Mid(Donnee, 1, Taille)
End Function



'Ecriture de la Valeur d'une clé dans un fichier INI
Public Function Ecriture_Valeur_Cle_Fichier_INI(ByVal
NomFichier








As
String,
_
ByVal
NomSection








As
String,


_
ByVal NomCle
As
String,





_
ByVal Donnee
As
String)





As
Boolean

' Pour enregistrer les données, on utilise la fonction
WritePrivateProfileString
' Les arguments passés à l'API Windows sont :
' Le nom de section dans le fichier INI
' Le nom de la clé où doit être enregistrer la donnée dans la
section





' La donnée a enregistrer
' Le nom du fichier INI ainsi que le répertoire dans lequel
il
se
trouve

' Remarques :
' Si le fichier n'existe pas ou s'il n'est pas trouvé, il est
créé.
' Si la section n'existe pas, elle est ajoutée
' Si la clé n'existe pas, elle est également ajoutée dans la
section





désirée

Dim Test ' Déclaration d'une variable de test d'écriture
' Ecriture de la valeur dans la section et dans la clé
désirées








Test = WritePrivateProfileString(NomSection, NomCle, Donnee,
NomFichier)
Ecriture_Valeur_Cle_Fichier_INI = -Test
End Function


Gilbert



"chris" a écrit dans le message de
news:
Re
ok merci mais ce que j'aimerais c'est un exemple
ou une explication des fonctionnalités

"Gilbert" a écrit dans le
message
de
news:






egC$
Bonjour,

Dans la mesure où c'est toi qui va créer le fichier .INI
et
qui
va







le
le
lire, tu peux bien y organiser les données comme tu
l'entends.
Il n'y a aucune obligation d'aucune sorte.

Gilbert


"chris" a écrit dans le message de
news:
Bonjour
J'exporte des données d'une table vers un fichier texte
qui











doit
impérativement respecter un format




























Avatar
chris
par contre je le met comme ceci dans mon module?
: Print #intFichier, Choose(Month(Date - 1), "JAN", "FEB", "MAR",
"APR","...........",
"DEC")
où il y a une autre façon de procéder
Merci
"Gilbert" a écrit dans le message de news:

Bonjour,

Voici pour le mois
TonMois = Choose(Month(Date - 1), "JAN", "FEB", "MAR",
"APR","...........",
"DEC")

Pour l'erreur 3251
Est-ce que l'erreur se produit à chaque enregistrement?
As-tu essayé en mettent des points d'arrêt et en testant les valeurs?

Gilbert

"chris" a écrit dans le message de
news:
Bonjour

Pour la date c'est ok, par contre
j'ai mis ceci :
Print #intFichier, rst.AbsolutePosition +1
et là il me dit :
erreur d'execution 3251
opération non autorisée pour ce type d'objet
voilou

j'ai essayé aussi de mettre dans un autre module
Print #intFichier, Format(Date - 1, "mmm") pour avoir les 3 premièrers
lettres du mois
cela fonctionne, mais le mois apparaît en minuscules (j'en ai besoin en
majuscules forcément) et en français (normal, mais là je suis encore
exigeant, je sais, mais j'en ai besoin en anglais (si ce dernier
paramètre
n'est pas possible on le mettra manuellement))

Merci beaucoup

"Chris50" a écrit dans le message de
news:
ok j'essaye ça demain et je vous dis
Merci


Bonjour,

Pour la date de la veille tu peux utiliser :
Format(Date - 1, "ddmmyy")

et pour le numéro de l'enregistrement :
rst.AbsolutePosition +1 (la numérotation commence à 0)

Gilbert



"Chris50" a écrit dans le message
de



news:
Euh re bonjour,
J'ai encore 1 ou 2 ptits trucs à demander, car on m'a demandé de
modifier
un

peu le format

Avant le Nz(rst("NOM"), "-")
il faut mettre :
la date de la veille sous ce format : 141106 pour le 14 nov 2006
le numéro de l'enregistrement : c'est à dire que les enregistrements
soient

numérotés de 1 à 4 s'il y a 4 enregistrements (je sais po si je suis
clair)


Merci
If not rst.EOF then
Print #intFichier, "message emis du" & Nz(rst("DATE"), "-")
Print #intFichier, "par" Nz(rst("Nom agent"), "-")
Print #intFichier, "objet du message : listing du " &
Nz(rst("DATE"),
"-")




While Not rst.EOF
Print #intFichier, Nz(rst("NOM"), "-") & "-" & Nz(rst("Prenom"),
"-")
&



"-"
& Nz(rst("adresse"), "-") & "/" & Nz(rst("téléphone"), "-") &
"-"
&






Nz(rst("email"), "-") & "-" & Nz(rst("télécopie"), "-")
Beep
MsgBox "Message prêt à être envoyé", vbInformation, "Fin"
' passer à l'enregistrement suivant
rst.MoveNext
Wend

Print #intFichier, "Fin de liste"
Else
MsgBox "Pas d'enregistrement"
End If





super ça fonctionne
merci infiniment, je va maintenant m'essayer au fichier ini
merci encore

"Gilbert" a écrit dans le message de
news:
eApDbhG$
Bonjour,

Il suffit de sortir de la boucle les écritures que tu ne veux
qu'une
fois.




If not rst.EOF then
Print #intFichier, "message emis du" & Nz(rst("DATE"), "-")
Print #intFichier, "par" Nz(rst("Nom agent"), "-")
Print #intFichier, "objet du message : listing du " &
Nz(rst("DATE"),
"-")




While Not rst.EOF
Print #intFichier, Nz(rst("NOM"), "-") & "-" & Nz(rst("Prenom"),
"-")
&



"-"
& Nz(rst("adresse"), "-") & "/" & Nz(rst("téléphone"), "-") &
"-"
&






Nz(rst("email"), "-") & "-" & Nz(rst("télécopie"), "-")
Beep
MsgBox "Message prêt à être envoyé", vbInformation, "Fin"
' passer à l'enregistrement suivant
rst.MoveNext
Wend

Print #intFichier, "Fin de liste"
Else
MsgBox "Pas d'enregistrement"
End If


"chris" a écrit dans le message de
news:OWyoyza%
Merci beaucoup, je vais essayer ça

Pour un autre type de message préformaté (celui-ci est moins
changeant




que
l'autre), j'utilise ceci :
Function message()
Dim db As DAO.Database
Dim rst As DAO.Recordset
Dim intFichier As Long

'choisir la fiche
DoCmd.OpenQuery "ajout donnee au tampon message", acNormal,
acEdit




DoCmd.Close acQuery, "ajout donnee au tampon message"

'Ouvrir le recordset
Set db = CurrentDb()
Set rst = db.OpenRecordset("TAMPON message")

'Ouvrir le fichier texte en écriture
intFichier = FreeFile
Open "D:message.txt" For Output As intFichier

'Parcourir les champs et écrire les infos
While Not rst.EOF

Print #intFichier, "message emis du" & Nz(rst("DATE"), "-")
Print #intFichier, "par" Nz(rst("Nom agent"), "-")
Print #intFichier, "objet du message : listing du " &
Nz(rst("DATE"),
"-")
Print #intFichier, Nz(rst("NOM"), "-") & "-" &
Nz(rst("Prenom"),
"-")
&




"-"
& Nz(rst("adresse"), "-") & "/" & Nz(rst("téléphone"), "-") &
"-"







&
Nz(rst("email"), "-") & "-" & Nz(rst("télécopie"), "-")
Print #intFichier, "Fin de liste"
Beep
MsgBox "Message prêt à être envoyé", vbInformation, "Fin"
' passer à l'enregistrement suivant
rst.MoveNext
Wend

'on ferme
Close intFichier
rst.Close
Set rst = Nothing
Set db = Nothing
End Function

et lorsque j'ai 2 enregistrements ou plus, il met met (logique)
les 4
lignes, comment faire une boucle pour qu'il mette 1 seule fois
les







3
premières ligne
puis autant de fois qu'il y a d'enregistrements la 4ème ligne
et
1







fois
la
5ème ligne
Merci de votre aide précieuse

"Gilbert" a écrit dans le message
de
news:





Tu peux faire un fichier texte tout simple

Entete
Champ1;Champ2;Champ54
Champ25;champ4
Champ5
...
Fin

Ensuite tu lis ton fichier séquentiellement
Open NomFichier For Input As #1
Do While Not EOF(1)
Texte = Input(LOF(1), 1)

Traitement.......

Loop
Close #1


Si tu tiens à utiliser un fichier .INI, voici 2 fonctions

Private Declare Function GetPrivateProfileString Lib
"kernel32"








Alias
"GetPrivateProfileStringA" (ByVal lpApplicationName As
String,
ByVal





lpKeyName As Any, ByVal lpDefault As String, ByVal
lpReturnedString
As





String, ByVal nSize As Long, ByVal lpFileName As String) As
Long








Private Declare Function WritePrivateProfileString Lib
"kernel32"
Alias





"WritePrivateProfileStringA" (ByVal lpApplicationName As
String,








ByVal
lpKeyName As Any, ByVal lpString As Any, ByVal lpFileName As
String) As





Long


'Lecture de la Valeur d'une clé dans un fichier INI
Public Function Lecture_Valeur_Cle_Fichier_INI(ByVal
NomFichier








As
String,


_
ByVal
NomSection
As
String,


_
ByVal NomCle As
String)





As
String
' Pour lire les données, on utilise la fonction
GetPrivateProfileString





' Les arguments passés à l'API Windows sont :
' Le nom de section dans le fichier INI
' Le nom de la clé qui doit être lue dans la section
' La valeur par défaut
' La variable dans laquelle on stocke la donnée lue
' La longueur de la chaîne de caractère
' Le nom du fichier INI ainsi que le répertoire dans lequel
il
se
trouve
Dim Taille As Long ' Variable pour recevoir la
longueur
de





la
chaîne lue
Dim Donnee As String * 255 ' Variable pour recevoir la
valeur








de
la





clé

' Lecture de la clé dans la section
Taille = GetPrivateProfileString(NomSection, NomCle, "",
Donnee,








255,
NomFichier)
Lecture_Valeur_Cle_Fichier_INI = Mid(Donnee, 1, Taille)
End Function



'Ecriture de la Valeur d'une clé dans un fichier INI
Public Function Ecriture_Valeur_Cle_Fichier_INI(ByVal
NomFichier








As
String,
_
ByVal
NomSection








As
String,


_
ByVal NomCle
As
String,





_
ByVal Donnee
As
String)





As
Boolean

' Pour enregistrer les données, on utilise la fonction
WritePrivateProfileString
' Les arguments passés à l'API Windows sont :
' Le nom de section dans le fichier INI
' Le nom de la clé où doit être enregistrer la donnée dans la
section





' La donnée a enregistrer
' Le nom du fichier INI ainsi que le répertoire dans lequel
il
se
trouve

' Remarques :
' Si le fichier n'existe pas ou s'il n'est pas trouvé, il est
créé.
' Si la section n'existe pas, elle est ajoutée
' Si la clé n'existe pas, elle est également ajoutée dans la
section





désirée

Dim Test ' Déclaration d'une variable de test d'écriture
' Ecriture de la valeur dans la section et dans la clé
désirées








Test = WritePrivateProfileString(NomSection, NomCle, Donnee,
NomFichier)
Ecriture_Valeur_Cle_Fichier_INI = -Test
End Function


Gilbert



"chris" a écrit dans le message de
news:
Re
ok merci mais ce que j'aimerais c'est un exemple
ou une explication des fonctionnalités

"Gilbert" a écrit dans le
message
de
news:






egC$
Bonjour,

Dans la mesure où c'est toi qui va créer le fichier .INI
et
qui
va







le
le
lire, tu peux bien y organiser les données comme tu
l'entends.
Il n'y a aucune obligation d'aucune sorte.

Gilbert


"chris" a écrit dans le message de
news:
Bonjour
J'exporte des données d'une table vers un fichier texte
qui











doit
impérativement respecter un format




























Avatar
Gilbert
Oui, ça doit fonctionner comme ça.
N'oublie pas de remplacer les ...................

Gilbert

"chris" a écrit dans le message de
news:
par contre je le met comme ceci dans mon module?
: Print #intFichier, Choose(Month(Date - 1), "JAN", "FEB", "MAR",
"APR","...........",
"DEC")
où il y a une autre façon de procéder
Merci
"Gilbert" a écrit dans le message de news:

Bonjour,

Voici pour le mois
TonMois = Choose(Month(Date - 1), "JAN", "FEB", "MAR",
"APR","...........",
"DEC")

Pour l'erreur 3251
Est-ce que l'erreur se produit à chaque enregistrement?
As-tu essayé en mettent des points d'arrêt et en testant les valeurs?

Gilbert

"chris" a écrit dans le message de
news:
Bonjour

Pour la date c'est ok, par contre
j'ai mis ceci :
Print #intFichier, rst.AbsolutePosition +1
et là il me dit :
erreur d'execution 3251
opération non autorisée pour ce type d'objet
voilou

j'ai essayé aussi de mettre dans un autre module
Print #intFichier, Format(Date - 1, "mmm") pour avoir les 3 premièrers
lettres du mois
cela fonctionne, mais le mois apparaît en minuscules (j'en ai besoin en
majuscules forcément) et en français (normal, mais là je suis encore
exigeant, je sais, mais j'en ai besoin en anglais (si ce dernier
paramètre
n'est pas possible on le mettra manuellement))

Merci beaucoup

"Chris50" a écrit dans le message
de



news:
ok j'essaye ça demain et je vous dis
Merci


Bonjour,

Pour la date de la veille tu peux utiliser :
Format(Date - 1, "ddmmyy")

et pour le numéro de l'enregistrement :
rst.AbsolutePosition +1 (la numérotation commence à 0)

Gilbert



"Chris50" a écrit dans le
message





de
news:
Euh re bonjour,
J'ai encore 1 ou 2 ptits trucs à demander, car on m'a demandé de
modifier
un

peu le format

Avant le Nz(rst("NOM"), "-")
il faut mettre :
la date de la veille sous ce format : 141106 pour le 14 nov 2006
le numéro de l'enregistrement : c'est à dire que les
enregistrements






soient
numérotés de 1 à 4 s'il y a 4 enregistrements (je sais po si je
suis






clair)

Merci
If not rst.EOF then
Print #intFichier, "message emis du" & Nz(rst("DATE"), "-")
Print #intFichier, "par" Nz(rst("Nom agent"), "-")
Print #intFichier, "objet du message : listing du " &
Nz(rst("DATE"),
"-")




While Not rst.EOF
Print #intFichier, Nz(rst("NOM"), "-") & "-" &
Nz(rst("Prenom"),








"-")
&



"-"
& Nz(rst("adresse"), "-") & "/" & Nz(rst("téléphone"), "-") &
"-"
&






Nz(rst("email"), "-") & "-" & Nz(rst("télécopie"), "-")
Beep
MsgBox "Message prêt à être envoyé", vbInformation, "Fin"
' passer à l'enregistrement suivant
rst.MoveNext
Wend

Print #intFichier, "Fin de liste"
Else
MsgBox "Pas d'enregistrement"
End If





super ça fonctionne
merci infiniment, je va maintenant m'essayer au fichier ini
merci encore

"Gilbert" a écrit dans le message de
news:
eApDbhG$
Bonjour,

Il suffit de sortir de la boucle les écritures que tu ne veux
qu'une
fois.




If not rst.EOF then
Print #intFichier, "message emis du" & Nz(rst("DATE"), "-")
Print #intFichier, "par" Nz(rst("Nom agent"), "-")
Print #intFichier, "objet du message : listing du " &
Nz(rst("DATE"),
"-")




While Not rst.EOF
Print #intFichier, Nz(rst("NOM"), "-") & "-" &
Nz(rst("Prenom"),








"-")
&



"-"
& Nz(rst("adresse"), "-") & "/" & Nz(rst("téléphone"), "-") &
"-"
&






Nz(rst("email"), "-") & "-" & Nz(rst("télécopie"), "-")
Beep
MsgBox "Message prêt à être envoyé", vbInformation, "Fin"
' passer à l'enregistrement suivant
rst.MoveNext
Wend

Print #intFichier, "Fin de liste"
Else
MsgBox "Pas d'enregistrement"
End If


"chris" a écrit dans le message de
news:OWyoyza%
Merci beaucoup, je vais essayer ça

Pour un autre type de message préformaté (celui-ci est moins
changeant




que
l'autre), j'utilise ceci :
Function message()
Dim db As DAO.Database
Dim rst As DAO.Recordset
Dim intFichier As Long

'choisir la fiche
DoCmd.OpenQuery "ajout donnee au tampon message",
acNormal,









acEdit
DoCmd.Close acQuery, "ajout donnee au tampon message"

'Ouvrir le recordset
Set db = CurrentDb()
Set rst = db.OpenRecordset("TAMPON message")

'Ouvrir le fichier texte en écriture
intFichier = FreeFile
Open "D:message.txt" For Output As intFichier

'Parcourir les champs et écrire les infos
While Not rst.EOF

Print #intFichier, "message emis du" & Nz(rst("DATE"), "-")
Print #intFichier, "par" Nz(rst("Nom agent"), "-")
Print #intFichier, "objet du message : listing du " &
Nz(rst("DATE"),
"-")
Print #intFichier, Nz(rst("NOM"), "-") & "-" &
Nz(rst("Prenom"),
"-")
&




"-"
& Nz(rst("adresse"), "-") & "/" & Nz(rst("téléphone"), "-") &
"-"







&
Nz(rst("email"), "-") & "-" & Nz(rst("télécopie"), "-")
Print #intFichier, "Fin de liste"
Beep
MsgBox "Message prêt à être envoyé", vbInformation, "Fin"
' passer à l'enregistrement suivant
rst.MoveNext
Wend

'on ferme
Close intFichier
rst.Close
Set rst = Nothing
Set db = Nothing
End Function

et lorsque j'ai 2 enregistrements ou plus, il met met
(logique)









les 4
lignes, comment faire une boucle pour qu'il mette 1 seule
fois









les
3
premières ligne
puis autant de fois qu'il y a d'enregistrements la 4ème ligne
et
1







fois
la
5ème ligne
Merci de votre aide précieuse

"Gilbert" a écrit dans le message
de
news:





Tu peux faire un fichier texte tout simple

Entete
Champ1;Champ2;Champ54
Champ25;champ4
Champ5
...
Fin

Ensuite tu lis ton fichier séquentiellement
Open NomFichier For Input As #1
Do While Not EOF(1)
Texte = Input(LOF(1), 1)

Traitement.......

Loop
Close #1


Si tu tiens à utiliser un fichier .INI, voici 2 fonctions

Private Declare Function GetPrivateProfileString Lib
"kernel32"








Alias
"GetPrivateProfileStringA" (ByVal lpApplicationName As
String,
ByVal





lpKeyName As Any, ByVal lpDefault As String, ByVal
lpReturnedString
As





String, ByVal nSize As Long, ByVal lpFileName As String) As
Long








Private Declare Function WritePrivateProfileString Lib
"kernel32"
Alias





"WritePrivateProfileStringA" (ByVal lpApplicationName As
String,








ByVal
lpKeyName As Any, ByVal lpString As Any, ByVal lpFileName
As










String) As
Long


'Lecture de la Valeur d'une clé dans un fichier INI
Public Function Lecture_Valeur_Cle_Fichier_INI(ByVal
NomFichier








As
String,


_
ByVal
NomSection
As
String,


_
ByVal NomCle
As










String)
As
String
' Pour lire les données, on utilise la fonction
GetPrivateProfileString





' Les arguments passés à l'API Windows sont :
' Le nom de section dans le fichier INI
' Le nom de la clé qui doit être lue dans la section
' La valeur par défaut
' La variable dans laquelle on stocke la donnée lue
' La longueur de la chaîne de caractère
' Le nom du fichier INI ainsi que le répertoire dans lequel
il
se
trouve
Dim Taille As Long ' Variable pour recevoir la
longueur
de





la
chaîne lue
Dim Donnee As String * 255 ' Variable pour recevoir la
valeur








de
la





clé

' Lecture de la clé dans la section
Taille = GetPrivateProfileString(NomSection, NomCle, "",
Donnee,








255,
NomFichier)
Lecture_Valeur_Cle_Fichier_INI = Mid(Donnee, 1, Taille)
End Function



'Ecriture de la Valeur d'une clé dans un fichier INI
Public Function Ecriture_Valeur_Cle_Fichier_INI(ByVal
NomFichier








As
String,
_
ByVal
NomSection








As
String,


_
ByVal NomCle
As
String,





_
ByVal Donnee
As
String)





As
Boolean

' Pour enregistrer les données, on utilise la fonction
WritePrivateProfileString
' Les arguments passés à l'API Windows sont :
' Le nom de section dans le fichier INI
' Le nom de la clé où doit être enregistrer la donnée dans
la










section
' La donnée a enregistrer
' Le nom du fichier INI ainsi que le répertoire dans lequel
il
se
trouve

' Remarques :
' Si le fichier n'existe pas ou s'il n'est pas trouvé, il
est










créé.
' Si la section n'existe pas, elle est ajoutée
' Si la clé n'existe pas, elle est également ajoutée dans
la










section
désirée

Dim Test ' Déclaration d'une variable de test d'écriture
' Ecriture de la valeur dans la section et dans la clé
désirées








Test = WritePrivateProfileString(NomSection, NomCle,
Donnee,










NomFichier)
Ecriture_Valeur_Cle_Fichier_INI = -Test
End Function


Gilbert



"chris" a écrit dans le message de
news:
Re
ok merci mais ce que j'aimerais c'est un exemple
ou une explication des fonctionnalités

"Gilbert" a écrit dans le
message
de
news:






egC$
Bonjour,

Dans la mesure où c'est toi qui va créer le fichier .INI
et
qui
va







le
le
lire, tu peux bien y organiser les données comme tu
l'entends.
Il n'y a aucune obligation d'aucune sorte.

Gilbert


"chris" a écrit dans le message de
news:
Bonjour
J'exporte des données d'une table vers un fichier texte
qui











doit
impérativement respecter un format
































Avatar
Gilbert
Je ne comprends pas pourquoi.
Quelle est la version d'Access que tu utilises?
Qu'y-a t'il dans ton recordset?
Fais nous voir le code que tu utilises.

Pour mettre un point d'arrêt tu te positionne sur la ligne désirée et tu
appuies sur F9. Ensuite tu exécutes ton code. L'exécution s'arrêtera sur la
ligne et tu pourras examiner les variables (entre autres) avant de continuer
l'exécution du code.

Gilbert

"chris" a écrit dans le message de
news:uNlQ$
l'erreur se produit à chaque enregistrement
j'ai essayé aussi en enlevant le +1 comme ceci
Print #intFichier, rst.AbsolutePosition
et en simplifiant le fichier, c'est à dire en simplifiant le nombre de
champs et de lignes
(j'ai mis le minimun) il y a 2 enregistrements dans ma table

et c'est pareil
par contre "mettre des points d'arrets", cela ne me parle pas

Merci
"Gilbert" a écrit dans le message de news:

Bonjour,

Voici pour le mois
TonMois = Choose(Month(Date - 1), "JAN", "FEB", "MAR",
"APR","...........",
"DEC")

Pour l'erreur 3251
Est-ce que l'erreur se produit à chaque enregistrement?
As-tu essayé en mettent des points d'arrêt et en testant les valeurs?

Gilbert

"chris" a écrit dans le message de
news:
Bonjour

Pour la date c'est ok, par contre
j'ai mis ceci :
Print #intFichier, rst.AbsolutePosition +1
et là il me dit :
erreur d'execution 3251
opération non autorisée pour ce type d'objet
voilou

j'ai essayé aussi de mettre dans un autre module
Print #intFichier, Format(Date - 1, "mmm") pour avoir les 3 premièrers
lettres du mois
cela fonctionne, mais le mois apparaît en minuscules (j'en ai besoin en
majuscules forcément) et en français (normal, mais là je suis encore
exigeant, je sais, mais j'en ai besoin en anglais (si ce dernier
paramètre
n'est pas possible on le mettra manuellement))

Merci beaucoup

"Chris50" a écrit dans le message
de



news:
ok j'essaye ça demain et je vous dis
Merci


Bonjour,

Pour la date de la veille tu peux utiliser :
Format(Date - 1, "ddmmyy")

et pour le numéro de l'enregistrement :
rst.AbsolutePosition +1 (la numérotation commence à 0)

Gilbert



"Chris50" a écrit dans le
message





de
news:
Euh re bonjour,
J'ai encore 1 ou 2 ptits trucs à demander, car on m'a demandé de
modifier
un

peu le format

Avant le Nz(rst("NOM"), "-")
il faut mettre :
la date de la veille sous ce format : 141106 pour le 14 nov 2006
le numéro de l'enregistrement : c'est à dire que les
enregistrements






soient
numérotés de 1 à 4 s'il y a 4 enregistrements (je sais po si je
suis






clair)

Merci
If not rst.EOF then
Print #intFichier, "message emis du" & Nz(rst("DATE"), "-")
Print #intFichier, "par" Nz(rst("Nom agent"), "-")
Print #intFichier, "objet du message : listing du " &
Nz(rst("DATE"),
"-")




While Not rst.EOF
Print #intFichier, Nz(rst("NOM"), "-") & "-" &
Nz(rst("Prenom"),








"-")
&



"-"
& Nz(rst("adresse"), "-") & "/" & Nz(rst("téléphone"), "-") &
"-"
&






Nz(rst("email"), "-") & "-" & Nz(rst("télécopie"), "-")
Beep
MsgBox "Message prêt à être envoyé", vbInformation, "Fin"
' passer à l'enregistrement suivant
rst.MoveNext
Wend

Print #intFichier, "Fin de liste"
Else
MsgBox "Pas d'enregistrement"
End If





super ça fonctionne
merci infiniment, je va maintenant m'essayer au fichier ini
merci encore

"Gilbert" a écrit dans le message de
news:
eApDbhG$
Bonjour,

Il suffit de sortir de la boucle les écritures que tu ne veux
qu'une
fois.




If not rst.EOF then
Print #intFichier, "message emis du" & Nz(rst("DATE"), "-")
Print #intFichier, "par" Nz(rst("Nom agent"), "-")
Print #intFichier, "objet du message : listing du " &
Nz(rst("DATE"),
"-")




While Not rst.EOF
Print #intFichier, Nz(rst("NOM"), "-") & "-" &
Nz(rst("Prenom"),








"-")
&



"-"
& Nz(rst("adresse"), "-") & "/" & Nz(rst("téléphone"), "-") &
"-"
&






Nz(rst("email"), "-") & "-" & Nz(rst("télécopie"), "-")
Beep
MsgBox "Message prêt à être envoyé", vbInformation, "Fin"
' passer à l'enregistrement suivant
rst.MoveNext
Wend

Print #intFichier, "Fin de liste"
Else
MsgBox "Pas d'enregistrement"
End If


"chris" a écrit dans le message de
news:OWyoyza%
Merci beaucoup, je vais essayer ça

Pour un autre type de message préformaté (celui-ci est moins
changeant




que
l'autre), j'utilise ceci :
Function message()
Dim db As DAO.Database
Dim rst As DAO.Recordset
Dim intFichier As Long

'choisir la fiche
DoCmd.OpenQuery "ajout donnee au tampon message",
acNormal,









acEdit
DoCmd.Close acQuery, "ajout donnee au tampon message"

'Ouvrir le recordset
Set db = CurrentDb()
Set rst = db.OpenRecordset("TAMPON message")

'Ouvrir le fichier texte en écriture
intFichier = FreeFile
Open "D:message.txt" For Output As intFichier

'Parcourir les champs et écrire les infos
While Not rst.EOF

Print #intFichier, "message emis du" & Nz(rst("DATE"), "-")
Print #intFichier, "par" Nz(rst("Nom agent"), "-")
Print #intFichier, "objet du message : listing du " &
Nz(rst("DATE"),
"-")
Print #intFichier, Nz(rst("NOM"), "-") & "-" &
Nz(rst("Prenom"),
"-")
&




"-"
& Nz(rst("adresse"), "-") & "/" & Nz(rst("téléphone"), "-") &
"-"







&
Nz(rst("email"), "-") & "-" & Nz(rst("télécopie"), "-")
Print #intFichier, "Fin de liste"
Beep
MsgBox "Message prêt à être envoyé", vbInformation, "Fin"
' passer à l'enregistrement suivant
rst.MoveNext
Wend

'on ferme
Close intFichier
rst.Close
Set rst = Nothing
Set db = Nothing
End Function

et lorsque j'ai 2 enregistrements ou plus, il met met
(logique)









les 4
lignes, comment faire une boucle pour qu'il mette 1 seule
fois









les
3
premières ligne
puis autant de fois qu'il y a d'enregistrements la 4ème ligne
et
1







fois
la
5ème ligne
Merci de votre aide précieuse

"Gilbert" a écrit dans le message
de
news:





Tu peux faire un fichier texte tout simple

Entete
Champ1;Champ2;Champ54
Champ25;champ4
Champ5
...
Fin

Ensuite tu lis ton fichier séquentiellement
Open NomFichier For Input As #1
Do While Not EOF(1)
Texte = Input(LOF(1), 1)

Traitement.......

Loop
Close #1


Si tu tiens à utiliser un fichier .INI, voici 2 fonctions

Private Declare Function GetPrivateProfileString Lib
"kernel32"








Alias
"GetPrivateProfileStringA" (ByVal lpApplicationName As
String,
ByVal





lpKeyName As Any, ByVal lpDefault As String, ByVal
lpReturnedString
As





String, ByVal nSize As Long, ByVal lpFileName As String) As
Long








Private Declare Function WritePrivateProfileString Lib
"kernel32"
Alias





"WritePrivateProfileStringA" (ByVal lpApplicationName As
String,








ByVal
lpKeyName As Any, ByVal lpString As Any, ByVal lpFileName
As










String) As
Long


'Lecture de la Valeur d'une clé dans un fichier INI
Public Function Lecture_Valeur_Cle_Fichier_INI(ByVal
NomFichier








As
String,


_
ByVal
NomSection
As
String,


_
ByVal NomCle
As










String)
As
String
' Pour lire les données, on utilise la fonction
GetPrivateProfileString





' Les arguments passés à l'API Windows sont :
' Le nom de section dans le fichier INI
' Le nom de la clé qui doit être lue dans la section
' La valeur par défaut
' La variable dans laquelle on stocke la donnée lue
' La longueur de la chaîne de caractère
' Le nom du fichier INI ainsi que le répertoire dans lequel
il
se
trouve
Dim Taille As Long ' Variable pour recevoir la
longueur
de





la
chaîne lue
Dim Donnee As String * 255 ' Variable pour recevoir la
valeur








de
la





clé

' Lecture de la clé dans la section
Taille = GetPrivateProfileString(NomSection, NomCle, "",
Donnee,








255,
NomFichier)
Lecture_Valeur_Cle_Fichier_INI = Mid(Donnee, 1, Taille)
End Function



'Ecriture de la Valeur d'une clé dans un fichier INI
Public Function Ecriture_Valeur_Cle_Fichier_INI(ByVal
NomFichier








As
String,
_
ByVal
NomSection








As
String,


_
ByVal NomCle
As
String,





_
ByVal Donnee
As
String)





As
Boolean

' Pour enregistrer les données, on utilise la fonction
WritePrivateProfileString
' Les arguments passés à l'API Windows sont :
' Le nom de section dans le fichier INI
' Le nom de la clé où doit être enregistrer la donnée dans
la










section
' La donnée a enregistrer
' Le nom du fichier INI ainsi que le répertoire dans lequel
il
se
trouve

' Remarques :
' Si le fichier n'existe pas ou s'il n'est pas trouvé, il
est










créé.
' Si la section n'existe pas, elle est ajoutée
' Si la clé n'existe pas, elle est également ajoutée dans
la










section
désirée

Dim Test ' Déclaration d'une variable de test d'écriture
' Ecriture de la valeur dans la section et dans la clé
désirées








Test = WritePrivateProfileString(NomSection, NomCle,
Donnee,










NomFichier)
Ecriture_Valeur_Cle_Fichier_INI = -Test
End Function


Gilbert



"chris" a écrit dans le message de
news:
Re
ok merci mais ce que j'aimerais c'est un exemple
ou une explication des fonctionnalités

"Gilbert" a écrit dans le
message
de
news:






egC$
Bonjour,

Dans la mesure où c'est toi qui va créer le fichier .INI
et
qui
va







le
le
lire, tu peux bien y organiser les données comme tu
l'entends.
Il n'y a aucune obligation d'aucune sorte.

Gilbert


"chris" a écrit dans le message de
news:
Bonjour
J'exporte des données d'une table vers un fichier texte
qui











doit
impérativement respecter un format
































Avatar
Chris50
Merci, je vais essayer


Précision

Pour l'avoir en français il suffit de :
StrConv(Left(MonthName(Month(Date - 1)), 3), vbUpperCase)

Le nombre de m dans la fonction Format ne correspond pas au nombre de
lettres.
m ou mm donne le mois en chiffre
mmm en abrégé
mmmm le nom complet

Gilbert

"chris" a écrit dans le message de
news:
Bonjour

Pour la date c'est ok, par contre
j'ai mis ceci :
Print #intFichier, rst.AbsolutePosition +1
et là il me dit :
erreur d'execution 3251
opération non autorisée pour ce type d'objet
voilou

j'ai essayé aussi de mettre dans un autre module
Print #intFichier, Format(Date - 1, "mmm") pour avoir les 3 premièrers
lettres du mois
cela fonctionne, mais le mois apparaît en minuscules (j'en ai besoin en
majuscules forcément) et en français (normal, mais là je suis encore
exigeant, je sais, mais j'en ai besoin en anglais (si ce dernier paramètre
n'est pas possible on le mettra manuellement))

Merci beaucoup

"Chris50" a écrit dans le message de
news:
ok j'essaye ça demain et je vous dis
Merci


Bonjour,

Pour la date de la veille tu peux utiliser :
Format(Date - 1, "ddmmyy")

et pour le numéro de l'enregistrement :
rst.AbsolutePosition +1 (la numérotation commence à 0)

Gilbert



"Chris50" a écrit dans le message
de



news:
Euh re bonjour,
J'ai encore 1 ou 2 ptits trucs à demander, car on m'a demandé de
modifier
un

peu le format

Avant le Nz(rst("NOM"), "-")
il faut mettre :
la date de la veille sous ce format : 141106 pour le 14 nov 2006
le numéro de l'enregistrement : c'est à dire que les enregistrements
soient

numérotés de 1 à 4 s'il y a 4 enregistrements (je sais po si je suis
clair)


Merci
If not rst.EOF then
Print #intFichier, "message emis du" & Nz(rst("DATE"), "-")
Print #intFichier, "par" Nz(rst("Nom agent"), "-")
Print #intFichier, "objet du message : listing du " &
Nz(rst("DATE"),
"-")




While Not rst.EOF
Print #intFichier, Nz(rst("NOM"), "-") & "-" & Nz(rst("Prenom"),
"-")
&



"-"
& Nz(rst("adresse"), "-") & "/" & Nz(rst("téléphone"), "-") & "-"
&






Nz(rst("email"), "-") & "-" & Nz(rst("télécopie"), "-")
Beep
MsgBox "Message prêt à être envoyé", vbInformation, "Fin"
' passer à l'enregistrement suivant
rst.MoveNext
Wend

Print #intFichier, "Fin de liste"
Else
MsgBox "Pas d'enregistrement"
End If





super ça fonctionne
merci infiniment, je va maintenant m'essayer au fichier ini
merci encore

"Gilbert" a écrit dans le message de
news:
eApDbhG$
Bonjour,

Il suffit de sortir de la boucle les écritures que tu ne veux
qu'une
fois.




If not rst.EOF then
Print #intFichier, "message emis du" & Nz(rst("DATE"), "-")
Print #intFichier, "par" Nz(rst("Nom agent"), "-")
Print #intFichier, "objet du message : listing du " &
Nz(rst("DATE"),
"-")




While Not rst.EOF
Print #intFichier, Nz(rst("NOM"), "-") & "-" & Nz(rst("Prenom"),
"-")
&



"-"
& Nz(rst("adresse"), "-") & "/" & Nz(rst("téléphone"), "-") & "-"
&






Nz(rst("email"), "-") & "-" & Nz(rst("télécopie"), "-")
Beep
MsgBox "Message prêt à être envoyé", vbInformation, "Fin"
' passer à l'enregistrement suivant
rst.MoveNext
Wend

Print #intFichier, "Fin de liste"
Else
MsgBox "Pas d'enregistrement"
End If


"chris" a écrit dans le message de
news:OWyoyza%
Merci beaucoup, je vais essayer ça

Pour un autre type de message préformaté (celui-ci est moins
changeant




que
l'autre), j'utilise ceci :
Function message()
Dim db As DAO.Database
Dim rst As DAO.Recordset
Dim intFichier As Long

'choisir la fiche
DoCmd.OpenQuery "ajout donnee au tampon message", acNormal,
acEdit




DoCmd.Close acQuery, "ajout donnee au tampon message"

'Ouvrir le recordset
Set db = CurrentDb()
Set rst = db.OpenRecordset("TAMPON message")

'Ouvrir le fichier texte en écriture
intFichier = FreeFile
Open "D:message.txt" For Output As intFichier

'Parcourir les champs et écrire les infos
While Not rst.EOF

Print #intFichier, "message emis du" & Nz(rst("DATE"), "-")
Print #intFichier, "par" Nz(rst("Nom agent"), "-")
Print #intFichier, "objet du message : listing du " &
Nz(rst("DATE"),
"-")
Print #intFichier, Nz(rst("NOM"), "-") & "-" & Nz(rst("Prenom"),
"-")
&




"-"
& Nz(rst("adresse"), "-") & "/" & Nz(rst("téléphone"), "-") &
"-"







&
Nz(rst("email"), "-") & "-" & Nz(rst("télécopie"), "-")
Print #intFichier, "Fin de liste"
Beep
MsgBox "Message prêt à être envoyé", vbInformation, "Fin"
' passer à l'enregistrement suivant
rst.MoveNext
Wend

'on ferme
Close intFichier
rst.Close
Set rst = Nothing
Set db = Nothing
End Function

et lorsque j'ai 2 enregistrements ou plus, il met met (logique)
les 4
lignes, comment faire une boucle pour qu'il mette 1 seule fois
les







3
premières ligne
puis autant de fois qu'il y a d'enregistrements la 4ème ligne et
1







fois
la
5ème ligne
Merci de votre aide précieuse

"Gilbert" a écrit dans le message de
news:





Tu peux faire un fichier texte tout simple

Entete
Champ1;Champ2;Champ54
Champ25;champ4
Champ5
...
Fin

Ensuite tu lis ton fichier séquentiellement
Open NomFichier For Input As #1
Do While Not EOF(1)
Texte = Input(LOF(1), 1)

Traitement.......

Loop
Close #1


Si tu tiens à utiliser un fichier .INI, voici 2 fonctions

Private Declare Function GetPrivateProfileString Lib
"kernel32"








Alias
"GetPrivateProfileStringA" (ByVal lpApplicationName As String,
ByVal





lpKeyName As Any, ByVal lpDefault As String, ByVal
lpReturnedString
As





String, ByVal nSize As Long, ByVal lpFileName As String) As
Long








Private Declare Function WritePrivateProfileString Lib
"kernel32"
Alias





"WritePrivateProfileStringA" (ByVal lpApplicationName As
String,








ByVal
lpKeyName As Any, ByVal lpString As Any, ByVal lpFileName As
String) As





Long


'Lecture de la Valeur d'une clé dans un fichier INI
Public Function Lecture_Valeur_Cle_Fichier_INI(ByVal
NomFichier








As
String,


_
ByVal NomSection
As
String,


_
ByVal NomCle As
String)





As
String
' Pour lire les données, on utilise la fonction
GetPrivateProfileString





' Les arguments passés à l'API Windows sont :
' Le nom de section dans le fichier INI
' Le nom de la clé qui doit être lue dans la section
' La valeur par défaut
' La variable dans laquelle on stocke la donnée lue
' La longueur de la chaîne de caractère
' Le nom du fichier INI ainsi que le répertoire dans lequel il
se
trouve
Dim Taille As Long ' Variable pour recevoir la
longueur
de





la
chaîne lue
Dim Donnee As String * 255 ' Variable pour recevoir la
valeur








de
la





clé

' Lecture de la clé dans la section
Taille = GetPrivateProfileString(NomSection, NomCle, "",
Donnee,








255,
NomFichier)
Lecture_Valeur_Cle_Fichier_INI = Mid(Donnee, 1, Taille)
End Function



















Avatar
Chris
Bonjour,
alors pour la date c'est Ok
par contre pour le reste (numérotation de l'enregistrement Print
#intFichier, rst.AbsolutePosition) toujours l'erreur 3251
opération non autorisée pour ce type d'objet
voilà le code
Merci
Function message()
Dim db As DAO.Database
Dim rst As DAO.Recordset
Dim intFichier As Long

'choisir la fiche
DoCmd.OpenQuery "ajout donnee au tampon message", acNormal, acEdit
DoCmd.Close acQuery, "ajout donnee au tampon message"

'Ouvrir le recordset
Set db = CurrentDb()
Set rst = db.OpenRecordset("TAMPON message")

'Ouvrir le fichier texte en écriture
intFichier = FreeFile
Open "D:message.txt" For Output As intFichier

'Parcourir les champs et écrire les infos
If Not rst.EOF Then
Print #intFichier, "message emis du" & Nz(rst("DATE"), "-")


While Not rst.EOF
Print #intFichier, "objet du message : listing du " & Nz(rst("DATE"), "-")
Print #intFichier, Nz(rst("NOM"), "-") & "-" & Nz(rst("Prenom"), "-") &"-"
& Nz(rst("adresse"), "-") & "/" & Nz(rst("téléphone"), "-") & "-" &
Nz(rst("email"), "-") & "-" & Nz(rst("télécopie"), "-")
Print #intFichier, Choose(Month(DATE - 1), "JAN", "FEB", "MAR", "APR",
"MAY", "JUN", "JUL", "AUG", "SEP", "OCT", "NOV", "DEC")
Print #intFichier, rst.AbsolutePosition
Beep
MsgBox "Message prêt à être envoyé", vbInformation, "Fin"
' passer à l'enregistrement suivant
rst.MoveNext
Wend
Print #intFichier, "Fin de liste"
Else
MsgBox "Pas d'enregistrement"
End If
Beep
MsgBox "Message prêt à envoyer", vbInformation, "Fin"
'on ferme
Close intFichier
rst.Close
Set rst = Nothing
Set db = Nothing
End Function
Avatar
Gilbert
Bonsoir,

Je ne comprends toujours pas cette erreur.
J'ai déjà utilisé cette propriété sans jamais rencontrer d'erreur.
Quelle version d'Access utilises-tu?
As-tu fait un essai sur un autre recordset? du genre
set rst=currentdb.openrecordset("Select * from UneTable")
do while not rst.eof
debug.print rst.AbsolutePosition
rst.movenext
loop


Gilbert

"Chris" a écrit dans le message de
news:
Bonjour,
alors pour la date c'est Ok
par contre pour le reste (numérotation de l'enregistrement Print
#intFichier, rst.AbsolutePosition) toujours l'erreur 3251
opération non autorisée pour ce type d'objet
voilà le code
Merci
Function message()
Dim db As DAO.Database
Dim rst As DAO.Recordset
Dim intFichier As Long

'choisir la fiche
DoCmd.OpenQuery "ajout donnee au tampon message", acNormal, acEdit
DoCmd.Close acQuery, "ajout donnee au tampon message"

'Ouvrir le recordset
Set db = CurrentDb()
Set rst = db.OpenRecordset("TAMPON message")

'Ouvrir le fichier texte en écriture
intFichier = FreeFile
Open "D:message.txt" For Output As intFichier

'Parcourir les champs et écrire les infos
If Not rst.EOF Then
Print #intFichier, "message emis du" & Nz(rst("DATE"), "-")


While Not rst.EOF
Print #intFichier, "objet du message : listing du " & Nz(rst("DATE"),
"-")

Print #intFichier, Nz(rst("NOM"), "-") & "-" & Nz(rst("Prenom"), "-")
&"-"

& Nz(rst("adresse"), "-") & "/" & Nz(rst("téléphone"), "-") & "-" &
Nz(rst("email"), "-") & "-" & Nz(rst("télécopie"), "-")
Print #intFichier, Choose(Month(DATE - 1), "JAN", "FEB", "MAR", "APR",
"MAY", "JUN", "JUL", "AUG", "SEP", "OCT", "NOV", "DEC")
Print #intFichier, rst.AbsolutePosition
Beep
MsgBox "Message prêt à être envoyé", vbInformation, "Fin"
' passer à l'enregistrement suivant
rst.MoveNext
Wend
Print #intFichier, "Fin de liste"
Else
MsgBox "Pas d'enregistrement"
End If
Beep
MsgBox "Message prêt à envoyer", vbInformation, "Fin"
'on ferme
Close intFichier
rst.Close
Set rst = Nothing
Set db = Nothing
End Function




Avatar
Chris
je vais essayer ce soir ce que tu préconise
Tu ne vois pas d'erreur dans mon code?
J'utilise Access 2000
j'ai essayé le point d'arrêt, et c'est bien à cet endroit que ça buggue
quand je passe la souris sur la ligne il met dit :
<rst.AbsolutePosition=opération non autorisée pour ce type d'objet>
voilà
Merci
"Gilbert" a écrit dans le message de news:

Bonsoir,

Je ne comprends toujours pas cette erreur.
J'ai déjà utilisé cette propriété sans jamais rencontrer d'erreur.
Quelle version d'Access utilises-tu?
As-tu fait un essai sur un autre recordset? du genre
set rst=currentdb.openrecordset("Select * from UneTable")
do while not rst.eof
debug.print rst.AbsolutePosition
rst.movenext
loop


Gilbert

"Chris" a écrit dans le message de
news:
Bonjour,
alors pour la date c'est Ok
par contre pour le reste (numérotation de l'enregistrement Print
#intFichier, rst.AbsolutePosition) toujours l'erreur 3251
opération non autorisée pour ce type d'objet
voilà le code
Merci
Function message()
Dim db As DAO.Database
Dim rst As DAO.Recordset
Dim intFichier As Long

'choisir la fiche
DoCmd.OpenQuery "ajout donnee au tampon message", acNormal, acEdit
DoCmd.Close acQuery, "ajout donnee au tampon message"

'Ouvrir le recordset
Set db = CurrentDb()
Set rst = db.OpenRecordset("TAMPON message")

'Ouvrir le fichier texte en écriture
intFichier = FreeFile
Open "D:message.txt" For Output As intFichier

'Parcourir les champs et écrire les infos
If Not rst.EOF Then
Print #intFichier, "message emis du" & Nz(rst("DATE"), "-")


While Not rst.EOF
Print #intFichier, "objet du message : listing du " & Nz(rst("DATE"),
"-")

Print #intFichier, Nz(rst("NOM"), "-") & "-" & Nz(rst("Prenom"), "-")
&"-"

& Nz(rst("adresse"), "-") & "/" & Nz(rst("téléphone"), "-") & "-" &
Nz(rst("email"), "-") & "-" & Nz(rst("télécopie"), "-")
Print #intFichier, Choose(Month(DATE - 1), "JAN", "FEB", "MAR", "APR",
"MAY", "JUN", "JUL", "AUG", "SEP", "OCT", "NOV", "DEC")
Print #intFichier, rst.AbsolutePosition
Beep
MsgBox "Message prêt à être envoyé", vbInformation, "Fin"
' passer à l'enregistrement suivant
rst.MoveNext
Wend
Print #intFichier, "Fin de liste"
Else
MsgBox "Pas d'enregistrement"
End If
Beep
MsgBox "Message prêt à envoyer", vbInformation, "Fin"
'on ferme
Close intFichier
rst.Close
Set rst = Nothing
Set db = Nothing
End Function








1 2 3