Dupliquer un Template RTF

Erenion Messages postés 3 Date d'inscription mardi 8 juin 2004 Statut Membre Dernière intervention 21 juillet 2005 - 20 juil. 2005 à 20:03
Erenion Messages postés 3 Date d'inscription mardi 8 juin 2004 Statut Membre Dernière intervention 21 juillet 2005 - 21 juil. 2005 à 20:17
Bonjour à tous



Je vous expose brièvement ce que je souhaite faire :



J'ai crée un template RTF, qui contient des champs (bookmarks) que je
fusionne avec des valeurs se trouvant dans une base de données.

Par exemple : dans le fichier RTF j'ai "NOM"

Ma requete en base de données me ramenne la Valeur DUPOND

Apres fusion Mon document RTF, se compose Alors d'une page ou "NOM" est remplacé par exemple par DUPOND

Ceci fonctionne très bien.



J'aimerai généralisé se processus à n Contactes

C'est à dire que si j'ai 3 contactes, mon document finale se compose de
3 pages ou chacune des pages contient respectivement le nom de chaque
contacte.



En résumé je cherche une solution simple et fiable pour arriver à dupliquer le template.

ou sinon connaissez vous un prog en VB capable de parser du code RTF?



Merci d'avance pour vos réponses :)

4 réponses

cs_Jack Messages postés 14007 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 78
21 juil. 2005 à 00:41
Salut
Je connais pas les techniques des Templates, mais il suffit de répéter 3 fois la même manip à partir d'un fichier Template vierge à chaque fois.
Donc ton problème est en réalité de faire défiler les 3 (ou X) noms renvoyés par ta requète sur la base de données.
Ne sachant pas comment tu as opéré, difficile de tout t'écrire ici.
Inspire toi des sources de ce site et intéresse toi aux objets RecordSet et faire une boucle du style :
monRecordSet.MoveFirst
While Not monRecordSet.EOF
' Les lignes qui permettent de faire ton insertion en utilisant comme nom : monRecordSet!NomDB
' où NomDB correspond au nom du champ dans ta DB
monRecordSet.MoveNext
Loop

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage. (Socrate)
(je
0
Erenion Messages postés 3 Date d'inscription mardi 8 juin 2004 Statut Membre Dernière intervention 21 juillet 2005
21 juil. 2005 à 12:40
Merci pour ta réponse rapide

J'entends par template : modèle de document. Dans mon cas il s'agit simplement d'un fichier rtf, contenant un bookmark "NOM"



Si on ouvre le fichier rtf avec blocnote on voit un code de ce genre :

{rtf1 \..........\pard\plain \...{ "NOM" }....}



I) Cas pour un seul contact

Donc le programme vb

1) Récupere le code rtf

sRtfCode = {rtf1 \..........\pard\plain \...{ "NOM" }....}



2) Récupere les valeurs en bdd

Value(0) = "DUPOND"

Bookmark(0) = "NOM"



3)Remplace dans la chaine RTF, le bookmark par sa value



REPLACE( sRtfCode, Bookmark(0),Value(0))



> sRtfCode {rtf1 \..........\pard\plain \...{ DUPOND }....}

j'inscrit ensuite le code rtf dans un fichier texte



II) Cas pour N contactes

si j'ai plusieurs value a ramener il faudrait que la chaine RTF soit modifiée au fur et à mesure que je fusionne les contactes.



Par exemple

Value(0) = "DUPOND"

Value(1) = "DUPOND2"

Value(3) = "DUPOND3"

Bookmark(0) = "NOM"

Au depart sRtfCode = {rtf1 \..........\pard\plain \...{ "NOM" }....}



Je fusionne le Premier contacte :

sRtfCode =>{rtf1 \..........\pard\plain \...{ DUPOND1 ...."Nom"}....}



Je fusionne le deuxieme contacte

sRtfCode =>{rtf1 \..........\pard\plain \...{ DUPOND1 ....DUPOND2...."NOM."}....}



Je fusionne le dernier contacte

sRtfCode => {rtf1 \..........\pard\plain \...{ DUPOND ....DUPOND2....DUPOND3."}....}
0
cs_Jack Messages postés 14007 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 78
21 juil. 2005 à 15:03
re
J'ai bien compris le principe, mais ce que tu n'as pas saisi, c'est qu'il fallait recharger le rtf original avant de faire chaque remplacement :
- Charge le rtf original
- remplace NOM
- sauve le nouveau dans une chaine
- Recharge le rtf original
- remplace NOM
- ajoute le rtf modifié au précédent (ChaineSauvée = ChaineSauvée & DernièreChaineModifiée)
- Recharge le rtf original
- remplace NOM
- ajoute le rtf modifié au précédent (ChaineSauvée = ChaineSauvée & DernièreChaineModifiée)
...
Seul doute : Un fichier rtf possède des codes d'entête (avec la définition des fontes utilisées dans le document) : à mon avis, on ne peut pas concaténer deux fichiers rtf comme ça. Il va falloir travailler sur la structure du rtf, bon courage !

D'autre part, méfie toi des mots trop courts : Comme tu lis le fichier rtf avec toute sa structure, il y a fort à parier que le texte NOM apparait ailleurs : Choisis des noms de balise|bookmark plus complexes, par exemple : {"NOM_A_REMPLACER"}
Comme ça, plus de possibilité de mélange.

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage. (Socrate)
(je
0
Erenion Messages postés 3 Date d'inscription mardi 8 juin 2004 Statut Membre Dernière intervention 21 juillet 2005
21 juil. 2005 à 20:17
J'ai concaténé le code rtf chargé au départ autant
de fois que j'ai de contactes à fusionner, en prenant soin pour
les n-1 contactes d'enlever la derniere "}" et de rajouter au nieme
contacte autant de "}" qu'il y'a de contactes



Je charge la chaine une seule fois et apres je fais du traitement sur cette chaine

dans le meme esprit que ce que tu as expliqué plus haut



ChaineSauvée = ChaineSauvée & DernièreChaineModifiée




ça donne un truc dans ce genre

chaine de départ : {rtf1 \..........\pard\plain \...{ "NOM" }....}}



chaine à l'arrivée




{rtf1 \..........\pard\plain \...{ DUPOND1 }....} \page


{rtf1 \..........\pard\plain \...{ DUPOND2 }....} \page


{rtf1 \..........\pard\plain \...{ DUPOND3} ....} \page


{rtf1 \..........\pard\plain \...{DUPOND4}.... }}}}






Merci pour ton aide :)
0