IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

IHM Discussion :

personalisation d un etat avec vba


Sujet :

IHM

  1. #1
    Candidat au Club
    Inscrit en
    Octobre 2007
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 3
    Points : 3
    Points
    3
    Par défaut personalisation d un etat avec vba
    * Bonjour, *

    Bon voila j'ai développer une application pour des caisses enregistreuses sous access 2003

    mais je possède plusieurs points de vente et plusieurs marques imprimantes.
    mon problème est lorsque je fais des modification sur mes logiciels je dois a chaque fois me reconnecter sur chaque point de vente pour faire une mise en pages

    D'où ma question serai il possible à l'aide d une macro de mettre un code qui me redimensionne mes états au format que je désire

    ps : dans le code sil y a possibilité d'avoir une impression direct sans aperçu

    merci

  2. #2
    Membre expérimenté Avatar de RobiPMS
    Homme Profil pro
    Conseiller psycho-pédagogique
    Inscrit en
    Octobre 2007
    Messages
    827
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Conseiller psycho-pédagogique
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2007
    Messages : 827
    Points : 1 506
    Points
    1 506
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

Discussions similaires

  1. [AC-2013] Sous-Etat avec VBA dans un Etat
    Par CrasherSEP dans le forum IHM
    Réponses: 4
    Dernier message: 03/03/2015, 15h45
  2. Etat avec sous formulaire VBA
    Par superpye dans le forum VBA Access
    Réponses: 1
    Dernier message: 08/06/2008, 00h27
  3. afficher la barre de menus complète avec vba
    Par jejestyle dans le forum Access
    Réponses: 7
    Dernier message: 07/09/2006, 18h07
  4. Etat avec source VBA
    Par Sam 069 dans le forum Access
    Réponses: 3
    Dernier message: 17/07/2006, 13h05
  5. problème avec VBA
    Par Delph dans le forum Langage
    Réponses: 2
    Dernier message: 19/08/2002, 13h15

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo