XL 2013 Macro pour impression personnalisé!

bellenm

XLDnaute Impliqué
Bonjour à tous,

je cherche en vain les codes pour:

1. ouvrir une fenêtre pour choisir une imprimante
2. ensuite si je choisis l’impression papier, le choix entre une, deux ou trois copie
3. si pas d’impression papier (PDF, par exemple sous office 2013) le nom du fichier serait celui d’une cellule (ici « Z4 »)

Voilà ce n’est pas grand-chose mais je n’y arrive pas, j’arrive à choisir l’imprimante, mais pour le reste du code je bloque.


Code:
Sub ImpressionCHOIX()

   If Application.Dialogs(xlDialogPrinterSetup).Show Then
    With ActiveSheet.PageSetup
        .PrintArea = "$b$4:$aa$59"
       NomFichier = Range("z4").Value
    End With
    'ici j'aimerais que si le choix d'impression se fait sur un fichier pdf, que la cellule "Z4" en soit le nom ‘ si non, imprimante papier, choisir le nombre de fois à imprimer 1, 2 ou 3.
    NomFichier = Range("z4").Value
    NomFichier = ThisWorkbook.Path & "\" & Range("z4").Value
    
    ActiveSheet.PrintOut
    
End If
End Sub

D’avance merci.
 
Dernière modification par un modérateur:

Lone-wolf

XLDnaute Barbatruc
Re : code pour impression personnalisé!

Bonsoir bellenm,

en pj, le fichier comporte un formulaire. Dans le formulaire change le noms des imprimantes et bien sûr il faudra l'adapter à ton fichier. Comme tu devrais le savoir chaqu'un à ses propres imprimantes et faire comme tu l'a dis je ne pense pas que ce soit possible.



A+ :cool:
 

Pièces jointes

  • Ouvrir Fenêtre imprimer.xlsm
    20.7 KB · Affichages: 43

bellenm

XLDnaute Impliqué
Re : code pour impression personnalisé!

Lone-Wolf,

Bonsoir et merci pour ta réponse rapide, mais je me suis surement mal exprimé,

Ouvrir une fenêtre pour choisir une imprimante (xlDialogPrinterSetup) dans le code insérer, ok
Mais pour les points 2 et 3 je ne trouve pas!

Par contre je ne vois pas où est ton fichier car ill n'y a pas de macro? ou pas trouuver

Marc
 

bellenm

XLDnaute Impliqué
Re : code pour impression personnalisé!

re,

Oui j'ai bien vu et ouvert le fichier mais pas trouver de macro juste la fenêtre ouvre bien pour choix d'imprimante mai je ne vois pas comment accéder à cette formule!

Désoler si je ne suis pas bien ou tu as mis ces donnés à modifier.
 

bellenm

XLDnaute Impliqué
Re : code pour impression personnalisé!

Je suis sur du début de code car il fonctionne, demande bien l'imprimante mais pour le microsoft XPS Document Writer, je n'arrive pas a définir automatiquement le nom du fichier qui est sur la feuille à imprimer en cellule "Z4".

Et j'aurais voulus qu'en mode papier il demande le nombre de copie.
 

Lone-wolf

XLDnaute Barbatruc
Re : code pour impression personnalisé!

Re,

clique sur Développeur > Visual Basic. Clique droit su le formulaire.

Il est préférable d'utiliser soit ton imprimante par défaut, soit PDF Creator si tu l'as.
 
Dernière édition:

Lone-wolf

XLDnaute Barbatruc
Re : code pour impression personnalisé!

Re

Code:
Option Explicit
 
Private Declare Function FindWindowA& Lib "User32" _
    (ByVal lpClassName$, ByVal lpWindowName$)
Private Declare Function EnableWindow& Lib "User32" _
    (ByVal hWnd&, ByVal bEnable&)
Private Declare Function GetWindowLongA& Lib "User32" _
    (ByVal hWnd&, ByVal nIndex&)
Private Declare Function SetWindowLongA& Lib "User32" _
    (ByVal hWnd&, ByVal nIndex&, ByVal dwNewLong&)
    
    Const HWND_BROADCAST = &HFFFF
    Const WM_WININICHANGE = &H1A
    Private Declare Function GetPrivateProfileString Lib "Kernel32" Alias "GetPrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpDefault As String, ByVal lpReturnedString As String, ByVal nSize As Long, ByVal lpFileName As String) As Long
    Private Declare Function GetWindowsDirectory Lib "Kernel32" Alias "GetWindowsDirectoryA" (ByVal lpBuffer As String, ByVal nSize As Long) As Long
    Private Declare Function SendMessage Lib "User32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Integer, ByVal lParam As Any) As Long
    Private Declare Function WritePrivateProfileString Lib "Kernel32" Alias "WritePrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpString As Any, ByVal lpFileName As String) As Long
    Dim Chemin As String
    Dim NC As Long
    Dim Ret As String
    Dim Imprdef
     
    Private Sub UserForm_Initialize()
    ComboBox1.AddItem "HP Color LaserJet 1600"
    ComboBox1.AddItem "PDFCreator"
    ComboBox1.AddItem "CutePDF Writer"
    Dim hWnd As Long
    
    hWnd = FindWindowA(vbNullString, Me.Caption)
    SetWindowLongA hWnd, -16, GetWindowLongA(hWnd, -16) Or &H20000
    End Sub
     
Private Sub UserForm_Activate()
 Dim hWnd As Long
    
    hWnd = FindWindowA("XLMAIN", Application.Caption)
    EnableWindow hWnd, 1
End Sub
     
    Private Sub ProcédureImPrimanteParDéfaut(Imprdef)
      ChangeImprimanteParDéfaut (Imprdef)
      End Sub
    
    Private Sub CommandButton1_Click()
    Imprdef = ComboBox1
    ProcédureImPrimanteParDéfaut (Imprdef)
    Application.Dialogs(xlDialogPrint).Show
    End Sub
  
    Sub ChangeImprimanteParDéfaut(nom As String)
    Chemin = String(260, 0)
     Chemin = Left$(Chemin, GetWindowsDirectory(Chemin, Len(Chemin))) + "\win.ini"
     Ret = String(255, 0)
     NC = GetPrivateProfileString("Devices", nom, "", Ret, 255, Chemin)
     Ret = Left(Ret, NC)
     WritePrivateProfileString "windows", "device", nom & "," & Ret, Chemin
     SendMessage HWND_BROADCAST, WM_WININICHANGE, 0, "windows"
     With Sheets("Feuil1").PageSetup
    .PaperSize = xlPaperA4
    .Orientation = xlLandscape ' mode paysage
    '.Orientation = xlPortrait 'mode portrait
    .Zoom = 100
End With
     End Sub

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
Application.DisplayAlerts = False
ActiveWorkbook.Save
End Sub


Entre nous, ce n'est pas plus simple pour toi de faire: Fichier > Imprimer et dans ton imprimantes par défaut, tu fais tes réglages?
 

bellenm

XLDnaute Impliqué
Re : code pour impression personnalisé!

oui mais c'était pour pauffiner le fichier fait qui serait facile alors pour ceux qui manipule celui-ci et n'y connaisent pas grand chose.

C'est un programme club avec plusieurs équipe donc plusieurs utilisateur différent !

donc plus simple c'est plus facile cela devient.

comment connait on les nom des imprimante est ce le nom donné dans le panneau de configuration?
 
Dernière modification par un modérateur:

bellenm

XLDnaute Impliqué
Re : code pour impression personnalisé!

Bonjour,

Merci quand même pour ton aide Lone-Wolf, mais le visual basic je comprend encore moins qu'un code macro, donc!
je laisserais le choix de départ et expliquerais pour les changement d'imprimante.
Marc
 

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
312 229
Messages
2 086 423
Membres
103 206
dernier inscrit
diambote