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

Contribuez Discussion :

[FAQ] Perte des marges dans les états Access [Fait]


Sujet :

Contribuez

  1. #1
    Membre à l'essai
    Profil pro
    Développeur informatique
    Inscrit en
    Juin 2006
    Messages
    13
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2006
    Messages : 13
    Points : 11
    Points
    11
    Par défaut [FAQ] Perte des marges dans les états Access
    Salut à tous,

    J'ai trouvé il y a peu la réponse à l'une de mes grandes questions :
    "Comment faire pour qu'Access conserve des marges spécifiques à un état"

    En effet, Il arrive fréquemment, lorsque l'on crée des états, d'être obligé de modifier la mise en page (marges ou orientation) pour des questions de place ou de positionnement (impression d'étiquettes par exemple)...

    Et, un beau jour, Access décide de remettre les paramètres par défaut.

    Certes, je n'ai pas trouvé ce qui déclenche cette réinitialisation mais j'ai au moins trouvé le moyen de se débarrasser du problème:

    Allez dans le menu Outils/Options
    Dans l'onglet Général, décochez la case Suivi informations correction automatique.

    Quant au rapport entre cette case et la mise en page de l'état, j'aimerais avoir l'avis d'un spécialiste...

  2. #2
    Membre régulier

    Inscrit en
    Août 2005
    Messages
    102
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 102
    Points : 119
    Points
    119
    Par défaut
    Malheureusement je ne trouve pas cette option dans Access 97...
    C'est bien dommage parce que ce problème m'a forcée à remplacer tous mes boutons d'impression automatique par des aperçus avant impression, pour que le client puisse vérifier qu'il ne va pas imprimer une page blanche pour chaque page intéressante, juste à cause d'une marge trop large...

  3. #3
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Citation Envoyé par Meduse
    Malheureusement je ne trouve pas cette option dans Access 97...
    C'est normal elle n'existe pas en Access 97

    C'est bien dommage parce que ce problème m'a forcée à remplacer tous mes boutons d'impression automatique par des aperçus avant impression, pour que le client puisse vérifier qu'il ne va pas imprimer une page blanche pour chaque page intéressante, juste à cause d'une marge trop large...
    Moi j'ai fais une macro que j'appele avant d'imprimer comme cela je suis certain du formatage.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  4. #4
    Futur Membre du Club
    Inscrit en
    Novembre 2010
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 5
    Points : 5
    Points
    5
    Par défaut
    J'ai décoché la case Suivi informations correction automatique.
    J'ai copié l'application sur une autre machine et malheureusement j'ai perdu les marges des états(j'en ai 24). Je travaille sous access 2007.

  5. #5
    Membre expérimenté
    Avatar de Papy Turbo
    Homme Profil pro
    Développeur Office/VBA
    Inscrit en
    Mars 2004
    Messages
    822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Office/VBA
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2004
    Messages : 822
    Points : 1 709
    Points
    1 709
    Par défaut
    Bonjour, Dembasba,

    c'est très regrettable, mais "normal", je pense.
    Sans être sûr à 100%, j'ai cru comprendre que, lorsqu'on change d'imprimante (genre : livraison du développeur aux utilisateurs), Access remet les marges par défaut et/ou essaie d'adapter les marges à la nouvelle imprimante, ce qui s'avère généralement catastrophique.

    La solution de Marot_r est très bonne : une macro à lancer avant chaque état.
    La mienne est + lourde à mettre en oeuvre la 1ère fois, mais très simple dans les applications suivantes :
    - une table des états,
    - pour chaque état, dans la table : orientation et marges,
    - au démarrage, contrôle et mise au point de chaque état (quelques secondes).

    Gretch_34,
    Dans l'onglet Général, décochez la case Suivi informations correction automatique.
    Ça marche ? Si oui, c'est étonnant, non ?
    Développement Office, support technique, assistance, sur place (Loire atlantique, Vendée, Maine et Loire) ou à distance.

  6. #6
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Bonne idée, Papy Turbo, la table avec les paramètres.

    As-tu du code associé ou tu fais cela à la main ?

    Si tu as du code, accepterais-tu le poster ?

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  7. #7
    Membre expérimenté
    Avatar de Papy Turbo
    Homme Profil pro
    Développeur Office/VBA
    Inscrit en
    Mars 2004
    Messages
    822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Office/VBA
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2004
    Messages : 822
    Points : 1 709
    Points
    1 709
    Par défaut
    Bonjour, Marot_r

    Nouveau dans l'équipe Office ? Welcome :o)

    Oui, j'ai pris du temps avant de te répondre (j'aurais dû le faire avant de répondre à ce message), pour voir comment j'avais fait ça.
    Ça fait partie d'une usine à gaz que j'avais mise au point pour Access 2000, avec un collection de Printers, une classe Printer (équivalents de Printers + printer sous Axs 2003 + toutes autres propriétés dispo dans PrtDevmode et autres), une classe flReport (états avec propriétés extraites, entre autres, de PrtMips -> marges/orientation...)
    Bref, des APIs pas 100% stables, ce qui fait que j'ai évité de m'en servir. Faudra voir si je peux en extraire juste un noyau simple pour faire ça, mais (pas testé), il y a sûrement un moyen beaucoup + rapide avec Axs 2003 et suivants ?

    Pour l'instant, je t'encouragerais plutôt à publier ta macro qui sera sûrement + simple et + efficace ?
    Développement Office, support technique, assistance, sur place (Loire atlantique, Vendée, Maine et Loire) ou à distance.

  8. #8
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Bonjour à toi, Papy Turbo.

    Simple, stable, dépendant de la langue et pas très rapide.

    J'ai fait cela il y a longtemp :-( et je n'ai pas gardé le code.

    En gros c'est une série de SendKey qui activent les options du menu de mise en pas du genre [Alt][F] pour ouvrir le menu des fichiers, [Alt][I] pour imprimer etc. Il faut inventorier la séquence de touche à la main et apparement cela ne marche que dans une macro. Je n'avais pas réussi à le faire en VBA.

    C'est un peu pour cela que j'étais interressé par ta solution :-).

    Les DoCmd.RunCommand permmettent peut-être de faire cela plus proprement mais je n'ai pas eu l'occasion d'en avoir rebesoin et donc d'approfondir le sujet.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  9. #9
    Membre habitué
    Homme Profil pro
    Inscrit en
    Août 2003
    Messages
    185
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2003
    Messages : 185
    Points : 173
    Points
    173
    Par défaut
    Bonjour,



    Mince, je pensais trouver ici une idée pour répondre à un de mes cauchemars lorsqu'on distribue une application Access.

    L'application que nous déployons fait appel à deux imprimantes. Une pour imprimer des étiquettes. L'autre pour les rapports. Bien évidemment, les imprimantes ne sont pas toutes pareilles et chez nous, et chez nos clients. Ni même d'un poste de travail à l'autre chez un même client.

    Si définir une imprimante liée à un pc en particulier ne pose pas de problème, la perte des marges nous oblige très fréquemment à intervenir chez les clients pour reconfigurer entre-autres, les rapports qui doivent être imprimés en mode paysage, et les états qui donnent lieu aux étiquettes pour en régler les marges.

    Un bout de code me donnant une idée pour régler ce problème de façon définitive m'aurait bien aidé.

    J'ai déjà programmé pas mal de tentatives de solution, notamment en utilisant la FAQ du site pour régler les imprimantes à utiliser temporairement, mais ce problème de marge persiste et me hante.

    Dommage.

  10. #10
    Membre habitué
    Homme Profil pro
    Inscrit en
    Août 2003
    Messages
    185
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2003
    Messages : 185
    Points : 173
    Points
    173
    Par défaut
    En fait, décocher la case pour le suivi des corrections auto fonctionne peut-être pour les imprimantes par défaut. Mais lorsqu'il s'agit d'une imprimante spécifique, même avec l'option décochée, mes marges et mon orientation sont perdues.

  11. #11
    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
    Bonjour.
    J'ai été aussi confronté à ce problème de marges et d'orientation sur des applications tournant sous Access 2000 et dont je ne peux contrôler la version d'access et de jet qui est installée, et avec diverses imprimantes.

    J'ai il y a longtemps, et je n'ai plus la source, déniché une méthode permettant de résoudre le problème, mais avec l'inconvénient de passer par une ouverture de l'état en mode création. D'où impossibilité de l'utiliser dans des bases mde (ou accde).

    Cette méthode pourrait peut-être être utile à quelqu'un, c'est pourquoi je la propose à vos avis éclairés!
    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
    53
     
    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.
    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
    Cordialement.
    N'oubliez pas de tagguer la discussion comme résolue si vous avez été aidé!
    Plus haut monte le singe, plus il montre son cul (Montaigne)
    Je ne réponds pas aux messages personnels concernant des questions discutées dans le forum.

Discussions similaires

  1. Réponses: 2
    Dernier message: 31/05/2013, 12h48
  2. Réponses: 1
    Dernier message: 20/02/2009, 13h57
  3. Faire des calculs dans les états
    Par bobosh dans le forum IHM
    Réponses: 1
    Dernier message: 09/09/2008, 13h36
  4. tri dans les états access
    Par papaours78 dans le forum IHM
    Réponses: 1
    Dernier message: 19/06/2007, 12h03
  5. Gestion des durées dans les tables Access
    Par climz dans le forum Requêtes et SQL.
    Réponses: 17
    Dernier message: 24/05/2006, 15h29

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