Création dynamique d'un document word à partir d'un formulaire

Résolu
misstickrii Messages postés 12 Date d'inscription jeudi 12 novembre 2009 Statut Membre Dernière intervention 20 novembre 2009 - 12 nov. 2009 à 14:24
misstickrii Messages postés 12 Date d'inscription jeudi 12 novembre 2009 Statut Membre Dernière intervention 20 novembre 2009 - 16 nov. 2009 à 11:21
Bonjour,

Je souhaite créer un document word de manière dynamique en me basant sur un modèle de document et sur les données d'un formulaire.

Ce modèle contient des signets et la valeur de ces signets doit être affichée à plusieurs endroits différents.

Pour cela j'ai créé des signets et des renvoi vers ces signets aux endroits ou je souhaite les afficher. Ensuite je récupère le texte par programmation pour l'insérer dans un autre document. le problème c'est que le texte récupéré ne contient pas les valeurs des signets (aux endroits ou j'y fait référence).

Y a t-il un moyen pour récupérer les références aux signets et forcer l'insertion du texte au niveau de ces références?

J'espère que j'ai été claire.

Merci pour votre aide

8 réponses

cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
13 nov. 2009 à 18:13
Après avoir consulté l'aide de Word, j'en arrive à ça.
    Dim aField As Field
    Dim myRange As Range
    Set myRange = ActiveDocument.Range(Start:=0, End:=Selection.End)
    For Each aField In myRange.Fields
        Debug.Print aField.Code, aField.Code.Start, aField.Code.End
    Next
3
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
13 nov. 2009 à 14:09
Salut
lol : voilà 30 minutes que je buche sur ton problème qui semble bien épineux.
J'ai commencé à te répondre avec ce qui suit, mais je pense qu'il y a un problème de compréhension :
Ne confonds-tu pas les Signets avec les Champs ?
Après découverte de ce petit monde, pour moi, un Signet est un simple emplacement, permettant de ce déplacer rapidement de Signet en Signet.
Si maintenant tu veux insérer le contenu d'un champ à cet endroit, la réponse que j'ai commencé à faire ci-dessous pourra peut-être te répondre.
Ca m'a l'air bien obscure, tout ça ...
A+


Dans l'aide de Word, ils suggèrent d'utiliser ce format de définition :
{ SET monSignet "Bonjour Codes-Sources"}
et ce format d'insertion
{ REF monSignet }
les {} étant générés par Ctrl-F9
Bien entendu, il faut faire un rafraichissement après coup (F9)

Une fois que les signets sont définis, pour récupérer son contenu :
With Bookmarks("monSignet")
MsgBox ActiveDocument.Range(.Start, .End)
End With

Pour le modifier, en revanche, tu as raison, c'est une autre paire de manche !
J'ai tenté cette enregistrement de macro.
Il semble qu'on ne puisse pas accéder à l'objet Signet (Bookmark), mais qu'il faille redéfinir celui-ci.
Selection.Fields.Add Range:=Selection.Range, Type:=wdFieldEmpty, Text:= _
"SET Toto ""Darla di radada"" ", PreserveFormatting:=True

Découverte :
Dans les { et }, on définit des Champs.
Pour que ce champ devienne un signet, il faut de positionner juste avant le } final et "insérer un signet" : il se matérialise par un I grisâtre.
0
misstickrii Messages postés 12 Date d'inscription jeudi 12 novembre 2009 Statut Membre Dernière intervention 20 novembre 2009
13 nov. 2009 à 16:24
Merci d'avoir pris le temps de bucher sur mon pb ! C'est vrai qu'il est épineux et je récupère un projet déjà entamé donc difficile de changer la manière de traiter les choses vu le laps de temps court dont je bénéficie.

Tu a raison c'est des champs dont je parle. Je m'y connais pas des masse en VBA

le code de ce champs dans mon document se présente ainsi : {REF MonSignet \h \* MERGEFORMAT}

Dans le code que tu as donné pour la modification (ou du moins la redéfinition du signet), cette partie là : Text:= _
"SET Toto ""Darla di radada"" elle fait quoi exactement?

Merci
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
13 nov. 2009 à 16:32
lol, oui, j'ai fait plusieurs essais et pas collé le bon :
Text:= "SET Toto ""Darla di radada"" "
Dans cette ligne :
Toto = monSignet (ou plutôt le nom de mon champ)
"Darla di radada" qui est le texte qu'il représente.
Tu noteras que ce texte est à mettre entre " à l'intérieur de la zone.
Lorsque tu retrouves ce texte dans une chaine représentant ce texte, tu trouves des doubles " qui signifient qu'il faut insérer un seul " à l'intérieur de la chaine (elle même délimitée par des ")
Exemple :
"Toto ""Codes-Source"""
donnera :
Toto "Codes-Source"

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)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
13 nov. 2009 à 16:36
Donc, si toi tu veux insérer un texte issu d'une variable :
Text:= "SET Toto """ & maVariableString & """"

A noter : Si cette variable représente une valeur numérique, pas la peine de mettres des " :
Text:= "SET Toto 18.12"
donc
Text:= "SET Toto " & CStr(maVariableNumérique)
0
misstickrii Messages postés 12 Date d'inscription jeudi 12 novembre 2009 Statut Membre Dernière intervention 20 novembre 2009
13 nov. 2009 à 16:55
Ok j'ai compris.

Question : comment dans mon code je peux récupérer l'endroit ou je veux mettre le texte du champ?

Je m'explique mon signet se trouve à un certain endroit. A un autre endroit du document, j'ai un champ qui affiche aussi la valeur de ce signet (dont le code est {REF MonSignet \h \* MERGEFORMAT} )

Je souhaite récupérer non pas l'endroit ou ce trouve le signet mais l'endroit ou on fait référence à ce signet. Est-ce possible?
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
13 nov. 2009 à 18:14
PS : La fenêtre de debug (dans laquelle s'affiche le résultat) s'ouvre avec Ctrl-G
0
misstickrii Messages postés 12 Date d'inscription jeudi 12 novembre 2009 Statut Membre Dernière intervention 20 novembre 2009
16 nov. 2009 à 11:21
Merci beaucoup!!!!

ton code m'a beaucoup aidée!
0
Rejoignez-nous