J'utilise le vbscript pour créer des utilisateurs sur un domaine windows.
Je voudrais pouvoir faire une fusion de document, c'est à dire depuis
mon script appeler word en lui passant des paramètres qui seront placés
à certaines positions d'un document maître.
Je pense qu'il va falloir que j'écrive un script vba qui traitera les
données passées par mon vbs.
Je n'y connais rien en vba, qui pourrait m'aider ou me donner quelques
adresses qui me dépanneraient?
Merci
Utilisez la forme exacte de la méthode VBA avec ses parenthèses objet.méthode(arg1,arg2,arg3) au besoin en omettant les arguments facultatifs objet.méthode(arg1,,arg3)
N'utilisez pas les constantes non référencées dans VBS !!! exemple argument Replace:=wdReplaceAll Comment VBS peut-il compiler wdReplaceAll ???? wdReplaceAll est égal à 2 (facile à retrouver dans vba) donc utilisez l'argument 2
Le moteur c'est l'application Word. VBS ne fait rien que piloter. Vous devez écrire et tester votre programme dans Word. Ensuite la transposition dans VBS n'est guère compliquée. Si ça vous gonfle de faire la réécriture le plus simple est de lancer la macro vba toute faite dans Word depuis votre script (le script ouvre un document qui contient la macro puis fait exécuter cette macro)
Merci pour votre aide. Effectivement une macro autorun intégrée au document simplifierait pas mal l'écriture du script sauf que je ne vois pas comment je pourrais passer des arguments (variables de remplacement) à word qui les passerait à la macro. La solution me parait être de commander word à partir de mon vbs. Je continue à fouiller ça et je reviendrai vous donner des nouvelles. merci encore
Bonjour !
'Youri Ligotmi' nous a écrit ...
Je précise qu'il s'agit d'un vbs et pas d'un vba
Utilisez la forme exacte de la méthode VBA avec ses parenthèses
objet.méthode(arg1,arg2,arg3)
au besoin en omettant les arguments facultatifs objet.méthode(arg1,,arg3)
N'utilisez pas les constantes non référencées dans VBS !!!
exemple argument Replace:=wdReplaceAll
Comment VBS peut-il compiler wdReplaceAll ????
wdReplaceAll est égal à 2 (facile à retrouver dans vba)
donc utilisez l'argument 2
Le moteur c'est l'application Word. VBS ne fait rien que piloter.
Vous devez écrire et tester votre programme dans Word.
Ensuite la transposition dans VBS n'est guère compliquée. Si ça vous gonfle
de faire la réécriture le plus simple est de lancer la macro vba
toute faite dans Word depuis votre script (le script ouvre un document
qui contient la macro puis fait exécuter cette macro)
Merci pour votre aide. Effectivement une macro autorun intégrée au
document simplifierait pas mal l'écriture du script sauf que je ne vois
pas comment je pourrais passer des arguments (variables de remplacement)
à word qui les passerait à la macro.
La solution me parait être de commander word à partir de mon vbs. Je
continue à fouiller ça et je reviendrai vous donner des nouvelles.
merci encore
Utilisez la forme exacte de la méthode VBA avec ses parenthèses objet.méthode(arg1,arg2,arg3) au besoin en omettant les arguments facultatifs objet.méthode(arg1,,arg3)
N'utilisez pas les constantes non référencées dans VBS !!! exemple argument Replace:=wdReplaceAll Comment VBS peut-il compiler wdReplaceAll ???? wdReplaceAll est égal à 2 (facile à retrouver dans vba) donc utilisez l'argument 2
Le moteur c'est l'application Word. VBS ne fait rien que piloter. Vous devez écrire et tester votre programme dans Word. Ensuite la transposition dans VBS n'est guère compliquée. Si ça vous gonfle de faire la réécriture le plus simple est de lancer la macro vba toute faite dans Word depuis votre script (le script ouvre un document qui contient la macro puis fait exécuter cette macro)
Merci pour votre aide. Effectivement une macro autorun intégrée au document simplifierait pas mal l'écriture du script sauf que je ne vois pas comment je pourrais passer des arguments (variables de remplacement) à word qui les passerait à la macro. La solution me parait être de commander word à partir de mon vbs. Je continue à fouiller ça et je reviendrai vous donner des nouvelles. merci encore
Anacoluthe
Bonjour !
'Youri Ligotmi' nous a écrit ...
Merci pour votre aide. Effectivement une macro autorun intégrée au document simplifierait pas mal l'écriture du script sauf que je ne vois pas comment je pourrais passer des arguments (variables de remplacement) à word qui les passerait à la macro.
Une macro est effectivement par définition une procédure sans argument : Sub maMacro() Mais une procédure VBA peut avoir des arguments : Sub maProc(A As String, B as String, C as Integer) Vous pouvez exécuter en automation la procédure en passant des arguments : monApplication.Run("maProc","Toto","Tata",3)
Anacoluthe « La connaissance des mots conduit à la connaissance des choses. » - PLATON
Bonjour !
'Youri Ligotmi' nous a écrit ...
Merci pour votre aide. Effectivement une macro autorun intégrée au
document simplifierait pas mal l'écriture du script sauf que je ne vois
pas comment je pourrais passer des arguments (variables de remplacement)
à word qui les passerait à la macro.
Une macro est effectivement par définition une procédure sans argument :
Sub maMacro()
Mais une procédure VBA peut avoir des arguments :
Sub maProc(A As String, B as String, C as Integer)
Vous pouvez exécuter en automation la procédure en passant des arguments :
monApplication.Run("maProc","Toto","Tata",3)
Anacoluthe
« La connaissance des mots conduit à la connaissance des choses. »
- PLATON
Merci pour votre aide. Effectivement une macro autorun intégrée au document simplifierait pas mal l'écriture du script sauf que je ne vois pas comment je pourrais passer des arguments (variables de remplacement) à word qui les passerait à la macro.
Une macro est effectivement par définition une procédure sans argument : Sub maMacro() Mais une procédure VBA peut avoir des arguments : Sub maProc(A As String, B as String, C as Integer) Vous pouvez exécuter en automation la procédure en passant des arguments : monApplication.Run("maProc","Toto","Tata",3)
Anacoluthe « La connaissance des mots conduit à la connaissance des choses. » - PLATON
Youri Ligotmi
Bonjour !
'Youri Ligotmi' nous a écrit ...
Merci pour votre aide. Effectivement une macro autorun intégrée au document simplifierait pas mal l'écriture du script sauf que je ne vois pas comment je pourrais passer des arguments (variables de remplacement) à word qui les passerait à la macro.
Une macro est effectivement par définition une procédure sans argument : Sub maMacro() Mais une procédure VBA peut avoir des arguments : Sub maProc(A As String, B as String, C as Integer) Vous pouvez exécuter en automation la procédure en passant des arguments : monApplication.Run("maProc","Toto","Tata",3)
Ca y est ça fonctionne (voir le bout de script plus bas), enfin ce n'est pas parfait. Une fois mes replacements effectués j'imprime le document et aussitôt après je le ferme, ça me génère une erreur parceque word n'a pas eu le temps de mettre le document en forme puis de l'envoyer au spooler. Comment je peux résoudre ça? mettre une tempo je trouve ça moyen parce que le temps de mise en forme et d'envoi au spoller peut être variable. Je me demandais s'il n'y avait pas moyen de savoir que word a fini son boulot pour l'impression, à ce moment-làseulement je le ferme.
Merci encore pour votre aide
----------Chercher-Remplcer dans word en vbs---------- Set objWord = CreateObject("Word.Application") objWord.Visible = False
Merci pour votre aide. Effectivement une macro autorun intégrée au
document simplifierait pas mal l'écriture du script sauf que je ne
vois pas comment je pourrais passer des arguments (variables de
remplacement) à word qui les passerait à la macro.
Une macro est effectivement par définition une procédure sans argument :
Sub maMacro()
Mais une procédure VBA peut avoir des arguments :
Sub maProc(A As String, B as String, C as Integer)
Vous pouvez exécuter en automation la procédure en passant des arguments :
monApplication.Run("maProc","Toto","Tata",3)
Ca y est ça fonctionne (voir le bout de script plus bas), enfin ce n'est
pas parfait.
Une fois mes replacements effectués j'imprime le document et aussitôt
après je le ferme, ça me génère une erreur parceque word n'a pas eu le
temps de mettre le document en forme puis de l'envoyer au spooler.
Comment je peux résoudre ça? mettre une tempo je trouve ça moyen parce
que le temps de mise en forme et d'envoi au spoller peut être variable.
Je me demandais s'il n'y avait pas moyen de savoir que word a fini son
boulot pour l'impression, à ce moment-làseulement je le ferme.
Merci encore pour votre aide
----------Chercher-Remplcer dans word en vbs----------
Set objWord = CreateObject("Word.Application")
objWord.Visible = False
Merci pour votre aide. Effectivement une macro autorun intégrée au document simplifierait pas mal l'écriture du script sauf que je ne vois pas comment je pourrais passer des arguments (variables de remplacement) à word qui les passerait à la macro.
Une macro est effectivement par définition une procédure sans argument : Sub maMacro() Mais une procédure VBA peut avoir des arguments : Sub maProc(A As String, B as String, C as Integer) Vous pouvez exécuter en automation la procédure en passant des arguments : monApplication.Run("maProc","Toto","Tata",3)
Ca y est ça fonctionne (voir le bout de script plus bas), enfin ce n'est pas parfait. Une fois mes replacements effectués j'imprime le document et aussitôt après je le ferme, ça me génère une erreur parceque word n'a pas eu le temps de mettre le document en forme puis de l'envoyer au spooler. Comment je peux résoudre ça? mettre une tempo je trouve ça moyen parce que le temps de mise en forme et d'envoi au spoller peut être variable. Je me demandais s'il n'y avait pas moyen de savoir que word a fini son boulot pour l'impression, à ce moment-làseulement je le ferme.
Merci encore pour votre aide
----------Chercher-Remplcer dans word en vbs---------- Set objWord = CreateObject("Word.Application") objWord.Visible = False
Ca y est ça fonctionne (voir le bout de script plus bas), enfin ce n'est pas parfait. Une fois mes replacements effectués j'imprime le document et aussitôt après je le ferme, ça me génère une erreur parceque word n'a pas eu le temps de mettre le document en forme puis de l'envoyer au spooler. Comment je peux résoudre ça?
Copié-collé d'une précédente réponse, avec même la citation : ---------------------------- Il y a plusieurs méthodes pour attendre une fin d'impression: - supprimer l'impression en tâche de fond ActiveDocument.Printout Background:úlse ou Options.PrintBackground = False - si on veut garder le spooling pour pouvoir faire autre chose on peut aussi avec Options.PrintBackground = True faire intervenir un autre processus d'attente comme par exemple une UserForm "Impression en cours..." qui ne fait rien qu'attendre que la file d'attente soit vide Set WordApp = GetObject(, "Word.Application") Do While WordApp.BackgroundPrintingStatus > 0 DoEvents Loop - on peut passer par des API d'attente de processus - on peut placer une temporisation plus ou moins fixe etc. etc.
Anacoluthe « Attendre est encore une occupation. C'est ne rien attendre qui est terrible. » - Cesare PAVESE
-- A+
Ca y est ça fonctionne (voir le bout de script plus bas), enfin ce n'est pas parfait.
Une fois mes replacements effectués j'imprime le document et aussitôt après je le
ferme, ça me génère une erreur parceque word n'a pas eu le temps de mettre le document
en forme puis de l'envoyer au spooler.
Comment je peux résoudre ça?
Copié-collé d'une précédente réponse, avec même la citation :
----------------------------
Il y a plusieurs méthodes pour attendre une fin d'impression:
- supprimer l'impression en tâche de fond
ActiveDocument.Printout Background:úlse
ou
Options.PrintBackground = False
- si on veut garder le spooling pour pouvoir faire autre chose
on peut aussi avec Options.PrintBackground = True
faire intervenir un autre processus d'attente
comme par exemple une UserForm "Impression en cours..."
qui ne fait rien qu'attendre que la file d'attente soit vide
Set WordApp = GetObject(, "Word.Application")
Do While WordApp.BackgroundPrintingStatus > 0
DoEvents
Loop
- on peut passer par des API d'attente de processus
- on peut placer une temporisation plus ou moins fixe
etc. etc.
Anacoluthe
« Attendre est encore une occupation.
C'est ne rien attendre qui est terrible. »
- Cesare PAVESE
Ca y est ça fonctionne (voir le bout de script plus bas), enfin ce n'est pas parfait. Une fois mes replacements effectués j'imprime le document et aussitôt après je le ferme, ça me génère une erreur parceque word n'a pas eu le temps de mettre le document en forme puis de l'envoyer au spooler. Comment je peux résoudre ça?
Copié-collé d'une précédente réponse, avec même la citation : ---------------------------- Il y a plusieurs méthodes pour attendre une fin d'impression: - supprimer l'impression en tâche de fond ActiveDocument.Printout Background:úlse ou Options.PrintBackground = False - si on veut garder le spooling pour pouvoir faire autre chose on peut aussi avec Options.PrintBackground = True faire intervenir un autre processus d'attente comme par exemple une UserForm "Impression en cours..." qui ne fait rien qu'attendre que la file d'attente soit vide Set WordApp = GetObject(, "Word.Application") Do While WordApp.BackgroundPrintingStatus > 0 DoEvents Loop - on peut passer par des API d'attente de processus - on peut placer une temporisation plus ou moins fixe etc. etc.
Anacoluthe « Attendre est encore une occupation. C'est ne rien attendre qui est terrible. » - Cesare PAVESE
-- A+
Anacoluthe
Bonjour !
'Youri Ligotmi' nous a écrit ...
Ca y est ça fonctionne (voir le bout de script plus bas)
Bravo !
ça me génère une erreur parceque word n'a pas eu le temps de mettre le document en forme puis de l'envoyer au spooler. Comment je peux résoudre ça?
Attendre la fin d'impression dans une macro ou un script. (Notamment si l'impression est longue comme une impression en pdf)
Il y a de nombreuses solutions selon qu'on fait intervenir ou non l'utilisateur (on peut lui demander de valider la fin de l'impression par exemple) : on peut inhiber l'impression en tâche de fond par Options.PrintBackground = False ou avec Background:úlse dans la méthode PrintOut ou au contraire laisser le multitâche avec Options.PrintBackground = True et attendre dans un autre processus que l'impression soit terminée Do While WordApp.BackgroundPrintingStatus > 0 DoEvents Loop
Anacoluthe « Attendre est encore une occupation. C'est ne rien attendre qui est terrible. » - Cesare PAVESE
Bonjour !
'Youri Ligotmi' nous a écrit ...
Ca y est ça fonctionne (voir le bout de script plus bas)
Bravo !
ça me génère une erreur parceque word n'a pas eu le
temps de mettre le document en forme puis de l'envoyer au spooler.
Comment je peux résoudre ça?
Attendre la fin d'impression dans une macro ou un script.
(Notamment si l'impression est longue comme une impression en pdf)
Il y a de nombreuses solutions selon qu'on fait intervenir ou non
l'utilisateur (on peut lui demander de valider la fin de l'impression
par exemple) : on peut inhiber l'impression en tâche de fond par
Options.PrintBackground = False
ou avec Background:úlse dans la méthode PrintOut
ou au contraire laisser le multitâche avec Options.PrintBackground = True
et attendre dans un autre processus que l'impression soit terminée
Do While WordApp.BackgroundPrintingStatus > 0
DoEvents
Loop
Anacoluthe
« Attendre est encore une occupation.
C'est ne rien attendre qui est terrible. »
- Cesare PAVESE
Ca y est ça fonctionne (voir le bout de script plus bas)
Bravo !
ça me génère une erreur parceque word n'a pas eu le temps de mettre le document en forme puis de l'envoyer au spooler. Comment je peux résoudre ça?
Attendre la fin d'impression dans une macro ou un script. (Notamment si l'impression est longue comme une impression en pdf)
Il y a de nombreuses solutions selon qu'on fait intervenir ou non l'utilisateur (on peut lui demander de valider la fin de l'impression par exemple) : on peut inhiber l'impression en tâche de fond par Options.PrintBackground = False ou avec Background:úlse dans la méthode PrintOut ou au contraire laisser le multitâche avec Options.PrintBackground = True et attendre dans un autre processus que l'impression soit terminée Do While WordApp.BackgroundPrintingStatus > 0 DoEvents Loop
Anacoluthe « Attendre est encore une occupation. C'est ne rien attendre qui est terrible. » - Cesare PAVESE
Anacoluthe
Bonjour !
'Geo' nous a écrit ...
Copié-collé d'une précédente réponse, avec même la citation :
Oupss pas vu ta réponse plus rapide :-)
A+ A~
Bonjour !
'Geo' nous a écrit ...
Copié-collé d'une précédente réponse, avec même la citation :