Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Excel > Macros et VBA Excel
Macros et VBA Excel Vos questions relatives aux macros Excel, à l'utilisation de VBA et à l'automatisation de vos classeurs Excel.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 15/11/2011, 09h24   #1
Nouveau Membre du Club
 
Homme Bruno
Étudiant
Inscription : novembre 2011
Messages : 53
Détails du profil
Informations personnelles :
Nom : Homme Bruno
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : novembre 2011
Messages : 53
Points : 26
Points : 26
Par défaut Une macro ouvrant la fenêtre " Imprimer "

Bonjour,

Je souhaite imprimer un Userform à l'aide d'un bouton.

J'utilise le code suivant:

Code :
1
2
3
Private Sub CommandButton2_Click()
UserFormVerificacion2.PrintForm
End Sub
Mon problème, est qu'il me lance l'impression directement sur l'imprimante par défaut.
Je souhaiterai qu'il m'ouvre la fenêtre "imprimer" pour par exemple pouvoir sélectionner l'imprimante ou éventuellement imprimer un PDF.

Apres mes recherche j'ai essayé cette solution:

Code :
If Application.Dialogs(xlDialogPrinterSetup).Show = True Then UserFormVerificacion2.PrintForm

Ca m'ouvre bien la boite de dialogue pour selectioner l'imprimante, mais quand je choisis n'importe quelle imprimante ca n'effectue pas le changement et continue de l'envoyer sur l'imprimante par defaut initiale.

Auriez vous une alternative?

Par ailleurs j’aimerai aussi pourvoir choisir d’ouvrir un aperçu avant impression avant d’imprimer.
Merci d'avance pour vos réponses.

Bruno.
brunounours est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/11/2011, 09h50   #2
Expert Confirmé Sénior
 
Avatar de jfontaine
 
Homme Jérôme FONTAINE
Contrôleur de Gestion
Inscription : juin 2006
Messages : 3 901
Détails du profil
Informations personnelles :
Nom : Homme Jérôme FONTAINE
Âge : 38
Localisation : France, Sarthe (Pays de la Loire)

Informations professionnelles :
Activité : Contrôleur de Gestion

Informations forums :
Inscription : juin 2006
Messages : 3 901
Points : 7 188
Points : 7 188
Bonjour,

Et avec le code ci dessous?
Code :
Application.Dialogs(xlDialogPrint).Show
__________________
Jérôme

Citation:
"Ils ne savaient pas que c'était impossible, alors ils l'ont fait" - Marc Twain
Si la réponse répond à votre besoin, votre vote nous encouragera.
Dans le cas ou la réponse mérite, à vos yeux, un , nous faire partager la raison de ce vote, pourrait nous permettre de nous améliorer.
jfontaine est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/11/2011, 10h06   #3
Nouveau Membre du Club
 
Homme Bruno
Étudiant
Inscription : novembre 2011
Messages : 53
Détails du profil
Informations personnelles :
Nom : Homme Bruno
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : novembre 2011
Messages : 53
Points : 26
Points : 26
Merci de ta rèponse mais ce code m'imprime ma feuille et pas mon UserForm.

Autre idèe?

Bruno
brunounours est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/11/2011, 10h22   #4
Expert Confirmé Sénior
 
Avatar de jfontaine
 
Homme Jérôme FONTAINE
Contrôleur de Gestion
Inscription : juin 2006
Messages : 3 901
Détails du profil
Informations personnelles :
Nom : Homme Jérôme FONTAINE
Âge : 38
Localisation : France, Sarthe (Pays de la Loire)

Informations professionnelles :
Activité : Contrôleur de Gestion

Informations forums :
Inscription : juin 2006
Messages : 3 901
Points : 7 188
Points : 7 188
Quand la fenêtre s'ouvre, choisi une imprimante et sort en cliquant sur Fermer.
Est ce qu'ensuite, l'impression se passe sur la bonne imprimante?
__________________
Jérôme

Citation:
"Ils ne savaient pas que c'était impossible, alors ils l'ont fait" - Marc Twain
Si la réponse répond à votre besoin, votre vote nous encouragera.
Dans le cas ou la réponse mérite, à vos yeux, un , nous faire partager la raison de ce vote, pourrait nous permettre de nous améliorer.
jfontaine est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/11/2011, 10h45   #5
Nouveau Membre du Club
 
Homme Bruno
Étudiant
Inscription : novembre 2011
Messages : 53
Détails du profil
Informations personnelles :
Nom : Homme Bruno
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : novembre 2011
Messages : 53
Points : 26
Points : 26
Marche toujours pas:

avec
Code :
1
2
3
Private Sub CommandButton2_Click()
Application.Dialogs(xlDialogPrint).Show
End Sub
Si je clique sur fermer, rien ne se passe
Si je clique sur ok il imprime ma feuille dans l'imprimante choisie pas l'userform :-(

et avec
Code :
1
2
3
4
5
 
Private Sub CommandButton2_Click()
Application.Dialogs(xlDialogPrint).Show
UserFormVerificacion2.PrintForm
End Sub
Si je clique sur fermer, il imprime l'userform sur l'imprimante par defaut initiale :-(

Si je clique sur OK, il imprime l'userform sur l'imprimante par defaut initiale :-(
et il imprime ma feuille dans l'imprimante choisie pas l'userform :-(
brunounours est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/11/2011, 10h48   #6
Expert Confirmé Sénior
 
Avatar de jfontaine
 
Homme Jérôme FONTAINE
Contrôleur de Gestion
Inscription : juin 2006
Messages : 3 901
Détails du profil
Informations personnelles :
Nom : Homme Jérôme FONTAINE
Âge : 38
Localisation : France, Sarthe (Pays de la Loire)

Informations professionnelles :
Activité : Contrôleur de Gestion

Informations forums :
Inscription : juin 2006
Messages : 3 901
Points : 7 188
Points : 7 188
Qu'entends tu par la?
Citation:
et il imprime ma feuille dans l'imprimante choisie pas l'userform :-(
LA userform propose une imprimante par défaut?
__________________
Jérôme

Citation:
"Ils ne savaient pas que c'était impossible, alors ils l'ont fait" - Marc Twain
Si la réponse répond à votre besoin, votre vote nous encouragera.
Dans le cas ou la réponse mérite, à vos yeux, un , nous faire partager la raison de ce vote, pourrait nous permettre de nous améliorer.
jfontaine est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/11/2011, 11h13   #7
Nouveau Membre du Club
 
Homme Bruno
Étudiant
Inscription : novembre 2011
Messages : 53
Détails du profil
Informations personnelles :
Nom : Homme Bruno
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : novembre 2011
Messages : 53
Points : 26
Points : 26
Au lieu d'imprimer l'UserForm (ce que j'ai besoin), il imprime la feuille de calcul.

Mais je peux choisir l'imprimante
brunounours est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/11/2011, 11h57   #8
Expert Confirmé Sénior
 
Avatar de jfontaine
 
Homme Jérôme FONTAINE
Contrôleur de Gestion
Inscription : juin 2006
Messages : 3 901
Détails du profil
Informations personnelles :
Nom : Homme Jérôme FONTAINE
Âge : 38
Localisation : France, Sarthe (Pays de la Loire)

Informations professionnelles :
Activité : Contrôleur de Gestion

Informations forums :
Inscription : juin 2006
Messages : 3 901
Points : 7 188
Points : 7 188
Citation:
L'imprimante utilisée par la méthode PrintForm est déterminée par les paramètres du Panneau de configuration du système d'exploitation.
Pour choisir l'imprimante il va falloir manipuler l'imprimante par défaut windows

Pour modifier l'imprimante par défaut il faut utiliser les API

A mettre dans un module (Code API)
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
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
 
Public StrImprimante As String
 
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"
End Sub
 
 
Function ImprimanteParDéfaut() As String
 Chemin = String(260, 0)
 Chemin = Left$(Chemin, GetWindowsDirectory(Chemin, Len(Chemin))) + "\win.ini"
 Ret = String(255, 0)
 NC = GetPrivateProfileString("windows", "device", "", Ret, 255, Chemin)
 Ret = Left(Ret, NC)
 NC = InStr(Ret, ",")
 ImprimanteParDéfaut = Left(Ret, NC - 1)
End Function
A utiliser comme suit
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
'Mémorise l'imprimante par défaut
StrImprimante = ImprimanteParDéfaut
 
'Choix de l'imprimante
Application.Dialogs(xlDialogPrinterSetup).Show
 
'Modification de l'imprimante par défaut
ChangeImprimanteParDéfaut Application.ActivePrinter
 
'Impression de la userform
UserForm1.PrintForm
 
'remise en place de l'imprimante par défaut
ChangeImprimanteParDéfaut StrImprimante
__________________
Jérôme

Citation:
"Ils ne savaient pas que c'était impossible, alors ils l'ont fait" - Marc Twain
Si la réponse répond à votre besoin, votre vote nous encouragera.
Dans le cas ou la réponse mérite, à vos yeux, un , nous faire partager la raison de ce vote, pourrait nous permettre de nous améliorer.
jfontaine est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/11/2011, 14h24   #9
Nouveau Membre du Club
 
Homme Bruno
Étudiant
Inscription : novembre 2011
Messages : 53
Détails du profil
Informations personnelles :
Nom : Homme Bruno
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : novembre 2011
Messages : 53
Points : 26
Points : 26
Merci mais je n'y arrive pas.

Pour le coup je ne comprends pas du tout ce que je fais.

Voila la démarche que j'ai effectuè:

J'ai crèè un nouveau module puis j'ai coller le premier code que tu m'as donnè dedans.

Ensuite dans la commande du click pour l'impression,
j'ai mis le deuxieme code en remplacant
Code :
UserFormVerificacion2.PrintForm
Pour l'adapter à mon cas.

qd je click sur bon bouton imprimer il me demande bien quelle imprimante je souhaite. Je la selectionne et il me renvoie un message d'éreur: "
Run-time error '484':

Problem getting printer information for the system. Make sure the printer is set up correctly."

Si je clique sur "Debug", il me surligne en jaune "UserFormVerificacion2.PrintForm"

Merci Bruno
brunounours est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/11/2011, 16h31   #10
Nouveau Membre du Club
 
Homme Bruno
Étudiant
Inscription : novembre 2011
Messages : 53
Détails du profil
Informations personnelles :
Nom : Homme Bruno
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : novembre 2011
Messages : 53
Points : 26
Points : 26
Bonjour le Forum

J'ai un peu avancé.

Pour lancer l'impression, j'utilise une UserForm avec une ComboBox pour choisir l'imprimante.

J'utilise le code suivant:

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
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
 
 
 
Private Sub CommandButton1_Click()
Imprdef = ComboBox1
ProcédureImPrimanteParDéfaut (Imprdef)
Me.PrintForm
End Sub
 
Private Sub UserForm_Initialize()
'ComboBox1.RowSource = "listeImpr"
ComboBox1.AddItem "PDFCreator"
ComboBox1.AddItem "\\adrfp1\ADRPR_CTS3"
ComboBox1.AddItem "ADRPR_CTS3"
 
'ListBox1 = userformverficacion2.ListBox1
End Sub
 
Private Sub ProcédureImPrimanteParDéfaut(Imprdef)
 'http://www.lesite.net/trucs/imprimante_defaut
 'HP LaserJet 3200 Series PS = Nom de l'imprimante apparaissant
 ' dans la fenêtre " imprimante" du panneau de configuration
  'ChangeImprimanteParDéfaut ("HP LaserJet 3200 Series PS")
   ChangeImprimanteParDéfaut (Imprdef)
  End Sub
 
  Sub ChangeImprimanteParDéfaut(nom As String)
'http://www.lesite.net/trucs/imprimante_defaut
 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"
 End Sub
Cette méthode foncionne mais avec reserve.
cela renvoie un autre problème.
Apres mon impression, et après avoir fermé l'UserForm imprimé, aucune de mes macros ne fonctionnent:
si je clique sur un bouton qui lance n'importe quelle Userform, un message d'erreur apparait (cf piece jointe).
Si je clique sur debug il me surligne: UserForm.Show

Je n'ai trouvé d'autre solution que de fermer mon fichier et de le rouvrir: Ce qui est un peu contraignant si je dois le faire après chaque impression.

As-tu une solution?

Cdt Bruno
Images attachées
Type de fichier : jpg erreur des macro apres ouverture.JPG (12,6 Ko, 4 affichages)
brunounours est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/11/2011, 08h46   #11
Nouveau Membre du Club
 
Homme Bruno
Étudiant
Inscription : novembre 2011
Messages : 53
Détails du profil
Informations personnelles :
Nom : Homme Bruno
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : novembre 2011
Messages : 53
Points : 26
Points : 26
J'ai trouvé une solution à ce probleme.

En utilisant le debug pas à pas (touche F8) je me suis rendu compte que le problème ne venait pas du lancement des Userforms mais de leur contenu.

En effet, j'ai simplement eu a rajouter des apres chaque qui existait dans mon code des Userforms.

Bruno.
brunounours est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 09h51.


 
 
 
 
Partenaires

Hébergement Web