Page 1 sur 1

[RÉSOLU] Code VBScript

Posté : mar. 17 oct. 2017 10:29
par moums3
Bonjour,
le VBScript suivant est incomplet :

Code : Tout sélectionner

Option Explicit
Dim dest,extension,fso,defimp,modeles,nom,path,rd,source,version,wo
Set fso=CreateObject("Scripting.FileSystemObject")
On Error Resume Next
path=WScript.CreateObject("WScript.shell").RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\Winword.exe\Path")&"winword.exe"
If Err=0 Then
	path=Replace(path,"\","\\")
	For Each dest in GetObject("winmgmts:").ExecQuery("Select * from CIM_Datafile Where Name = '"&path&"'")
		dest=dest.Version
		path=Left(dest,InStr(dest,".")-1)
	Next
Else
	WScript.Echo """Winword"" n'a pas été trouvé !":WScript.Quit
End If
On Error GoTo 0
extension=".doc"
If path>=12 Then extension=extension&"x"
path=fso.GetFile(WScript.ScriptFullName).ParentFolder'répertoire "VBScripts"
path=Left(path,InStrRev(path,"\"))'répertoire parent de "VBScripts" teminé par "\"
dest=path&"Sorties\"
source=dest&"word.csv"
If fso.FileExists(source) Then
	nom="AppelCotisationParticuliers"
	Set wo=CreateObject("Word.Application")
	wo.Visible=False
	defimp=wo.ActivePrinter
	Set rd=wo.Documents.Open(path&"Modèles\ModèleCotisGéné"&extension)
	rd.MailMerge.OpenDataSource source
	rd.MailMerge.Execute False'OK même si modèle vierge de toute fusion
	rd.Close False
	wo.ActiveDocument.SaveAs dest&nom&extension'OK
'Imprimer en PDF
	wo.ActivePrinter="Microsoft Print to PDF"
'comment donner le nom path&"Sorties\AppelCotisGéné.pdf" et provoquer l'impression ?
	wo.Quit
'	fso.DeleteFile source,True
End If
Ma question est dans le code ci-dessus : 'comment donner le nom path&"Sorties\AppelCotisGéné.pdf" et provoquer l'impression ?

Nota : je condense mes codes car il me paraît peu futé de déclarer, initialiser une variable pour ne s'en servir qu'une fois !

Merci et à bientôt

Re: Code VBScript

Posté : mar. 17 oct. 2017 11:46
par mwonex
Bonjour,

Je ne sais pas si tu trouveras ici une réponse?
En attendant, je ne suis pas au fait de créer du .vbs, mais un sujet proche existe dans "developpez.net" plus spécialisé:
https://www.developpez.net/forums/d9055 ... mpression/

Bon courage, ils sont spécialisés (club de développeurs)
https://vb.developpez.com/faq/vbs
@+

Re: Code VBScript

Posté : mar. 17 oct. 2017 15:18
par moums3
Merci mwonex,
j'ai les yeux "explosés" : j'ai parcouru tout le site https://vb.developpez.com/faq/vbs !
Je n'ai rien trouvé d'intéressant pour la petite difficulté que je rencontre.

À bientôt,
moums3

Re: Code VBScript

Posté : jeu. 19 oct. 2017 21:31
par moums3
Je remercie ceux qui m'ont répondu...
Mais j'ai trouvé une solution grâce à la documentation Microsoft ! Si si !
Il s'agit de la ligne : wo.ActiveDocument.PrintOut ,,,nom,,,,,,,,true
Documentation : https://msdn.microsoft.com/en-us/librar ... e.12).aspx
Voici ce à quoi je suis arrivé :

Code : Tout sélectionner

Option Explicit
Dim dest,extension,fso,imppdf,impr,nom,path,rd,source,wo
Set fso=CreateObject("Scripting.FileSystemObject")

extension=".doc"
On Error Resume Next'activation gestion erreurs
path=WScript.CreateObject("WScript.shell").RegRead("HKEY_LOCAL_MACHINE\SOFTWARE"&_
"\Microsoft\Windows\CurrentVersion\App Paths\Winword.exe\Path")&"winword.exe"
If Err=0 Then
	path=Replace(path,"\","\\")
	For Each dest in GetObject("winmgmts:").ExecQuery("Select * from CIM_Datafile "&_
	"Where Name = '"&path&"'")
		dest=dest.Version
		path=Left(dest,InStr(dest,".")-1)
	Next
Else
	WScript.Echo """Winword"" n'a pas été trouvé !":WScript.Quit
End If
On Error GoTo 0'désactivation gestion erreurs
If path>=12 Then extension=extension&"x"
path=fso.GetFile(WScript.ScriptFullName).ParentFolder'Répertoire où se trouve ce VBScript
path= Left(path,InStrRev(path,"\"))'répertoire parent du répertoire où se trouve ce VBScript
imppdf=path&"ImpPDF.txt"'ImpPDF.txt contient le nom d'une imprimante PDF (codage ASCII)
If fso.FileExists(imppdf) Then
	Set dest=fso.OpenTextFile(imppdf,1,False,False)
	imppdf=dest.ReadAll
	dest.Close
End If
If Len(imppdf)<>0 Then
	imppdf=Replace(imppdf,VbCr,"")'suppression des éventuels "CR" (carriage return)
End If
If Len(imppdf)<>0 Then
	imppdf=Replace(imppdf,VbLf,"")'suppression des éventuels "LF" (line feed)
End If
dest=path&"Sorties\"
source=dest&"word.csv"
If fso.FileExists(source) Then
	nom="AppelCotisationParticuliers"&extension
	Set wo=CreateObject("Word.Application")
	wo.Visible=False
	Set rd=wo.Documents.Open(path&"Modèles\ModèleCotisGéné"&extension)
	rd.MailMerge.OpenDataSource source
	rd.MailMerge.Execute False'OK même si modèle vierge de toute fusion
	wo.ActiveDocument.SaveAs dest&nom
	If imppdf<>"" Then
		nom=Replace(dest&nom,extension,".pdf")
		impr=wo.ActivePrinter'mémorisation de l'imprimante par défaut
		wo.ActivePrinter=imppdf
		wo.ActiveDocument.PrintOut ,,,nom,,,,,,,,true
		wo.ActivePrinter=impr'remise en place de l'imprimante par défaut
	End If
	rd.Close False
	wo.Quit
	fso.DeleteFile source,True
Else
	WScript.Echo "Le fichier :"&VbCr&""""&source&""""&VbCr&"est absent !"
End If
Je rappelle que je condense le code, mes appels à "wmi", comme je ne m'adresse qu'à l'ordinateur local, sont particulièrement épurés !
Un exemple :

Code : Tout sélectionner

Set wmi=("winmgmts:{impersonationLevel=impersonate}!\\"&strComputer&"\root\default:UnTruc")
peut être remplacé par :

Code : Tout sélectionner

Set wmi=("winmgmts:UnTruc")
Je pense utiliser des arguments pour donner le nom de l'imprimante PDF et/ou celui d'une imprimante "papier", ce VBScript n'est pas terminé mais la suite ne me pose aucune difficulté !
À bientôt,
moums3

Re: [RÉSOLU] Code VBScript

Posté : ven. 20 oct. 2017 06:06
par chantal11
Bonjour,

Merci pour le retour,

@+