[RÉSOLU] Code VBScript

Le coin des administrateurs et des développeurs. Astuces techniques, ...

[RÉSOLU] Code VBScript

Messagepar moums3 » Mar 17 Oct 2017 10:29

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
Dernière édition par moums3 le Jeu 19 Oct 2017 22:02, édité 1 fois.
Une idée n'est bonne que lorsqu'elle est partagée
moums3
 
Messages: 9
Inscription: Mar 17 Oct 2017 09:08

Re: Code VBScript

Messagepar mwonex » Mar 17 Oct 2017 11:46

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/d90551/autres-langages/general-visual-basic-6-vbscript/vbscript/vbscript-lancer-l-impression/

Bon courage, ils sont spécialisés (club de développeurs)
https://vb.developpez.com/faq/vbs
@+
Version 1903 (version du système d'exploitation 18362.418), Firefox, Chrome, Thunderbird.
« Mieulx est de ris que de larmes escrire, Pour ce que rire est le propre de l'homme. »

F. Rabelais.
Avatar de l’utilisateur
mwonex
 
Messages: 3472
Inscription: Dim 7 Juin 2015 13:46

Re: Code VBScript

Messagepar moums3 » Mar 17 Oct 2017 15:18

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
Inscription: Mar 17 Oct 2017 09:08

Re: Code VBScript

Messagepar moums3 » Jeu 19 Oct 2017 21:31

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/library/bb237242(v=office.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
moums3
 
Messages: 9
Inscription: Mar 17 Oct 2017 09:08

Re: [RÉSOLU] Code VBScript

Messagepar chantal11 » Ven 20 Oct 2017 06:06

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
Avatar de l’utilisateur
chantal11
 
Messages: 5583
Inscription: Dim 25 Sep 2011 11:59
Localisation: Aude


Retourner vers Administration / programmation

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité