Impression reseau avec une macro

PIHUCE

Nouveau membre
bonjour à tous

je suis un petit nouveau sur ce forum et j'ai un souci avec une MACRO EXCEL pour imprimer une feuille que j'ai créé.
j'ai fait une MACRO avec l'enregistreur , je les assigné à un bouton de commende.tous fonctionne bien mais le problème c'est que ce fichier Excel est utilise par d'autre collaborateurs, et leur PC ne sont pas configuré comme le mien.
ma demande est simple je pence pour un pro mais ce n'es pas mon cas.
alors voila y a t'il un code pour envoyer l'impression sur une imprimante réseau.
pour info voici mon code VBA



Sub IMPRESSION()

' IMPRESSION Macro


ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True, _
IgnorePrintAreas:=False
End Sub
 

zeb

Modérateur
Salut,

Merci de respecter le règlement. Toute pièce de code proposée doit être présentée entre les balises [code] et [/code].

------------------------

Ce code est suffisamment générique pour fonctionner sur tout poste qui dispose d'une imprimante !
Quelles sont les erreurs rapportées ?
 

PIHUCE

Nouveau membre
desolé pour la mise en forme je suis un petit nouveau sur ce forum
et desolé pour cette reponce tardive congé oblige.
alors il n'y a pas d'erreure lorsque j'execute la macro et que je suis conecté sur mon identifiant mais si c'est une autre personne qui est connecté cela ne fonctionne pas comme je le voudrais soit ca imprime sur une autre imprimant soit rien ne ce passe soit il n'y a qu'une copie qui sort soit ca fonction comme sur ma sesion.
ps : j'ai fait quelle modif car il nous faut 7 copie
Code:
Sub IMPRESSION()
   Dim sCurPrinter As String
   With Application
      sCurPrinter = .ActivePrinter       ' Store current printer.
      .ActivePrinter = "[i]non de l'imprimant reseau[/i] sur Ne05:" ' Change Printers.
                      
      ActiveWindow.SelectedSheets.PrintOut copies:=7, Collate:=True, _
        IgnorePrintAreas:=False
                
     MsgBox "VOUS AVEZ IMPRIME 7 COPIES DU TABLEAU SUR L'IMPRIMANTE [i]non de l'imprimante[/i]"
           
      ' Print the active document.
      .ActivePrinter = sCurPrinter       ' Set printer back to current.
   End With
End Sub
voila si vous avez la solution merci d'avance.
 

zeb

Modérateur
Salut,

Ne t'inquiète pas pour les délais. Ici, c'est un forum, pas un t'chat.
Eh, tu t'embêtes bien. Utilise le paramètre ActivePrinter de la méthode PrintOut !

Ceci devrait suffire :
Code:
ActiveWindow.SelectedSheets.PrintOut Copies:=7, Collate:=True, ActivePrinter="\\serveur\imprimante"
 

PIHUCE

Nouveau membre
non ce code ne fonctionne pas comme je le voudrais
ca imprime pas sur l'imprimante réseau mais sur l'imprimante par défaut
 

zeb

Modérateur
Si, moi.
Alors j'ai un peu mieux regardé.
Ce fichu Excel n'est pas fichu de lister les imprimantes.
Et le nom de l'imprimante ne suffit pas ! Il lui faut aussi un port à-la-con... :/

Bon, qu'à cela ne tienne, on va quand même récupérer cette liste d'imprimante, calculer un numéro de port, et rechercher notre imprimante dans cette liste !

Code:
Private Function GetPrinterListForExcel(Optional linkword As String = "sur") As String()
    Dim i As Integer, j As Integer, s As String, prtcons
    Dim PrinterList() As String
    
    Set prtcons = CreateObject("WScript.Network").EnumPrinterConnections
    ReDim PrinterList(0 To (prtcons.Count - 1) \ 2)
    j = 0
    For i = 0 To (prtcons.Count - 1) \ 2
        s = ""
        If prtcons(i * 2) = "nul:" Then
            s = "nul:"
        Else
            s = "Ne" & Format(j, "00") & ":"
            j = j + 1
        End If
        PrinterList(i) = prtcons(i * 2 + 1) & " " & linkword & " " & s
    Next
    GetPrinterListForExcel = PrinterList
End Function
Code:
Private Function GetPrinterByNameForExcel(ByVal name As String) As String
    Dim printer
    GetPrinterByNameForExcel = ""
    For Each printer In GetPrinterListForExcel()
        If printer Like name & " sur *" Then
            GetPrinterByNameForExcel = printer
        End If
    Next
End Function

Et maintenant, on peut imprimer :
Code:
ActiveSheet.PrintOut Copies:=7, ActivePrinter=GetPrinterByNameForExcel("\\serveur\imprimante")

Ça marche chez toi, non ?
 

PIHUCE

Nouveau membre
salut zeb et salut le forum
ce nouveau code fonctionne mais ca imprime sur l'imprimante par defaut et pas sur c'elle que j'ai inclus dans ton code je comprend pas:??:
 

zeb

Modérateur
Hum....

Essaie-ça :

Code:
Var printer0 As String
Var printer1 As String
printer0 = Application.ActivePrinter
printer1 = GetPrinterByNameForExcel("\\serveur\imprimante")
Application.ActivePrinter = printer1

If (Application.ActivePrinter = printer1)
    MsgBox "L'imprimante par défaut était " & printer0 & ". " & vbCrLf & _
           "Maintenant, c'est " & printer1, _
           vbInformation
Else
    MsgBox "Impossible de changer l'imprimante par défaut " & vbCrLf & _ 
           "de " & printer0 & vbCrLf & _
           "à  " & printer1,
           vbCritical
End If
 
Vous devez vous inscrire ou vous connecter pour répondre ici.
Derniers messages publiés
Statistiques globales
Discussions
730 131
Messages
6 717 980
Membres
1 586 384
Dernier membre
ChelseaKahn
Partager cette page
Haut