PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2024 → ole pilotage word
ole pilotage word
Débuté par Fabienne CAMILLA ( g, 15 nov. 2016 17:35 - 19 réponses
Membre enregistré
2 messages
Posté le 15 novembre 2016 - 17:35
Bonjour ,

je souhaiterai cocher par programmation des cases à cocher que j'ai paramétré dans un document word.

j'ai essayé d'utiliser ceci

Word>>FormFields(1)>>CheckBox>>value=1

mais j'ai un message d'erreur

quelqu'un a une idée ?
Posté le 15 novembre 2016 - 17:44
Bonjour
Le bout de code complet peut être?
Le message d'erreur?

Merci
Membre enregistré
2 messages
Posté le 15 novembre 2016 - 18:08
j'ai trouvé et cela fonctionne !

Word>>ActiveDocument>>FormFields(1)>>CheckBox>>value=1
Membre enregistré
23 messages
Posté le 24 février 2017 - 17:34
Bonjour,
voila mon probleme :
j'ai un fichier word avec des champs predefinis, je voudrais a partir de windev remplacer ces champrs par des valeurs.
exemple pour remplacer le champ "champ1" par la valeur "valeur_a_mettre":
doc1=OleWord>>Documents>>Open("c:\conv\D-SME-16069-V1.docx",False,False)
doc1>>selection>>replace ( "$champ1$","valeur_a_mettre" )
message d'erreur sur la ligne replace :
Vous accédez au membre Automation selection.
Erreur 80020006, Nom inconnu
qui peut m'aider?

--
MAP
Membre enregistré
68 messages
Popularité : +2 (2 votes)
Posté le 27 février 2017 - 11:22
Bonjour :

si dans ton fichier word tu cherche a modifier une balise ville nommée (MDS_cpville)
par la contenu de ta variable sMdscpville il suffit de faire :

word>>Selection>>Find>>Execute("MDS_cpville")
word>>selection>>Typetext (sMdscpville)
Membre enregistré
23 messages
Posté le 27 février 2017 - 12:20
Bonjour,
excuse moi mais je ne sais pas ce que tu appelles une balise.
en fait, dans word, je suis alle dans "quickpart", "champ", "inserer un champ", et comme type de champ c'est un champ de type "variabledoc"
visiblement c'est ce qui cloche

--
MAP
Membre enregistré
23 messages
Posté le 27 février 2017 - 12:45
voila mon code complet pour le test :
LOCAL
WdFindContinue est un entier = 1
WdReplaceAll est un entier = 1

QUAND EXCEPTION DANS
// Déclaration d'un objet automation
OleWord est un objet Automation dynamique
OleWord=allouer un objet Automation "Word.Application"
doc1 est un objet Automation dynamique
FAIRE
RENVOYER Faux
SINON
OleWord>>Visible=False
OleWord>>ScreenUpdating=False
doc1=OleWord>>Documents>>Open("c:\conv\test.docx",False,False)
doc1>>Selection>>Find>>Execute("champ1")
doc1>>selection>>Typetext ("essai")
doc1>>Close()
OleWord>>Quit()
libérer doc1
libérer OleWord
RENVOYER Vrai
FIN


voila mon code erreur complet :

Erreur à la ligne 24 du traitement Clic sur Bouton1.
Vous accédez au membre Automation Selection.
Erreur 80020006, Nom inconnu

----- Informations techniques -----

Projet : GesMap

Appel WL :
Traitement de 'Clic sur Bouton1' (pilotword.Bouton1), ligne 24, thread 0

Que s'est-il passé ?
Vous accédez au membre Automation Selection.
Erreur 80020006, Nom inconnu

Code erreur : 2208
Niveau : erreur fatale

Dump de l'erreur du module 'wd220vm64.dll' (22.0.122.5).
Identifiant des informations détaillées (.err) : 130004
Informations supplémentaires :
EIT_PILEWL :

--
MAP
Membre enregistré
23 messages
Posté le 27 février 2017 - 13:02
pour info, j'utilise word 2016

--
MAP
Membre enregistré
68 messages
Popularité : +2 (2 votes)
Posté le 27 février 2017 - 14:06
ce que j'appelle une balise c'est un mot quelconque dans le word que tu veux remplacer. Dans mon cas dans le word il y avait la balise(=le mot) "MDS_cpville" de renseigner 2 fois. C'est ce mot qui sera remplacé par le vrai nom de ville contenu dans la variable sMdscpville. Pa besoin de champs variabledoc.

Toi ta fonction recherche le mot "champ1" pour le remplacer par "essai"

Par contre ta syntaxe 'ouverture de word me semble curieuse, essaye ca plutot :

OleWord est un objet Automation dynamique
OleWord = allouer un objet Automation "Word.application"
OleWord >>Documents>>Open("c:\conv\test.docx")

j'ai pas compris l'utilité des 2 objets Automation dynamique
Membre enregistré
23 messages
Posté le 27 février 2017 - 14:20
maintenant ca fonctionne.
Merci beaucoup de ton aide

--
MAP
Membre enregistré
23 messages
Posté le 27 février 2017 - 14:21
si tu ne trouves pas que j'abuse, puis-je te demander aussi la chose suivante :
comment inserer une image?
meme processus?

--
MAP
Membre enregistré
23 messages
Posté le 27 février 2017 - 15:01
un probleme secondaire :
en fait quand les mots a remplacer sont dans un entete ou un pied de page, cela ne fonctionne pas, cela met en debut de document la nouvelle version du texte

--
MAP
Posté le 27 février 2017 - 15:19
Bonjour,

fais une recherche sur ce forum...

de mémoire, il faut d'abord lsiter les zones, puis faire un remplacement
dans chaque zone

Cordialement


--
Fabrice Harari
Consultant WinDev, WebDev et WinDev Mobile International

A votre disposition : WXShowroom.com, WXReplication (open source) et
maintenant WXEDM (open source)

Plus d'information sur http://fabriceharari.com


Le 2/27/2017 à 9:01 AM, Manuel ANTOLIN a écrit :
un probleme secondaire :
en fait quand les mots a remplacer sont dans un entete ou un pied de
page, cela ne fonctionne pas, cela met en debut de document la nouvelle
version du texte

--
MAP
Membre enregistré
23 messages
Posté le 27 février 2017 - 15:29
je n'ai trouve nulle part comment les lister justement, et aussi bien ici que sur le site microsoft (le foutoir) ce n'est pas precise

--
MAP
Membre enregistré
68 messages
Popularité : +2 (2 votes)
Posté le 27 février 2017 - 17:12
Je n'ai pas eu a modifier les en-têtes et pieds de page n a ajouter d'image, je ne connais pas encore le process désolé. Par contre quand tu auras trouvé, je suis preneur si jamais l'envie te dis de poster la manip ici ... ;-)
Posté le 27 février 2017 - 20:11
Comme je le disais précédemment, la réponse EST dans ce forum...

Le 2/27/2017 à 11:12 AM, NoName a écrit :
Je n'ai pas eu a modifier les en-têtes et pieds de page n a ajouter
d'image, je ne connais pas encore le process désolé. Par contre quand tu
auras trouvé, je suis preneur si jamais l'envie te dis de poster la
manip ici ... ;-)
Membre enregistré
962 messages
Popularité : +183 (185 votes)
Posté le 27 février 2017 - 23:47
hello,
regarde par ici : https://forum.pcsoft.fr/fr-FR/pcsoft.fr.windev/98868-rewordselectionfindexecute-137932/read.awp
et l'utilisation de signets serait sans doute plus performante pour le remplacement de champs.

--
Ami calmant, J.P
Message modifié, 27 février 2017 - 23:48
Membre enregistré
23 messages
Posté le 28 février 2017 - 10:32
bonjour,
j'ai essaye aussi cette solution, mais certaines choses ne passent pas, je ne sais pas si c'est du a office 16 ou a windev22 bien que je pense que c'est un probleme OLE.
en plus je ne trouve nulle part les syntaxes OLE, et du coup ca devienyt tres complique pour moi
ActivePane>>View>>SeekView -> ne fonctionne pas et fait une erreur (ne reconnait pas activepane)
mystoryRange>>Find>>Execute(sChRecherche,Faux,Vrai,Faux,Faux,Faux,Vrai,1,Faux,sChRemplace,2) ne change rien.

En fait, le probleme est que maintenant je parviens a changer dans le corps, mais rien a faire dans l'entete ou le bas de page

--
MAP
Membre enregistré
23 messages
Posté le 28 février 2017 - 10:35
Fabrice,
il est clair que si je trouve comment changer dans les entetes et le pied de page ainsi que l'insertion d'images, je posterai.
C'est curieux que pcsoft ne nous aide pas vraiment la dessus
j'esêrais beaucoup justement avec leur module TTX mais pour le moment il est a eviter, on ne peut rien faire avec

--
MAP
Posté le 01 mars 2017 - 14:32
Bonjour,

Cet exemple fonctionne correctement dans mon programme.


PROCEDURE cWord::SeekView(nEtatView=0, bSeek=Vrai)

// pour éviter que Word se mette en erreur
QUAND EXCEPTION DANS
:m_xWord>>ActiveWindow>>View>>SeekView=nEtatView
FAIRE
bSeek=Faux
RETOUR
FIN



Valeur pour le nEtatView

//wdSeekCurrentPageFooter = 10
//wdSeekCurrentPageHeader = 9
//wdSeekEndnotes =8
//wdSeekEvenPagesFooter = 6
//wdSeekEvenPagesHeader = 3
//wdSeekFirstPageFooter = 5
//wdSeekFirstPageHeader = 2
//wdSeekFootnotes = 7
//wdSeekMainDocument = 0
//wdSeekPrimaryFooter = 4
//wdSeekPrimaryHeader = 1


Cordialement,

E. Rossi