[RÉSOLU] Code VBScript

Le coin des administrateurs et des développeurs. Astuces techniques, ...
Répondre
moums3
Messages : 9
Enregistré le : mar. 17 oct. 2017 09:08
Etes vous un robot ? : Non

[RÉSOLU] Code VBScript

Message 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
Modifié en dernier par moums3 le jeu. 19 oct. 2017 22:02, modifié 1 fois.
Une idée n'est bonne que lorsqu'elle est partagée
Avatar du membre
mwonex
Messages : 4733
Enregistré le : dim. 7 juin 2015 13:46
Etes vous un robot ? : Non

Re: Code VBScript

Message 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
@+
"La carte n'est pas le territoire " . "Mieulx est de ris que de larmes escrire, Pour ce que rire est le propre de l'homme. Rabelais". Intel(R) Core(TM) i5-9400F CPU @ 2.90GHz 2.90 GHz 8 Go Win 10 22H2 (19045.3996)
moums3
Messages : 9
Enregistré le : mar. 17 oct. 2017 09:08
Etes vous un robot ? : Non

Re: Code VBScript

Message 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
Une idée n'est bonne que lorsqu'elle est partagée
moums3
Messages : 9
Enregistré le : mar. 17 oct. 2017 09:08
Etes vous un robot ? : Non

Re: Code VBScript

Message 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
Une idée n'est bonne que lorsqu'elle est partagée
Avatar du membre
chantal11
Messages : 6855
Enregistré le : dim. 25 sept. 2011 11:59
Localisation : Aude
Contact :

Re: [RÉSOLU] Code VBScript

Message par chantal11 »

Bonjour,

Merci pour le retour,

@+
Image Image
Image
En cas de problème constaté sur un sujet, alertez un modérateur. N'intervenez pas vous-même. Merci
Répondre