Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Choix de l'imprimante

7 réponses
Avatar
Sunburn
Bonjour,
j'ai un userform qui me permet d'imprimer.
mais je souhaite rajouter la sélection d'imprimante avant de lancer
l'impression. Comment puis-je faire ? (je ne sais pas où insérer la selection
de l'imprimante, avant le Sh.printout je pense, mais quel est le code ?)
Merci de votre aide. YANN
voici mon code actuel :
----
Private Declare Function GetWindowLongA Lib "user32" _
(ByVal hWnd As Long, ByVal nIndex As Long) As Long
Private Declare Function SetWindowLongA Lib "user32" _
(ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Private Declare Function FindWindowA Lib "user32" _
(ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Sub UserForm_Initialize()
'empêche l'affichage de la croix de fermeture en utilisant les API
'déclarées en début de module
Dim hWnd As Long
hWnd = FindWindowA("Thunder" & IIf(Application.Version Like "8*", "X", "D")
& "Frame", Me.Caption)
SetWindowLongA hWnd, -16, GetWindowLongA(hWnd, -16) And &HFFF7FFFF
With Me.ComboBox1
.AddItem "La page en cours"
.AddItem "Le dossier général"
.AddItem "Le dossier de contrôle avec les FS et les balances"
.AddItem "Les pages de la revue de l'Expert"
'.AddItem "Les fiches suiveuses"
End With
End Sub
Private Sub Combobox1_Click()
Application.ScreenUpdating = False
Select Case Me.ComboBox1.Value
Case "La page en cours"
ThisWorkbook.IsAddin = False
ActiveSheet.PrintOut
Case "Le dossier général"
'imprime le dossier général de la page 2 à la page 12
For Each Sh In Sheets(Array("GA02", "GA10", "GA11"))
If Not UCase(Trim(Sh.Cells(4, 1).Value)) = "NA" Then
Debug.Print Sh.Name
memVisible = Sh.Visible
Sh.Visible = True
Sh.PrintOut
Sh.Visible = memVisible
End If
Next
Case "Le dossier de contrôle avec les FS et la balance"
'Imprime le dossier de contrôle annuel + balance + fiches suiveuse, de la
page 13 à la dernière page
NP = Worksheets.Count
For i = 13 To NP
Set Sh = Sheets(i)
If Not UCase(Trim(Sh.Cells(4, 1).Value)) = "NA" Then
Debug.Print Sh.Name
memVisible = Sh.Visible
Sh.Visible = True
Sh.PrintOut
Sh.Visible = memVisible
End If
Next
Case "Les pages de la revue de l'Expert"
'imprime le dossier général visé par l'Expert
For Each Sh In Sheets(Array("GA01", "GA03", "GA04", "GA05", "GA06", "GA07",
"GA09"))
If Not UCase(Trim(Sh.Cells(4, 1).Value)) = "NA" Then
Debug.Print Sh.Name
memVisible = Sh.Visible
Sh.Visible = True
Sh.PrintOut
Sh.Visible = memVisible
End If
Next
End Select
End Sub

Private Sub CommandButton2_Click()
'si l'utilisateur clique sur Annuler, on quitte.
Unload Me
Exit Sub
End Sub
---------

7 réponses

Avatar
Sunburn
complément.
j'ai trouvé ce code sur Excelabo, mais je ne voudrais que le choix de
l'imprimante, pas le nombre de feuilles etc, .... et le fichier a imprimer
est uniquement le fichier actif.
Merci.
------
'cette macro liste les imprimantes, donne le choix et le nombre de pages à
imprimer.
Sub Imprime()
Dim BookName As String
BookName = Workbooks("Machin.xls")
If Not Printer_Choice(BookName) Then Workbooks(BookName).Sheet(1).PrintOut
copies:=1
End Sub

'Sélection imprimante pour impression
Function Printer_Choice(nBook As String) As Boolean
Const msgPart1 = " page(s) à imprimer sur "
Const msgPart2 = "Imprimante active :"
Const msgPart3 = "Voulez-vous changer d'imprimante ?"
Dim Reply As Byte, Actual_Printer As String, nbPages As String
If Not nBook = "" Then
Workbooks(nBook).Activate
nbPages = ExecuteExcel4Macro("GET.DOCUMENT(50)") & msgPart1
End If
Actual_Printer = Application.ActivePrinter
Reply = MsgBox(nbPages & msgPart2 & vbLf & Actual_Printer & " !" & vbLf &
vbLf & msgPart3 _
, 3 + 32 + 256, "Info utilisateur")
If Reply = vbYes Then Application.Dialogs(xlDialogPrinterSetup).Show
If Reply = vbCancel Then Printer_Choice = True
End Function
-----

"Sunburn" a écrit :

Bonjour,
j'ai un userform qui me permet d'imprimer.
mais je souhaite rajouter la sélection d'imprimante avant de lancer
l'impression. Comment puis-je faire ? (je ne sais pas où insérer la selection
de l'imprimante, avant le Sh.printout je pense, mais quel est le code ?)
Merci de votre aide. YANN
voici mon code actuel :
----
Private Declare Function GetWindowLongA Lib "user32" _
(ByVal hWnd As Long, ByVal nIndex As Long) As Long
Private Declare Function SetWindowLongA Lib "user32" _
(ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Private Declare Function FindWindowA Lib "user32" _
(ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Sub UserForm_Initialize()
'empêche l'affichage de la croix de fermeture en utilisant les API
'déclarées en début de module
Dim hWnd As Long
hWnd = FindWindowA("Thunder" & IIf(Application.Version Like "8*", "X", "D")
& "Frame", Me.Caption)
SetWindowLongA hWnd, -16, GetWindowLongA(hWnd, -16) And &HFFF7FFFF
With Me.ComboBox1
.AddItem "La page en cours"
.AddItem "Le dossier général"
.AddItem "Le dossier de contrôle avec les FS et les balances"
.AddItem "Les pages de la revue de l'Expert"
'.AddItem "Les fiches suiveuses"
End With
End Sub
Private Sub Combobox1_Click()
Application.ScreenUpdating = False
Select Case Me.ComboBox1.Value
Case "La page en cours"
ThisWorkbook.IsAddin = False
ActiveSheet.PrintOut
Case "Le dossier général"
'imprime le dossier général de la page 2 à la page 12
For Each Sh In Sheets(Array("GA02", "GA10", "GA11"))
If Not UCase(Trim(Sh.Cells(4, 1).Value)) = "NA" Then
Debug.Print Sh.Name
memVisible = Sh.Visible
Sh.Visible = True
Sh.PrintOut
Sh.Visible = memVisible
End If
Next
Case "Le dossier de contrôle avec les FS et la balance"
'Imprime le dossier de contrôle annuel + balance + fiches suiveuse, de la
page 13 à la dernière page
NP = Worksheets.Count
For i = 13 To NP
Set Sh = Sheets(i)
If Not UCase(Trim(Sh.Cells(4, 1).Value)) = "NA" Then
Debug.Print Sh.Name
memVisible = Sh.Visible
Sh.Visible = True
Sh.PrintOut
Sh.Visible = memVisible
End If
Next
Case "Les pages de la revue de l'Expert"
'imprime le dossier général visé par l'Expert
For Each Sh In Sheets(Array("GA01", "GA03", "GA04", "GA05", "GA06", "GA07",
"GA09"))
If Not UCase(Trim(Sh.Cells(4, 1).Value)) = "NA" Then
Debug.Print Sh.Name
memVisible = Sh.Visible
Sh.Visible = True
Sh.PrintOut
Sh.Visible = memVisible
End If
Next
End Select
End Sub

Private Sub CommandButton2_Click()
'si l'utilisateur clique sur Annuler, on quitte.
Unload Me
Exit Sub
End Sub
---------


Avatar
FFO
Salut à toi

Cette ligne ouvre une boîte de dialogue pour faire le choix de l'imprimante :

Application.Dialogs(xlDialogPrinterSetup).Show

Peut être ta solution

Dis moi !!!
Avatar
Daniel.C
Bonjour.
Essaie :

Function Printer_Choice(nBook As String) As Boolean
Const msgPart2 = "Imprimante active :"
Const msgPart3 = "Voulez-vous changer d'imprimante ?"
Dim Reply As Byte, Actual_Printer As String, nbPages As String
If Not nBook = "" Then
Workbooks(nBook).Activate
End If
Actual_Printer = Application.ActivePrinter
Reply = MsgBox(msgPart2 & vbLf & Actual_Printer & " !" & vbLf & vbLf &
msgPart3 _
, 3 + 32 + 256, "Info utilisateur")
If Reply = vbYes Then Application.Dialogs(xlDialogPrinterSetup).Show
If Reply = vbCancel Then Printer_Choice = True
End Function

Cordialement.
Daniel

complément.
j'ai trouvé ce code sur Excelabo, mais je ne voudrais que le choix de
l'imprimante, pas le nombre de feuilles etc, .... et le fichier a imprimer
est uniquement le fichier actif.
Merci.
------
'cette macro liste les imprimantes, donne le choix et le nombre de pages à
imprimer.
Sub Imprime()
Dim BookName As String
BookName = Workbooks("Machin.xls")
If Not Printer_Choice(BookName) Then Workbooks(BookName).Sheet(1).PrintOut
copies:=1
End Sub

'Sélection imprimante pour impression
Function Printer_Choice(nBook As String) As Boolean
Const msgPart1 = " page(s) à imprimer sur "
Const msgPart2 = "Imprimante active :"
Const msgPart3 = "Voulez-vous changer d'imprimante ?"
Dim Reply As Byte, Actual_Printer As String, nbPages As String
If Not nBook = "" Then
Workbooks(nBook).Activate
nbPages = ExecuteExcel4Macro("GET.DOCUMENT(50)") & msgPart1
End If
Actual_Printer = Application.ActivePrinter
Reply = MsgBox(nbPages & msgPart2 & vbLf & Actual_Printer & " !" & vbLf &
vbLf & msgPart3 _
, 3 + 32 + 256, "Info utilisateur")
If Reply = vbYes Then Application.Dialogs(xlDialogPrinterSetup).Show
If Reply = vbCancel Then Printer_Choice = True
End Function
-----

"Sunburn" a écrit :

Bonjour,
j'ai un userform qui me permet d'imprimer.
mais je souhaite rajouter la sélection d'imprimante avant de lancer
l'impression. Comment puis-je faire ? (je ne sais pas où insérer la
selection de l'imprimante, avant le Sh.printout je pense, mais quel est le
code ?) Merci de votre aide. YANN
voici mon code actuel :
----
Private Declare Function GetWindowLongA Lib "user32" _
(ByVal hWnd As Long, ByVal nIndex As Long) As Long
Private Declare Function SetWindowLongA Lib "user32" _
(ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As
Long Private Declare Function FindWindowA Lib "user32" _
(ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Sub UserForm_Initialize()
'empêche l'affichage de la croix de fermeture en utilisant les API
'déclarées en début de module
Dim hWnd As Long
hWnd = FindWindowA("Thunder" & IIf(Application.Version Like "8*", "X", "D")
& "Frame", Me.Caption)
SetWindowLongA hWnd, -16, GetWindowLongA(hWnd, -16) And &HFFF7FFFF
With Me.ComboBox1
.AddItem "La page en cours"
.AddItem "Le dossier général"
.AddItem "Le dossier de contrôle avec les FS et les balances"
.AddItem "Les pages de la revue de l'Expert"
'.AddItem "Les fiches suiveuses"
End With
End Sub
Private Sub Combobox1_Click()
Application.ScreenUpdating = False
Select Case Me.ComboBox1.Value
Case "La page en cours"
ThisWorkbook.IsAddin = False
ActiveSheet.PrintOut
Case "Le dossier général"
'imprime le dossier général de la page 2 à la page 12
For Each Sh In Sheets(Array("GA02", "GA10", "GA11"))
If Not UCase(Trim(Sh.Cells(4, 1).Value)) = "NA" Then
Debug.Print Sh.Name
memVisible = Sh.Visible
Sh.Visible = True
Sh.PrintOut
Sh.Visible = memVisible
End If
Next
Case "Le dossier de contrôle avec les FS et la balance"
'Imprime le dossier de contrôle annuel + balance + fiches suiveuse, de la
page 13 à la dernière page
NP = Worksheets.Count
For i = 13 To NP
Set Sh = Sheets(i)
If Not UCase(Trim(Sh.Cells(4, 1).Value)) = "NA" Then
Debug.Print Sh.Name
memVisible = Sh.Visible
Sh.Visible = True
Sh.PrintOut
Sh.Visible = memVisible
End If
Next
Case "Les pages de la revue de l'Expert"
'imprime le dossier général visé par l'Expert
For Each Sh In Sheets(Array("GA01", "GA03", "GA04", "GA05", "GA06", "GA07",
"GA09"))
If Not UCase(Trim(Sh.Cells(4, 1).Value)) = "NA" Then
Debug.Print Sh.Name
memVisible = Sh.Visible
Sh.Visible = True
Sh.PrintOut
Sh.Visible = memVisible
End If
Next
End Select
End Sub

Private Sub CommandButton2_Click()
'si l'utilisateur clique sur Annuler, on quitte.
Unload Me
Exit Sub
End Sub
---------




Avatar
Sunburn
ça me va super bien, c'est simple, nikel.
merci

"FFO" a écrit :

Salut à toi

Cette ligne ouvre une boîte de dialogue pour faire le choix de l'imprimante :

Application.Dialogs(xlDialogPrinterSetup).Show

Peut être ta solution

Dis moi !!!



Avatar
Sunburn
Merci Daniel, mais en fait le truc de FFo me va bien.
En plus, je ne sais même pas comment une Function intervient dans une macro,
j'ai essayé en mettant le nom Printer_Choice avant printout (comme une macro
en fait), et ça bug.
Donc je veux bien par contre, savoir comment on utilise les Function.

YANN

"Daniel.C" a écrit :

Bonjour.
Essaie :

Function Printer_Choice(nBook As String) As Boolean
Const msgPart2 = "Imprimante active :"
Const msgPart3 = "Voulez-vous changer d'imprimante ?"
Dim Reply As Byte, Actual_Printer As String, nbPages As String
If Not nBook = "" Then
Workbooks(nBook).Activate
End If
Actual_Printer = Application.ActivePrinter
Reply = MsgBox(msgPart2 & vbLf & Actual_Printer & " !" & vbLf & vbLf &
msgPart3 _
, 3 + 32 + 256, "Info utilisateur")
If Reply = vbYes Then Application.Dialogs(xlDialogPrinterSetup).Show
If Reply = vbCancel Then Printer_Choice = True
End Function

Cordialement.
Daniel

> complément.
> j'ai trouvé ce code sur Excelabo, mais je ne voudrais que le choix de
> l'imprimante, pas le nombre de feuilles etc, .... et le fichier a imprimer
> est uniquement le fichier actif.
> Merci.
> ------
> 'cette macro liste les imprimantes, donne le choix et le nombre de pages à
> imprimer.
> Sub Imprime()
> Dim BookName As String
> BookName = Workbooks("Machin.xls")
> If Not Printer_Choice(BookName) Then Workbooks(BookName).Sheet(1).PrintOut
> copies:=1
> End Sub
>
> 'Sélection imprimante pour impression
> Function Printer_Choice(nBook As String) As Boolean
> Const msgPart1 = " page(s) à imprimer sur "
> Const msgPart2 = "Imprimante active :"
> Const msgPart3 = "Voulez-vous changer d'imprimante ?"
> Dim Reply As Byte, Actual_Printer As String, nbPages As String
> If Not nBook = "" Then
> Workbooks(nBook).Activate
> nbPages = ExecuteExcel4Macro("GET.DOCUMENT(50)") & msgPart1
> End If
> Actual_Printer = Application.ActivePrinter
> Reply = MsgBox(nbPages & msgPart2 & vbLf & Actual_Printer & " !" & vbLf &
> vbLf & msgPart3 _
> , 3 + 32 + 256, "Info utilisateur")
> If Reply = vbYes Then Application.Dialogs(xlDialogPrinterSetup).Show
> If Reply = vbCancel Then Printer_Choice = True
> End Function
> -----
>
> "Sunburn" a écrit :
>
>> Bonjour,
>> j'ai un userform qui me permet d'imprimer.
>> mais je souhaite rajouter la sélection d'imprimante avant de lancer
>> l'impression. Comment puis-je faire ? (je ne sais pas où insérer la
>> selection de l'imprimante, avant le Sh.printout je pense, mais quel est le
>> code ?) Merci de votre aide. YANN
>> voici mon code actuel :
>> ----
>> Private Declare Function GetWindowLongA Lib "user32" _
>> (ByVal hWnd As Long, ByVal nIndex As Long) As Long
>> Private Declare Function SetWindowLongA Lib "user32" _
>> (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As
>> Long Private Declare Function FindWindowA Lib "user32" _
>> (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
>> Private Sub UserForm_Initialize()
>> 'empêche l'affichage de la croix de fermeture en utilisant les API
>> 'déclarées en début de module
>> Dim hWnd As Long
>> hWnd = FindWindowA("Thunder" & IIf(Application.Version Like "8*", "X", "D")
>> & "Frame", Me.Caption)
>> SetWindowLongA hWnd, -16, GetWindowLongA(hWnd, -16) And &HFFF7FFFF
>> With Me.ComboBox1
>> .AddItem "La page en cours"
>> .AddItem "Le dossier général"
>> .AddItem "Le dossier de contrôle avec les FS et les balances"
>> .AddItem "Les pages de la revue de l'Expert"
>> '.AddItem "Les fiches suiveuses"
>> End With
>> End Sub
>> Private Sub Combobox1_Click()
>> Application.ScreenUpdating = False
>> Select Case Me.ComboBox1.Value
>> Case "La page en cours"
>> ThisWorkbook.IsAddin = False
>> ActiveSheet.PrintOut
>> Case "Le dossier général"
>> 'imprime le dossier général de la page 2 à la page 12
>> For Each Sh In Sheets(Array("GA02", "GA10", "GA11"))
>> If Not UCase(Trim(Sh.Cells(4, 1).Value)) = "NA" Then
>> Debug.Print Sh.Name
>> memVisible = Sh.Visible
>> Sh.Visible = True
>> Sh.PrintOut
>> Sh.Visible = memVisible
>> End If
>> Next
>> Case "Le dossier de contrôle avec les FS et la balance"
>> 'Imprime le dossier de contrôle annuel + balance + fiches suiveuse, de la
>> page 13 à la dernière page
>> NP = Worksheets.Count
>> For i = 13 To NP
>> Set Sh = Sheets(i)
>> If Not UCase(Trim(Sh.Cells(4, 1).Value)) = "NA" Then
>> Debug.Print Sh.Name
>> memVisible = Sh.Visible
>> Sh.Visible = True
>> Sh.PrintOut
>> Sh.Visible = memVisible
>> End If
>> Next
>> Case "Les pages de la revue de l'Expert"
>> 'imprime le dossier général visé par l'Expert
>> For Each Sh In Sheets(Array("GA01", "GA03", "GA04", "GA05", "GA06", "GA07",
>> "GA09"))
>> If Not UCase(Trim(Sh.Cells(4, 1).Value)) = "NA" Then
>> Debug.Print Sh.Name
>> memVisible = Sh.Visible
>> Sh.Visible = True
>> Sh.PrintOut
>> Sh.Visible = memVisible
>> End If
>> Next
>> End Select
>> End Sub
>>
>> Private Sub CommandButton2_Click()
>> 'si l'utilisateur clique sur Annuler, on quitte.
>> Unload Me
>> Exit Sub
>> End Sub
>> ---------





Avatar
Daniel.C
Comme une fonction Excel. Tu l'exécute et elle te renvoie une valeur.
Tu as l'exemple dans la macro Imprime que tu as postée.
Daniel

Merci Daniel, mais en fait le truc de FFo me va bien.
En plus, je ne sais même pas comment une Function intervient dans une macro,
j'ai essayé en mettant le nom Printer_Choice avant printout (comme une macro
en fait), et ça bug.
Donc je veux bien par contre, savoir comment on utilise les Function.

YANN

"Daniel.C" a écrit :

Bonjour.
Essaie :

Function Printer_Choice(nBook As String) As Boolean
Const msgPart2 = "Imprimante active :"
Const msgPart3 = "Voulez-vous changer d'imprimante ?"
Dim Reply As Byte, Actual_Printer As String, nbPages As String
If Not nBook = "" Then
Workbooks(nBook).Activate
End If
Actual_Printer = Application.ActivePrinter
Reply = MsgBox(msgPart2 & vbLf & Actual_Printer & " !" & vbLf & vbLf &
msgPart3 _
, 3 + 32 + 256, "Info utilisateur")
If Reply = vbYes Then Application.Dialogs(xlDialogPrinterSetup).Show
If Reply = vbCancel Then Printer_Choice = True
End Function

Cordialement.
Daniel

complément.
j'ai trouvé ce code sur Excelabo, mais je ne voudrais que le choix de
l'imprimante, pas le nombre de feuilles etc, .... et le fichier a imprimer
est uniquement le fichier actif.
Merci.
------
'cette macro liste les imprimantes, donne le choix et le nombre de pages à
imprimer.
Sub Imprime()
Dim BookName As String
BookName = Workbooks("Machin.xls")
If Not Printer_Choice(BookName) Then Workbooks(BookName).Sheet(1).PrintOut
copies:=1
End Sub

'Sélection imprimante pour impression
Function Printer_Choice(nBook As String) As Boolean
Const msgPart1 = " page(s) à imprimer sur "
Const msgPart2 = "Imprimante active :"
Const msgPart3 = "Voulez-vous changer d'imprimante ?"
Dim Reply As Byte, Actual_Printer As String, nbPages As String
If Not nBook = "" Then
Workbooks(nBook).Activate
nbPages = ExecuteExcel4Macro("GET.DOCUMENT(50)") & msgPart1
End If
Actual_Printer = Application.ActivePrinter
Reply = MsgBox(nbPages & msgPart2 & vbLf & Actual_Printer & " !" & vbLf &
vbLf & msgPart3 _
, 3 + 32 + 256, "Info utilisateur")
If Reply = vbYes Then Application.Dialogs(xlDialogPrinterSetup).Show
If Reply = vbCancel Then Printer_Choice = True
End Function
-----

"Sunburn" a écrit :

Bonjour,
j'ai un userform qui me permet d'imprimer.
mais je souhaite rajouter la sélection d'imprimante avant de lancer
l'impression. Comment puis-je faire ? (je ne sais pas où insérer la
selection de l'imprimante, avant le Sh.printout je pense, mais quel est
le code ?) Merci de votre aide. YANN
voici mon code actuel :
----
Private Declare Function GetWindowLongA Lib "user32" _
(ByVal hWnd As Long, ByVal nIndex As Long) As Long
Private Declare Function SetWindowLongA Lib "user32" _
(ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As
Long Private Declare Function FindWindowA Lib "user32" _
(ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Sub UserForm_Initialize()
'empêche l'affichage de la croix de fermeture en utilisant les API
'déclarées en début de module
Dim hWnd As Long
hWnd = FindWindowA("Thunder" & IIf(Application.Version Like "8*", "X",
"D") & "Frame", Me.Caption)
SetWindowLongA hWnd, -16, GetWindowLongA(hWnd, -16) And &HFFF7FFFF
With Me.ComboBox1
.AddItem "La page en cours"
.AddItem "Le dossier général"
.AddItem "Le dossier de contrôle avec les FS et les balances"
.AddItem "Les pages de la revue de l'Expert"
'.AddItem "Les fiches suiveuses"
End With
End Sub
Private Sub Combobox1_Click()
Application.ScreenUpdating = False
Select Case Me.ComboBox1.Value
Case "La page en cours"
ThisWorkbook.IsAddin = False
ActiveSheet.PrintOut
Case "Le dossier général"
'imprime le dossier général de la page 2 à la page 12
For Each Sh In Sheets(Array("GA02", "GA10", "GA11"))
If Not UCase(Trim(Sh.Cells(4, 1).Value)) = "NA" Then
Debug.Print Sh.Name
memVisible = Sh.Visible
Sh.Visible = True
Sh.PrintOut
Sh.Visible = memVisible
End If
Next
Case "Le dossier de contrôle avec les FS et la balance"
'Imprime le dossier de contrôle annuel + balance + fiches suiveuse, de la
page 13 à la dernière page
NP = Worksheets.Count
For i = 13 To NP
Set Sh = Sheets(i)
If Not UCase(Trim(Sh.Cells(4, 1).Value)) = "NA" Then
Debug.Print Sh.Name
memVisible = Sh.Visible
Sh.Visible = True
Sh.PrintOut
Sh.Visible = memVisible
End If
Next
Case "Les pages de la revue de l'Expert"
'imprime le dossier général visé par l'Expert
For Each Sh In Sheets(Array("GA01", "GA03", "GA04", "GA05", "GA06",
"GA07", "GA09"))
If Not UCase(Trim(Sh.Cells(4, 1).Value)) = "NA" Then
Debug.Print Sh.Name
memVisible = Sh.Visible
Sh.Visible = True
Sh.PrintOut
Sh.Visible = memVisible
End If
Next
End Select
End Sub

Private Sub CommandButton2_Click()
'si l'utilisateur clique sur Annuler, on quitte.
Unload Me
Exit Sub
End Sub
---------











Avatar
Sunburn
Ok ça marche.
merci

"Daniel.C" a écrit :

Comme une fonction Excel. Tu l'exécute et elle te renvoie une valeur.
Tu as l'exemple dans la macro Imprime que tu as postée.
Daniel

> Merci Daniel, mais en fait le truc de FFo me va bien.
> En plus, je ne sais même pas comment une Function intervient dans une macro,
> j'ai essayé en mettant le nom Printer_Choice avant printout (comme une macro
> en fait), et ça bug.
> Donc je veux bien par contre, savoir comment on utilise les Function.
>
> YANN
>
> "Daniel.C" a écrit :
>
>> Bonjour.
>> Essaie :
>>
>> Function Printer_Choice(nBook As String) As Boolean
>> Const msgPart2 = "Imprimante active :"
>> Const msgPart3 = "Voulez-vous changer d'imprimante ?"
>> Dim Reply As Byte, Actual_Printer As String, nbPages As String
>> If Not nBook = "" Then
>> Workbooks(nBook).Activate
>> End If
>> Actual_Printer = Application.ActivePrinter
>> Reply = MsgBox(msgPart2 & vbLf & Actual_Printer & " !" & vbLf & vbLf &
>> msgPart3 _
>> , 3 + 32 + 256, "Info utilisateur")
>> If Reply = vbYes Then Application.Dialogs(xlDialogPrinterSetup).Show
>> If Reply = vbCancel Then Printer_Choice = True
>> End Function
>>
>> Cordialement.
>> Daniel
>>
>>> complément.
>>> j'ai trouvé ce code sur Excelabo, mais je ne voudrais que le choix de
>>> l'imprimante, pas le nombre de feuilles etc, .... et le fichier a imprimer
>>> est uniquement le fichier actif.
>>> Merci.
>>> ------
>>> 'cette macro liste les imprimantes, donne le choix et le nombre de pages à
>>> imprimer.
>>> Sub Imprime()
>>> Dim BookName As String
>>> BookName = Workbooks("Machin.xls")
>>> If Not Printer_Choice(BookName) Then Workbooks(BookName).Sheet(1).PrintOut
>>> copies:=1
>>> End Sub
>>>
>>> 'Sélection imprimante pour impression
>>> Function Printer_Choice(nBook As String) As Boolean
>>> Const msgPart1 = " page(s) à imprimer sur "
>>> Const msgPart2 = "Imprimante active :"
>>> Const msgPart3 = "Voulez-vous changer d'imprimante ?"
>>> Dim Reply As Byte, Actual_Printer As String, nbPages As String
>>> If Not nBook = "" Then
>>> Workbooks(nBook).Activate
>>> nbPages = ExecuteExcel4Macro("GET.DOCUMENT(50)") & msgPart1
>>> End If
>>> Actual_Printer = Application.ActivePrinter
>>> Reply = MsgBox(nbPages & msgPart2 & vbLf & Actual_Printer & " !" & vbLf &
>>> vbLf & msgPart3 _
>>> , 3 + 32 + 256, "Info utilisateur")
>>> If Reply = vbYes Then Application.Dialogs(xlDialogPrinterSetup).Show
>>> If Reply = vbCancel Then Printer_Choice = True
>>> End Function
>>> -----
>>>
>>> "Sunburn" a écrit :
>>>
>>>> Bonjour,
>>>> j'ai un userform qui me permet d'imprimer.
>>>> mais je souhaite rajouter la sélection d'imprimante avant de lancer
>>>> l'impression. Comment puis-je faire ? (je ne sais pas où insérer la
>>>> selection de l'imprimante, avant le Sh.printout je pense, mais quel est
>>>> le code ?) Merci de votre aide. YANN
>>>> voici mon code actuel :
>>>> ----
>>>> Private Declare Function GetWindowLongA Lib "user32" _
>>>> (ByVal hWnd As Long, ByVal nIndex As Long) As Long
>>>> Private Declare Function SetWindowLongA Lib "user32" _
>>>> (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As
>>>> Long Private Declare Function FindWindowA Lib "user32" _
>>>> (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
>>>> Private Sub UserForm_Initialize()
>>>> 'empêche l'affichage de la croix de fermeture en utilisant les API
>>>> 'déclarées en début de module
>>>> Dim hWnd As Long
>>>> hWnd = FindWindowA("Thunder" & IIf(Application.Version Like "8*", "X",
>>>> "D") & "Frame", Me.Caption)
>>>> SetWindowLongA hWnd, -16, GetWindowLongA(hWnd, -16) And &HFFF7FFFF
>>>> With Me.ComboBox1
>>>> .AddItem "La page en cours"
>>>> .AddItem "Le dossier général"
>>>> .AddItem "Le dossier de contrôle avec les FS et les balances"
>>>> .AddItem "Les pages de la revue de l'Expert"
>>>> '.AddItem "Les fiches suiveuses"
>>>> End With
>>>> End Sub
>>>> Private Sub Combobox1_Click()
>>>> Application.ScreenUpdating = False
>>>> Select Case Me.ComboBox1.Value
>>>> Case "La page en cours"
>>>> ThisWorkbook.IsAddin = False
>>>> ActiveSheet.PrintOut
>>>> Case "Le dossier général"
>>>> 'imprime le dossier général de la page 2 à la page 12
>>>> For Each Sh In Sheets(Array("GA02", "GA10", "GA11"))
>>>> If Not UCase(Trim(Sh.Cells(4, 1).Value)) = "NA" Then
>>>> Debug.Print Sh.Name
>>>> memVisible = Sh.Visible
>>>> Sh.Visible = True
>>>> Sh.PrintOut
>>>> Sh.Visible = memVisible
>>>> End If
>>>> Next
>>>> Case "Le dossier de contrôle avec les FS et la balance"
>>>> 'Imprime le dossier de contrôle annuel + balance + fiches suiveuse, de la
>>>> page 13 à la dernière page
>>>> NP = Worksheets.Count
>>>> For i = 13 To NP
>>>> Set Sh = Sheets(i)
>>>> If Not UCase(Trim(Sh.Cells(4, 1).Value)) = "NA" Then
>>>> Debug.Print Sh.Name
>>>> memVisible = Sh.Visible
>>>> Sh.Visible = True
>>>> Sh.PrintOut
>>>> Sh.Visible = memVisible
>>>> End If
>>>> Next
>>>> Case "Les pages de la revue de l'Expert"
>>>> 'imprime le dossier général visé par l'Expert
>>>> For Each Sh In Sheets(Array("GA01", "GA03", "GA04", "GA05", "GA06",
>>>> "GA07", "GA09"))
>>>> If Not UCase(Trim(Sh.Cells(4, 1).Value)) = "NA" Then
>>>> Debug.Print Sh.Name
>>>> memVisible = Sh.Visible
>>>> Sh.Visible = True
>>>> Sh.PrintOut
>>>> Sh.Visible = memVisible
>>>> End If
>>>> Next
>>>> End Select
>>>> End Sub
>>>>
>>>> Private Sub CommandButton2_Click()
>>>> 'si l'utilisateur clique sur Annuler, on quitte.
>>>> Unload Me
>>>> Exit Sub
>>>> End Sub
>>>> ---------
>>
>>
>>