Il y a peut-être un moyen plus simple, mais voici ce que j’utilise et qui fonctionne bien.
J’ai un module « Impressions » qui gère toutes les impressions.
Dans les Déclarations :
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 46 47 48 49 50 51 52
| Private Type ch_PRTMIP
chRGB As String * 28
End Type
Private Type type_PRTMIP
xMargeGauche As Long
yMargeHaut As Long
xMargeDroite As Long
yMargeBas As Long
fDonnéesSeulement As Long
xLargeur As Long
yHauteur As Long
fTailleDesEléments As Long
xNombreDeColonnes As Long
yEspacementDeColonnes As Long
xEspacementDeLignes As Long
rDisposition As Long
fImpressionRapide As Long
fFeuilleDeDonnées As Long
End Type
Private Type ch_DEVMODE
RGB As String * 94
End Type
Private Type type_DEVMODE
chNomPériphérique As String * 16
entSpécVersion As Integer
entVersionGestionnaire As Integer
entTaille As Integer
entExtraGestionnaire As Integer
lngChamps As Long
entOrientation As Integer
entTaillePapier As Integer
entLongueurPapier As Integer
entLargeurPapier As Integer
entEchelle As Integer
entCopies As Integer
entSourceDéfaut As Integer
entQualitéImpression As Integer
entCouleur As Integer
entRectoverso As Integer
entResolution As Integer
entOptionTT As Integer
entAssembler As Integer
entNomFormulaire As String * 16
lngPad As Long
lngBits As Long
lngPW As Long
lngPH As Long
lngDFI As Long
lngDFr As Long
End Type |
Puis les fonctions de « mise en page ». Voici trois exemples, le premier pour un mode paysage, le second pour un mode portrait, et le troisième pour des étiquettes:
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
| Public Sub Paysage(Etat As String)
Const DM_PORTRAIT = 1
Const DM_PAYSAGE = 2
Dim ChaînePrtMip As ch_PRTMIP
Dim PM As type_PRTMIP
Dim ChaînePér As ch_DEVMODE
Dim DM As type_DEVMODE
Dim chExtraModPér As String
Dim rpt As Report
DoCmd.OpenReport Etat, acDesign
Set rpt = Reports(Etat)
chExtraModPér = rpt.PrtDevMode
ChaînePér.RGB = chExtraModPér
LSet DM = ChaînePér
DM.lngChamps = DM.lngChamps Or DM.entOrientation
DM.entOrientation = DM_PAYSAGE
LSet ChaînePér = DM
Mid(chExtraModPér, 1, 94) = ChaînePér.RGB
rpt.PrtDevMode = chExtraModPér
ChaînePrtMip.chRGB = rpt.PrtMip
LSet PM = ChaînePrtMip
PM.xMargeGauche = 835
PM.yMargeHaut = 835
PM.xMargeDroite = 835
PM.yMargeBas = 835
LSet ChaînePrtMip = PM ' Met à jour la propriété.
rpt.PrtMip = ChaînePrtMip.chRGB
DoCmd.Close acReport, Etat, acSaveYes
End Sub |
Code :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| Public Sub MargesParDéfaut(Etat As String)
Dim ChaînePrtMip As ch_PRTMIP
Dim PM As type_PRTMIP
Dim rpt As Report
DoCmd.OpenReport Etat, acDesign
Set rpt = Reports(Etat)
ChaînePrtMip.chRGB = rpt.PrtMip
LSet PM = ChaînePrtMip
PM.xMargeGauche = 963 '1 * 1440 963=16,98mm
PM.yMargeHaut = 835 '1 * 1440
PM.xMargeDroite = 963 '1 * 1440
PM.yMargeBas = 835 '1 * 1440
LSet ChaînePrtMip = PM ' Met à jour la propriété.
rpt.PrtMip = ChaînePrtMip.chRGB
DoCmd.Close acReport, Etat, acSaveYes
End Sub |
Code :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| Public Sub ColonnesA(Etat As String)
Dim ChaînePrtMip As ch_PRTMIP
Dim PM As type_PRTMIP
Dim rpt As Report
DoCmd.OpenReport Etat, acDesign
Set rpt = Reports(Etat)
ChaînePrtMip.chRGB = rpt.PrtMip
LSet PM = ChaînePrtMip
PM.xNombreDeColonnes = 2
PM.yEspacementDeColonnes = 422
PM.xEspacementDeLignes = 354
PM.xMargeGauche = 510 '1 * 1440 963=16,98mm
PM.yMargeHaut = 432
PM.xMargeDroite = 310
PM.yMargeBas = 835
LSet ChaînePrtMip = PM ' Met à jour la propriété.
rpt.PrtMip = ChaînePrtMip.chRGB
DoCmd.Close acReport, Etat, acSaveYes
End Sub |
Les valeurs de marges, espacements, etc … sont exprimées en twips. 1mm = 1440/25.4 twips. Donc, pour une marge de 17 mm, il faut mettre 963.
Lorsque l’on lance une impression, on applique la fonction qui convient à l’état qu’on imprime.
Exemple :
Code :
1 2 3 4
| Function MonEtat()
MargesParDéfaut "MonEtat"
DoCmd.OpenReport "MonEtat", acPreview
End Function |
Si tu veux que l’état s’imprime sans visualisation préalable, tu supprimes le ,acPreview.
Ce système a un inconvénient : la fonction qui permet la mise en page doit ouvrir l’état en mode création et le sauvegarder, donc, ça ne marche pas avec un fichier mde ou accde. L’ouverture et la fermeture lors de la mise en page sont quasi instantanées et pas gênantes.
Cordialement.