>Je voudrais imprimer, en format paysage et en brouillon, un formulaire
>affiché à l'écran.L'impression se fait à partir d'un bouton sur ce
>formulaire.
Michel Pierron m'a gentiment indiqué ce code mais je n'arrive pas à le
faire fonctionner. Je ne sais pas trop si tout le code ce met dans le code
du formulaire ou une partie seulement et l'autre en module ou module de
classe. Je suis un peu perdue. Merci pour votre aide.
> Option Explicit
> Private Type OSVERSIONINFO
> dwOSVersionInfoSize As Long
> dwMajorVersion As Long
> dwMinorVersion As Long
> dwBuildNumber As Long
> dwPlatformId As Long
> szCSDVersion As String * 128
> End Type
> Private Declare Function GetVersionEx& Lib _
> "kernel32" Alias "GetVersionExA" _
> (lpVersionInformation As OSVERSIONINFO)
> Private Declare Sub keybd_event Lib "user32" _
> (ByVal bVk As Byte, ByVal bScan As Byte _
> , ByVal dwFlags&, ByVal dwExtraInfo&)
> Private Declare Function OpenClipboard& Lib "user32" (ByVal hwnd&)
> Private Declare Function EmptyClipboard& Lib "user32" ()
> Private Declare Function CloseClipboard& Lib "user32" ()
> Private Const KEYEVENTF_KEYUP = &H2
> Private Const VK_SNAPSHOT = &H2C
> Private Const VK_MENU = &H12
>
> ' Impression écran en paysage
> Private Sub CommandButton1_Click()
> Me.Repaint
> OpenClipboard 0&
> EmptyClipboard
> Dim OSI As OSVERSIONINFO
> OSI.dwOSVersionInfoSize = 148
> OSI.szCSDVersion = Space$(128)
> Call GetVersionEx(OSI)
> If OSI.dwMajorVersion > 4 Then
> keybd_event VK_SNAPSHOT, 1, 0, 0
> Else
> keybd_event VK_MENU, 0, 0, 0
> keybd_event VK_SNAPSHOT, 0, 0, 0
> keybd_event VK_SNAPSHOT, 0, KEYEVENTF_KEYUP, 0
> keybd_event VK_MENU, 0, KEYEVENTF_KEYUP, 0
> End If
> CloseClipboard
> DoEvents
> Application.ScreenUpdating = False
> Dim NewBook As String
> Workbooks.Add: ActiveSheet.Paste
> NewBook = ActiveWorkbook.Name
> With ActiveSheet.PageSetup
> .RightFooter = Me.Caption & " Le &D Page &P/&N"
> .PrintGridlines = False
> .Orientation = xlLandscape
> .PaperSize = xlPaperA4
> .Zoom = False
> .FitToPagesWide = 1
> .FitToPagesTall = False
> End With
> ActiveWindow.Visible = False
> Application.ScreenUpdating = True
> Me.Hide
> On Error Resume Next
> Windows(NewBook).SelectedSheets.PrintOut Copies:=1
> Workbooks(NewBook).Close False
> Me.Show
> End Sub
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
pirot
bonjour,
j'ai le problème suivant:
Une table ELEVE d'une bd access contient les n° élève puis nom prénom, classe
Dans une cellule d'une feuille EXCEL je place le n°élève (en A1 par exemple).
Quelle est la fonction (ou code VBA ?) qui en B1 donne le nom, en C1 le prénom en D1 la classe de l'élève lu directement à partir de la table ACCESS (sans créer une feuille access avec tous les élèves) ?
merci de vos réponses, ou d'un lien vers un site qui pourrait m'aider.
pirot.
bonjour,
j'ai le problème suivant:
Une table ELEVE d'une bd access contient les n° élève puis nom prénom,
classe
Dans une cellule d'une feuille EXCEL je place le n°élève (en A1 par
exemple).
Quelle est la fonction (ou code VBA ?) qui en B1 donne le nom, en C1 le
prénom en D1 la classe de l'élève lu directement à partir de la table
ACCESS (sans créer une feuille access avec tous les élèves) ?
merci de vos réponses, ou d'un lien vers un site qui pourrait m'aider.
Une table ELEVE d'une bd access contient les n° élève puis nom prénom, classe
Dans une cellule d'une feuille EXCEL je place le n°élève (en A1 par exemple).
Quelle est la fonction (ou code VBA ?) qui en B1 donne le nom, en C1 le prénom en D1 la classe de l'élève lu directement à partir de la table ACCESS (sans créer une feuille access avec tous les élèves) ?
merci de vos réponses, ou d'un lien vers un site qui pourrait m'aider.
pirot.
michdenis
Bonjour Pirot,
Voici un exemple complet du code que tu pourrais retrouver dans le module feuille où l'action se déroule :
Tu dois charger la bibliothèque suivante : "Microsoft DAO 3.6 Objects librairy"
'Déclaration des variables dans le haut du module de la feuille Dim Db As Database, RstTrouve As Recordset '.--------------------------------------- Private Sub Worksheet_Activate() 'Dès que la feuille est sélectionné... 'Ouverture de la base de données à adapter Set Db = OpenDatabase("C:ATravailAccess exempledb1.mdb") 'ouverture du recordset - la table "édudiant" Set RstTrouve = Db.OpenRecordset("toto", dbOpenDynaset)
End Sub '.--------------------------------------- Private Sub Worksheet_Change(ByVal Target As Range)
Dim C As Range, Rg As Range Dim Chaine As Variant
Set Rg = Intersect(Target, Columns(1)) If Not Rg Is Nothing Then For Each C In Rg If C <> "" Then 'Le contenu de la cellule sert de critère de recherche Chaine = Trim(C.Value) With RstTrouve '[Num] = NOm du champ(clé primaire) àpartir 'duquel on essaie de trouver un enregistrement. 'Si la recherche est du texte '.FindFirst "[Num] = " & Chr(34) & Chaine & Chr(34) .FindFirst "[Num] = " & Chaine
If .NoMatch = False Then 'la colonne à droite de la cellule 'ayant de critère recevra la valeur du champ 1 'à droite du champ de la clé primaire C(, 2) = RstTrouve(1) Else C(, 2) = "" End If End With End If Next End If Set Rg = Nothing: Set C = Nothing
End Sub '.--------------------------------------- Private Sub Worksheet_Deactivate() On Error Resume Next Rst.Close: Db.Close Set Db = Nothing: Set RstTrouve = Nothing End Sub '.---------------------------------------
Et dans le ThisWorkbook : '--------------------------------------- Private Sub Workbook_Activate()
'Feuil2 = codename de l'objet feuille If ActiveSheet.CodeName = Feuil2.Name Then Feuil2.Activate End If
End Sub '---------------------------------------
Salutations!
"pirot" a écrit dans le message de news: 43c6b15d$0$27955$ bonjour,
j'ai le problème suivant:
Une table ELEVE d'une bd access contient les n° élève puis nom prénom, classe
Dans une cellule d'une feuille EXCEL je place le n°élève (en A1 par exemple).
Quelle est la fonction (ou code VBA ?) qui en B1 donne le nom, en C1 le prénom en D1 la classe de l'élève lu directement à partir de la table ACCESS (sans créer une feuille access avec tous les élèves) ?
merci de vos réponses, ou d'un lien vers un site qui pourrait m'aider.
pirot.
Bonjour Pirot,
Voici un exemple complet du code que tu pourrais retrouver dans
le module feuille où l'action se déroule :
Tu dois charger la bibliothèque suivante :
"Microsoft DAO 3.6 Objects librairy"
'Déclaration des variables dans le haut du module de la feuille
Dim Db As Database, RstTrouve As Recordset
'.---------------------------------------
Private Sub Worksheet_Activate()
'Dès que la feuille est sélectionné...
'Ouverture de la base de données à adapter
Set Db = OpenDatabase("C:ATravailAccess exempledb1.mdb")
'ouverture du recordset - la table "édudiant"
Set RstTrouve = Db.OpenRecordset("toto", dbOpenDynaset)
End Sub
'.---------------------------------------
Private Sub Worksheet_Change(ByVal Target As Range)
Dim C As Range, Rg As Range
Dim Chaine As Variant
Set Rg = Intersect(Target, Columns(1))
If Not Rg Is Nothing Then
For Each C In Rg
If C <> "" Then
'Le contenu de la cellule sert de critère de recherche
Chaine = Trim(C.Value)
With RstTrouve
'[Num] = NOm du champ(clé primaire) àpartir
'duquel on essaie de trouver un enregistrement.
'Si la recherche est du texte
'.FindFirst "[Num] = " & Chr(34) & Chaine & Chr(34)
.FindFirst "[Num] = " & Chaine
If .NoMatch = False Then
'la colonne à droite de la cellule
'ayant de critère recevra la valeur du champ 1
'à droite du champ de la clé primaire
C(, 2) = RstTrouve(1)
Else
C(, 2) = ""
End If
End With
End If
Next
End If
Set Rg = Nothing: Set C = Nothing
End Sub
'.---------------------------------------
Private Sub Worksheet_Deactivate()
On Error Resume Next
Rst.Close: Db.Close
Set Db = Nothing: Set RstTrouve = Nothing
End Sub
'.---------------------------------------
Et dans le ThisWorkbook :
'---------------------------------------
Private Sub Workbook_Activate()
'Feuil2 = codename de l'objet feuille
If ActiveSheet.CodeName = Feuil2.Name Then
Feuil2.Activate
End If
End Sub
'---------------------------------------
Salutations!
"pirot" <panne.stanislas@wanadoo.fr.antispam> a écrit dans le message de news: 43c6b15d$0$27955$626a14ce@news.free.fr...
bonjour,
j'ai le problème suivant:
Une table ELEVE d'une bd access contient les n° élève puis nom prénom,
classe
Dans une cellule d'une feuille EXCEL je place le n°élève (en A1 par
exemple).
Quelle est la fonction (ou code VBA ?) qui en B1 donne le nom, en C1 le
prénom en D1 la classe de l'élève lu directement à partir de la table
ACCESS (sans créer une feuille access avec tous les élèves) ?
merci de vos réponses, ou d'un lien vers un site qui pourrait m'aider.
Voici un exemple complet du code que tu pourrais retrouver dans le module feuille où l'action se déroule :
Tu dois charger la bibliothèque suivante : "Microsoft DAO 3.6 Objects librairy"
'Déclaration des variables dans le haut du module de la feuille Dim Db As Database, RstTrouve As Recordset '.--------------------------------------- Private Sub Worksheet_Activate() 'Dès que la feuille est sélectionné... 'Ouverture de la base de données à adapter Set Db = OpenDatabase("C:ATravailAccess exempledb1.mdb") 'ouverture du recordset - la table "édudiant" Set RstTrouve = Db.OpenRecordset("toto", dbOpenDynaset)
End Sub '.--------------------------------------- Private Sub Worksheet_Change(ByVal Target As Range)
Dim C As Range, Rg As Range Dim Chaine As Variant
Set Rg = Intersect(Target, Columns(1)) If Not Rg Is Nothing Then For Each C In Rg If C <> "" Then 'Le contenu de la cellule sert de critère de recherche Chaine = Trim(C.Value) With RstTrouve '[Num] = NOm du champ(clé primaire) àpartir 'duquel on essaie de trouver un enregistrement. 'Si la recherche est du texte '.FindFirst "[Num] = " & Chr(34) & Chaine & Chr(34) .FindFirst "[Num] = " & Chaine
If .NoMatch = False Then 'la colonne à droite de la cellule 'ayant de critère recevra la valeur du champ 1 'à droite du champ de la clé primaire C(, 2) = RstTrouve(1) Else C(, 2) = "" End If End With End If Next End If Set Rg = Nothing: Set C = Nothing
End Sub '.--------------------------------------- Private Sub Worksheet_Deactivate() On Error Resume Next Rst.Close: Db.Close Set Db = Nothing: Set RstTrouve = Nothing End Sub '.---------------------------------------
Et dans le ThisWorkbook : '--------------------------------------- Private Sub Workbook_Activate()
'Feuil2 = codename de l'objet feuille If ActiveSheet.CodeName = Feuil2.Name Then Feuil2.Activate End If
End Sub '---------------------------------------
Salutations!
"pirot" a écrit dans le message de news: 43c6b15d$0$27955$ bonjour,
j'ai le problème suivant:
Une table ELEVE d'une bd access contient les n° élève puis nom prénom, classe
Dans une cellule d'une feuille EXCEL je place le n°élève (en A1 par exemple).
Quelle est la fonction (ou code VBA ?) qui en B1 donne le nom, en C1 le prénom en D1 la classe de l'élève lu directement à partir de la table ACCESS (sans créer une feuille access avec tous les élèves) ?
merci de vos réponses, ou d'un lien vers un site qui pourrait m'aider.
pirot.
Michel Pierron
Bonsoir jil; Colle l'ensemble du code dans le module de ton UserForm; le bouton CommandButton1 correspond à ton bouton d'impression. As tu bien reporté le code tel que mentionné (il suffit de faire un copier-coller).
Tu peux tester l'absence d'erreur en le compilant (Menu Debogage / Compiler VBAProject).
MP
"jil" a écrit dans le message de news: eIO$
Bonjour à tous,
Je voudrais imprimer, en format paysage et en brouillon, un formulaire affiché à l'écran.L'impression se fait à partir d'un bouton sur ce formulaire.
Michel Pierron m'a gentiment indiqué ce code mais je n'arrive pas à le faire fonctionner. Je ne sais pas trop si tout le code ce met dans le code du formulaire ou une partie seulement et l'autre en module ou module de classe. Je suis un peu perdue. Merci pour votre aide.
Option Explicit Private Type OSVERSIONINFO dwOSVersionInfoSize As Long dwMajorVersion As Long dwMinorVersion As Long dwBuildNumber As Long dwPlatformId As Long szCSDVersion As String * 128 End Type Private Declare Function GetVersionEx& Lib _ "kernel32" Alias "GetVersionExA" _ (lpVersionInformation As OSVERSIONINFO) Private Declare Sub keybd_event Lib "user32" _ (ByVal bVk As Byte, ByVal bScan As Byte _ , ByVal dwFlags&, ByVal dwExtraInfo&) Private Declare Function OpenClipboard& Lib "user32" (ByVal hwnd&) Private Declare Function EmptyClipboard& Lib "user32" () Private Declare Function CloseClipboard& Lib "user32" () Private Const KEYEVENTF_KEYUP = &H2 Private Const VK_SNAPSHOT = &H2C Private Const VK_MENU = &H12
' Impression écran en paysage Private Sub CommandButton1_Click() Me.Repaint OpenClipboard 0& EmptyClipboard Dim OSI As OSVERSIONINFO OSI.dwOSVersionInfoSize = 148 OSI.szCSDVersion = Space$(128) Call GetVersionEx(OSI) If OSI.dwMajorVersion > 4 Then keybd_event VK_SNAPSHOT, 1, 0, 0 Else keybd_event VK_MENU, 0, 0, 0 keybd_event VK_SNAPSHOT, 0, 0, 0 keybd_event VK_SNAPSHOT, 0, KEYEVENTF_KEYUP, 0 keybd_event VK_MENU, 0, KEYEVENTF_KEYUP, 0 End If CloseClipboard DoEvents Application.ScreenUpdating = False Dim NewBook As String Workbooks.Add: ActiveSheet.Paste NewBook = ActiveWorkbook.Name With ActiveSheet.PageSetup .RightFooter = Me.Caption & " Le &D Page &P/&N" .PrintGridlines = False .Orientation = xlLandscape .PaperSize = xlPaperA4 .Zoom = False .FitToPagesWide = 1 .FitToPagesTall = False End With ActiveWindow.Visible = False Application.ScreenUpdating = True Me.Hide On Error Resume Next Windows(NewBook).SelectedSheets.PrintOut Copies:=1 Workbooks(NewBook).Close False Me.Show End Sub
Jil
Bonsoir jil;
Colle l'ensemble du code dans le module de ton UserForm; le bouton
CommandButton1 correspond à ton bouton d'impression. As tu bien reporté le
code tel que mentionné (il suffit de faire un copier-coller).
Tu peux tester l'absence d'erreur en le compilant (Menu Debogage / Compiler
VBAProject).
MP
"jil" <jil@tiscali.fr> a écrit dans le message de news:
eIO$C66FGHA.2444@TK2MSFTNGP11.phx.gbl...
Bonjour à tous,
Je voudrais imprimer, en format paysage et en brouillon, un formulaire
affiché à l'écran.L'impression se fait à partir d'un bouton sur ce
formulaire.
Michel Pierron m'a gentiment indiqué ce code mais je n'arrive pas à le
faire fonctionner. Je ne sais pas trop si tout le code ce met dans le code
du formulaire ou une partie seulement et l'autre en module ou module de
classe. Je suis un peu perdue. Merci pour votre aide.
Option Explicit
Private Type OSVERSIONINFO
dwOSVersionInfoSize As Long
dwMajorVersion As Long
dwMinorVersion As Long
dwBuildNumber As Long
dwPlatformId As Long
szCSDVersion As String * 128
End Type
Private Declare Function GetVersionEx& Lib _
"kernel32" Alias "GetVersionExA" _
(lpVersionInformation As OSVERSIONINFO)
Private Declare Sub keybd_event Lib "user32" _
(ByVal bVk As Byte, ByVal bScan As Byte _
, ByVal dwFlags&, ByVal dwExtraInfo&)
Private Declare Function OpenClipboard& Lib "user32" (ByVal hwnd&)
Private Declare Function EmptyClipboard& Lib "user32" ()
Private Declare Function CloseClipboard& Lib "user32" ()
Private Const KEYEVENTF_KEYUP = &H2
Private Const VK_SNAPSHOT = &H2C
Private Const VK_MENU = &H12
' Impression écran en paysage
Private Sub CommandButton1_Click()
Me.Repaint
OpenClipboard 0&
EmptyClipboard
Dim OSI As OSVERSIONINFO
OSI.dwOSVersionInfoSize = 148
OSI.szCSDVersion = Space$(128)
Call GetVersionEx(OSI)
If OSI.dwMajorVersion > 4 Then
keybd_event VK_SNAPSHOT, 1, 0, 0
Else
keybd_event VK_MENU, 0, 0, 0
keybd_event VK_SNAPSHOT, 0, 0, 0
keybd_event VK_SNAPSHOT, 0, KEYEVENTF_KEYUP, 0
keybd_event VK_MENU, 0, KEYEVENTF_KEYUP, 0
End If
CloseClipboard
DoEvents
Application.ScreenUpdating = False
Dim NewBook As String
Workbooks.Add: ActiveSheet.Paste
NewBook = ActiveWorkbook.Name
With ActiveSheet.PageSetup
.RightFooter = Me.Caption & " Le &D Page &P/&N"
.PrintGridlines = False
.Orientation = xlLandscape
.PaperSize = xlPaperA4
.Zoom = False
.FitToPagesWide = 1
.FitToPagesTall = False
End With
ActiveWindow.Visible = False
Application.ScreenUpdating = True
Me.Hide
On Error Resume Next
Windows(NewBook).SelectedSheets.PrintOut Copies:=1
Workbooks(NewBook).Close False
Me.Show
End Sub
Bonsoir jil; Colle l'ensemble du code dans le module de ton UserForm; le bouton CommandButton1 correspond à ton bouton d'impression. As tu bien reporté le code tel que mentionné (il suffit de faire un copier-coller).
Tu peux tester l'absence d'erreur en le compilant (Menu Debogage / Compiler VBAProject).
MP
"jil" a écrit dans le message de news: eIO$
Bonjour à tous,
Je voudrais imprimer, en format paysage et en brouillon, un formulaire affiché à l'écran.L'impression se fait à partir d'un bouton sur ce formulaire.
Michel Pierron m'a gentiment indiqué ce code mais je n'arrive pas à le faire fonctionner. Je ne sais pas trop si tout le code ce met dans le code du formulaire ou une partie seulement et l'autre en module ou module de classe. Je suis un peu perdue. Merci pour votre aide.
Option Explicit Private Type OSVERSIONINFO dwOSVersionInfoSize As Long dwMajorVersion As Long dwMinorVersion As Long dwBuildNumber As Long dwPlatformId As Long szCSDVersion As String * 128 End Type Private Declare Function GetVersionEx& Lib _ "kernel32" Alias "GetVersionExA" _ (lpVersionInformation As OSVERSIONINFO) Private Declare Sub keybd_event Lib "user32" _ (ByVal bVk As Byte, ByVal bScan As Byte _ , ByVal dwFlags&, ByVal dwExtraInfo&) Private Declare Function OpenClipboard& Lib "user32" (ByVal hwnd&) Private Declare Function EmptyClipboard& Lib "user32" () Private Declare Function CloseClipboard& Lib "user32" () Private Const KEYEVENTF_KEYUP = &H2 Private Const VK_SNAPSHOT = &H2C Private Const VK_MENU = &H12
' Impression écran en paysage Private Sub CommandButton1_Click() Me.Repaint OpenClipboard 0& EmptyClipboard Dim OSI As OSVERSIONINFO OSI.dwOSVersionInfoSize = 148 OSI.szCSDVersion = Space$(128) Call GetVersionEx(OSI) If OSI.dwMajorVersion > 4 Then keybd_event VK_SNAPSHOT, 1, 0, 0 Else keybd_event VK_MENU, 0, 0, 0 keybd_event VK_SNAPSHOT, 0, 0, 0 keybd_event VK_SNAPSHOT, 0, KEYEVENTF_KEYUP, 0 keybd_event VK_MENU, 0, KEYEVENTF_KEYUP, 0 End If CloseClipboard DoEvents Application.ScreenUpdating = False Dim NewBook As String Workbooks.Add: ActiveSheet.Paste NewBook = ActiveWorkbook.Name With ActiveSheet.PageSetup .RightFooter = Me.Caption & " Le &D Page &P/&N" .PrintGridlines = False .Orientation = xlLandscape .PaperSize = xlPaperA4 .Zoom = False .FitToPagesWide = 1 .FitToPagesTall = False End With ActiveWindow.Visible = False Application.ScreenUpdating = True Me.Hide On Error Resume Next Windows(NewBook).SelectedSheets.PrintOut Copies:=1 Workbooks(NewBook).Close False Me.Show End Sub
Jil
jil
Bonsoir Michel,
Effectivement cela fonctionne! je pensais bêtement que la première partie de ton code ne se mettait pas dans le module du formulaire mais en module de classe!! Comme quoi, on se complique la vie pour rien des fois.
Par contre, visiblement on passe par une copie d'écran que l'on imprime? Le problème, c'est que mon formulaire en hauteur il fait 400, donc il est au moins en 2 pages. La copie d'écran, et c'est logique ne prend pas mon pied de formulaire...Existe t-il un moyen pour l'imprimer en entier?
Merci pour tes lumières Jil
"Michel Pierron" a écrit dans le message de news:
Bonsoir jil; Colle l'ensemble du code dans le module de ton UserForm; le bouton CommandButton1 correspond à ton bouton d'impression. As tu bien reporté le code tel que mentionné (il suffit de faire un copier-coller).
Tu peux tester l'absence d'erreur en le compilant (Menu Debogage / Compiler
VBAProject).
MP
"jil" a écrit dans le message de news: eIO$
Bonjour à tous,
Je voudrais imprimer, en format paysage et en brouillon, un formulaire affiché à l'écran.L'impression se fait à partir d'un bouton sur ce formulaire.
Michel Pierron m'a gentiment indiqué ce code mais je n'arrive pas à le faire fonctionner. Je ne sais pas trop si tout le code ce met dans le code
du formulaire ou une partie seulement et l'autre en module ou module de classe. Je suis un peu perdue. Merci pour votre aide.
Option Explicit Private Type OSVERSIONINFO dwOSVersionInfoSize As Long dwMajorVersion As Long dwMinorVersion As Long dwBuildNumber As Long dwPlatformId As Long szCSDVersion As String * 128 End Type Private Declare Function GetVersionEx& Lib _ "kernel32" Alias "GetVersionExA" _ (lpVersionInformation As OSVERSIONINFO) Private Declare Sub keybd_event Lib "user32" _ (ByVal bVk As Byte, ByVal bScan As Byte _ , ByVal dwFlags&, ByVal dwExtraInfo&) Private Declare Function OpenClipboard& Lib "user32" (ByVal hwnd&) Private Declare Function EmptyClipboard& Lib "user32" () Private Declare Function CloseClipboard& Lib "user32" () Private Const KEYEVENTF_KEYUP = &H2 Private Const VK_SNAPSHOT = &H2C Private Const VK_MENU = &H12
' Impression écran en paysage Private Sub CommandButton1_Click() Me.Repaint OpenClipboard 0& EmptyClipboard Dim OSI As OSVERSIONINFO OSI.dwOSVersionInfoSize = 148 OSI.szCSDVersion = Space$(128) Call GetVersionEx(OSI) If OSI.dwMajorVersion > 4 Then keybd_event VK_SNAPSHOT, 1, 0, 0 Else keybd_event VK_MENU, 0, 0, 0 keybd_event VK_SNAPSHOT, 0, 0, 0 keybd_event VK_SNAPSHOT, 0, KEYEVENTF_KEYUP, 0 keybd_event VK_MENU, 0, KEYEVENTF_KEYUP, 0 End If CloseClipboard DoEvents Application.ScreenUpdating = False Dim NewBook As String Workbooks.Add: ActiveSheet.Paste NewBook = ActiveWorkbook.Name With ActiveSheet.PageSetup .RightFooter = Me.Caption & " Le &D Page &P/&N" .PrintGridlines = False .Orientation = xlLandscape .PaperSize = xlPaperA4 .Zoom = False .FitToPagesWide = 1 .FitToPagesTall = False End With ActiveWindow.Visible = False Application.ScreenUpdating = True Me.Hide On Error Resume Next Windows(NewBook).SelectedSheets.PrintOut Copies:=1 Workbooks(NewBook).Close False Me.Show End Sub
Jil
Bonsoir Michel,
Effectivement cela fonctionne! je pensais bêtement que la première partie de
ton code ne se mettait pas dans le module du formulaire mais en module de
classe!! Comme quoi, on se complique la vie pour rien des fois.
Par contre, visiblement on passe par une copie d'écran que l'on imprime? Le
problème, c'est que mon formulaire en hauteur il fait 400, donc il est au
moins en 2 pages. La copie d'écran, et c'est logique ne prend pas mon pied
de formulaire...Existe t-il un moyen pour l'imprimer en entier?
Merci pour tes lumières
Jil
"Michel Pierron" <michel.pierron@free.fr> a écrit dans le message de news:
OcLKOC9FGHA.1100@TK2MSFTNGP10.phx.gbl...
Bonsoir jil;
Colle l'ensemble du code dans le module de ton UserForm; le bouton
CommandButton1 correspond à ton bouton d'impression. As tu bien reporté le
code tel que mentionné (il suffit de faire un copier-coller).
Tu peux tester l'absence d'erreur en le compilant (Menu Debogage /
Compiler
VBAProject).
MP
"jil" <jil@tiscali.fr> a écrit dans le message de news:
eIO$C66FGHA.2444@TK2MSFTNGP11.phx.gbl...
Bonjour à tous,
Je voudrais imprimer, en format paysage et en brouillon, un formulaire
affiché à l'écran.L'impression se fait à partir d'un bouton sur ce
formulaire.
Michel Pierron m'a gentiment indiqué ce code mais je n'arrive pas à le
faire fonctionner. Je ne sais pas trop si tout le code ce met dans le
code
du formulaire ou une partie seulement et l'autre en module ou module de
classe. Je suis un peu perdue. Merci pour votre aide.
Option Explicit
Private Type OSVERSIONINFO
dwOSVersionInfoSize As Long
dwMajorVersion As Long
dwMinorVersion As Long
dwBuildNumber As Long
dwPlatformId As Long
szCSDVersion As String * 128
End Type
Private Declare Function GetVersionEx& Lib _
"kernel32" Alias "GetVersionExA" _
(lpVersionInformation As OSVERSIONINFO)
Private Declare Sub keybd_event Lib "user32" _
(ByVal bVk As Byte, ByVal bScan As Byte _
, ByVal dwFlags&, ByVal dwExtraInfo&)
Private Declare Function OpenClipboard& Lib "user32" (ByVal hwnd&)
Private Declare Function EmptyClipboard& Lib "user32" ()
Private Declare Function CloseClipboard& Lib "user32" ()
Private Const KEYEVENTF_KEYUP = &H2
Private Const VK_SNAPSHOT = &H2C
Private Const VK_MENU = &H12
' Impression écran en paysage
Private Sub CommandButton1_Click()
Me.Repaint
OpenClipboard 0&
EmptyClipboard
Dim OSI As OSVERSIONINFO
OSI.dwOSVersionInfoSize = 148
OSI.szCSDVersion = Space$(128)
Call GetVersionEx(OSI)
If OSI.dwMajorVersion > 4 Then
keybd_event VK_SNAPSHOT, 1, 0, 0
Else
keybd_event VK_MENU, 0, 0, 0
keybd_event VK_SNAPSHOT, 0, 0, 0
keybd_event VK_SNAPSHOT, 0, KEYEVENTF_KEYUP, 0
keybd_event VK_MENU, 0, KEYEVENTF_KEYUP, 0
End If
CloseClipboard
DoEvents
Application.ScreenUpdating = False
Dim NewBook As String
Workbooks.Add: ActiveSheet.Paste
NewBook = ActiveWorkbook.Name
With ActiveSheet.PageSetup
.RightFooter = Me.Caption & " Le &D Page &P/&N"
.PrintGridlines = False
.Orientation = xlLandscape
.PaperSize = xlPaperA4
.Zoom = False
.FitToPagesWide = 1
.FitToPagesTall = False
End With
ActiveWindow.Visible = False
Application.ScreenUpdating = True
Me.Hide
On Error Resume Next
Windows(NewBook).SelectedSheets.PrintOut Copies:=1
Workbooks(NewBook).Close False
Me.Show
End Sub
Effectivement cela fonctionne! je pensais bêtement que la première partie de ton code ne se mettait pas dans le module du formulaire mais en module de classe!! Comme quoi, on se complique la vie pour rien des fois.
Par contre, visiblement on passe par une copie d'écran que l'on imprime? Le problème, c'est que mon formulaire en hauteur il fait 400, donc il est au moins en 2 pages. La copie d'écran, et c'est logique ne prend pas mon pied de formulaire...Existe t-il un moyen pour l'imprimer en entier?
Merci pour tes lumières Jil
"Michel Pierron" a écrit dans le message de news:
Bonsoir jil; Colle l'ensemble du code dans le module de ton UserForm; le bouton CommandButton1 correspond à ton bouton d'impression. As tu bien reporté le code tel que mentionné (il suffit de faire un copier-coller).
Tu peux tester l'absence d'erreur en le compilant (Menu Debogage / Compiler
VBAProject).
MP
"jil" a écrit dans le message de news: eIO$
Bonjour à tous,
Je voudrais imprimer, en format paysage et en brouillon, un formulaire affiché à l'écran.L'impression se fait à partir d'un bouton sur ce formulaire.
Michel Pierron m'a gentiment indiqué ce code mais je n'arrive pas à le faire fonctionner. Je ne sais pas trop si tout le code ce met dans le code
du formulaire ou une partie seulement et l'autre en module ou module de classe. Je suis un peu perdue. Merci pour votre aide.
Option Explicit Private Type OSVERSIONINFO dwOSVersionInfoSize As Long dwMajorVersion As Long dwMinorVersion As Long dwBuildNumber As Long dwPlatformId As Long szCSDVersion As String * 128 End Type Private Declare Function GetVersionEx& Lib _ "kernel32" Alias "GetVersionExA" _ (lpVersionInformation As OSVERSIONINFO) Private Declare Sub keybd_event Lib "user32" _ (ByVal bVk As Byte, ByVal bScan As Byte _ , ByVal dwFlags&, ByVal dwExtraInfo&) Private Declare Function OpenClipboard& Lib "user32" (ByVal hwnd&) Private Declare Function EmptyClipboard& Lib "user32" () Private Declare Function CloseClipboard& Lib "user32" () Private Const KEYEVENTF_KEYUP = &H2 Private Const VK_SNAPSHOT = &H2C Private Const VK_MENU = &H12
' Impression écran en paysage Private Sub CommandButton1_Click() Me.Repaint OpenClipboard 0& EmptyClipboard Dim OSI As OSVERSIONINFO OSI.dwOSVersionInfoSize = 148 OSI.szCSDVersion = Space$(128) Call GetVersionEx(OSI) If OSI.dwMajorVersion > 4 Then keybd_event VK_SNAPSHOT, 1, 0, 0 Else keybd_event VK_MENU, 0, 0, 0 keybd_event VK_SNAPSHOT, 0, 0, 0 keybd_event VK_SNAPSHOT, 0, KEYEVENTF_KEYUP, 0 keybd_event VK_MENU, 0, KEYEVENTF_KEYUP, 0 End If CloseClipboard DoEvents Application.ScreenUpdating = False Dim NewBook As String Workbooks.Add: ActiveSheet.Paste NewBook = ActiveWorkbook.Name With ActiveSheet.PageSetup .RightFooter = Me.Caption & " Le &D Page &P/&N" .PrintGridlines = False .Orientation = xlLandscape .PaperSize = xlPaperA4 .Zoom = False .FitToPagesWide = 1 .FitToPagesTall = False End With ActiveWindow.Visible = False Application.ScreenUpdating = True Me.Hide On Error Resume Next Windows(NewBook).SelectedSheets.PrintOut Copies:=1 Workbooks(NewBook).Close False Me.Show End Sub