VBA selection imprimante

Le
Lolo
Bonjour,

Est il possible dans une macro en VBA de sélectionner une imprimante.
Le but est de pouvoir diffuser un document sur plusieurs imprimantes.

Merci d'avance.
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Geo
Le #17763311
Bonjour à Lolo qui nous a écrit :

Est il possible dans une macro en VBA de sélectionner une imprimante.
Le but est de pouvoir diffuser un document sur plusieurs imprimantes.



Comment voulez-vous sélectionner l'imprimante ?
Par son nom ?

--
A+
Geo
Le #17764141
Re

Vous pouvez définir l'imprimante avec
ActivePrinter
Si le nom n'est pas ambigu, ça doit marcher avec le nom seul.
S'il s'agit d'imprimantes réseau il doit falloir préciser le serveur.

Pour afficher la liste des imprimantes dans la fenêtre d'exécution,
lancez cette macro :
Sub ListeDesImprimantes()
Dim WshNetwork As Object
Dim Impr As Object
Dim I As Integer
Set WshNetwork = CreateObject("WScript.Network")
Set Impr = WshNetwork.EnumPrinterConnections
For I = 1 To Impr.Count - 1 Step 2
Debug.Print Impr.Item(I) & " on " & Impr.Item(I - 1)
Next
Debug.Print
Debug.Print ActivePrinter
End Sub

Vous aurez après cette liste, l'imprimante active.

--
A+
Lolo
Le #17766011
Merci Geo pour ta réponse.

Alors je précise, j'ai dans mon entreprise environs 70 imprimantes, je
souhaite imprimer sur un certains nombres, disons 40. Je souhaite
sélectionner les imprimantes par leurs noms, je sais précisément sur quels
imprimantes je souhaite éditer.. Disons en les stockant dans un tableau, ou
une feuille Excel...
Je souhaiterais lancer l'impression d'un document Word avec une certaine
mise en page.

Merci encore de ton aide.


"Geo" a écrit :

Re

Vous pouvez définir l'imprimante avec
ActivePrinter
Si le nom n'est pas ambigu, ça doit marcher avec le nom seul.
S'il s'agit d'imprimantes réseau il doit falloir préciser le serveur.

Pour afficher la liste des imprimantes dans la fenêtre d'exécution,
lancez cette macro :
Sub ListeDesImprimantes()
Dim WshNetwork As Object
Dim Impr As Object
Dim I As Integer
Set WshNetwork = CreateObject("WScript.Network")
Set Impr = WshNetwork.EnumPrinterConnections
For I = 1 To Impr.Count - 1 Step 2
Debug.Print Impr.Item(I) & " on " & Impr.Item(I - 1)
Next
Debug.Print
Debug.Print ActivePrinter
End Sub

Vous aurez après cette liste, l'imprimante active.

--
A+





Geo
Le #17767101
Re

Alors je précise, j'ai dans mon entreprise environs 70 imprimantes, je
souhaite imprimer sur un certains nombres, disons 40. Je souhaite
sélectionner les imprimantes par leurs noms, je sais précisément sur quels
imprimantes je souhaite éditer.. Disons en les stockant dans un tableau, ou
une feuille Excel...



Lancez la macro un peu modifiée :
Sub ListeDesImprimantes()
Dim WshNetwork As Object
Dim Impr As Object
Dim Doc As Document
Dim I As Integer
Set Doc = Documents.Add

Set WshNetwork = CreateObject("WScript.Network")
Set Impr = WshNetwork.EnumPrinterConnections
For I = 1 To Impr.Count - 1 Step 2
Doc.Range.InsertAfter Impr.Item(I) & " on " & _
Impr.Item(I - 1) & vbCrLf
Next
Doc.Range.ConvertToTable Separator:=wdSeparateByParagraphs
End Sub

Vous aurez un tableau avec la liste de toutes les imprimantes
installées, comme je n'ai pas d'imprimante sur serveur je ne peux pas
tester complètement.


Ensuite dans votre programme d'édition, Mettez
ActivePrinter = le contenu du i-ème poste de la table et printout.

--
A+
Lolo
Le #17771421
MErci Geo !

grace a toi j'ai pu ecrire la procédure que je souhaitais

Sub Lancer_Impression_Word(P_Chemin_Document As String, P_Nom_Imprimante As
String)

Dim MonWordAMoi As New Word.Document

MonWordAMoi.Application.Visible = True

MonWordAMoi.Application.ActivePrinter = P_Nom_Imprimante

MonWordAMoi.Application.PrintOut FileName:="",
Range:=wdPrintAllDocument, Item:= _
wdPrintDocumentContent, Copies:=1, Pages:="",
PageType:=wdPrintAllPages, _
ManualDuplexPrint:úlse, Collate:=True, Background:=True,
PrintToFile:= _
False, PrintZoomColumn:=0, PrintZoomRow:=0, PrintZoomPaperWidth:=0, _
PrintZoomPaperHeight:=0

MonWordAMoi.Close

Set MonWordAMoi = Nothing
End Sub

"Geo" a écrit :

Re

> Alors je précise, j'ai dans mon entreprise environs 70 imprimantes, je
> souhaite imprimer sur un certains nombres, disons 40. Je souhaite
> sélectionner les imprimantes par leurs noms, je sais précisément sur quels
> imprimantes je souhaite éditer.. Disons en les stockant dans un tableau, ou
> une feuille Excel...

Lancez la macro un peu modifiée :
Sub ListeDesImprimantes()
Dim WshNetwork As Object
Dim Impr As Object
Dim Doc As Document
Dim I As Integer
Set Doc = Documents.Add

Set WshNetwork = CreateObject("WScript.Network")
Set Impr = WshNetwork.EnumPrinterConnections
For I = 1 To Impr.Count - 1 Step 2
Doc.Range.InsertAfter Impr.Item(I) & " on " & _
Impr.Item(I - 1) & vbCrLf
Next
Doc.Range.ConvertToTable Separator:=wdSeparateByParagraphs
End Sub

Vous aurez un tableau avec la liste de toutes les imprimantes
installées, comme je n'ai pas d'imprimante sur serveur je ne peux pas
tester complètement.


Ensuite dans votre programme d'édition, Mettez
ActivePrinter = le contenu du i-ème poste de la table et printout.

--
A+





Geo
Le #17771891
Bonjour
Merci pour le retour, on va se mettre ça de côté.
J'aime bien le MonWordAMoi :-)

Puisque vous êtes dans une macro Word, ça veut dire que Word est déjà
ouvert, vous auriez donc pu vous passer d'en ouvrir une autre
occurrence, mais je fais comme vous, ça permet de continuer à
travailler sans interférer.
Par contre vous pourriez le mettre en invisible.

--
A+
Publicité
Poster une réponse
Anonyme