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,

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
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?




Avatar
chris
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
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?








Avatar
Gilbert
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
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?












Avatar
chris
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
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?
















Avatar
Gilbert
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
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?




















Avatar
chris
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
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?
























Avatar
Chris50
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
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?





























Avatar
Gilbert
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
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?































Avatar
Chris50
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
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




















1 2 3