Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > Contribuez
Contribuez Access : Vos contributions. Postez ici vos codes sources, conseils, astuces et autres propositions. Ce forum n'est pas un forum technique mais destiné aux contributions pour www.developpez.com
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 27/06/2006, 12h19   #1
Invité régulier
 
Développeur informatique
Inscription : juin 2006
Messages : 13
Détails du profil
Informations personnelles :
Âge : 38
Localisation : France, Hérault (Languedoc Roussillon)

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : juin 2006
Messages : 13
Points : 7
Points : 7
Envoyer un message via MSN à Gretch_34
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...
Gretch_34 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/06/2006, 17h35   #2
Membre régulier
 
Inscription : août 2005
Messages : 102
Détails du profil
Informations forums :
Inscription : août 2005
Messages : 102
Points : 94
Points : 94
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...
Meduse est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/06/2006, 20h09   #3
Modérateur
 
Homme René MAROT
Inscription : octobre 2005
Messages : 5 479
Détails du profil
Informations personnelles :
Nom : Homme René MAROT
Localisation : Canada

Informations forums :
Inscription : octobre 2005
Messages : 5 479
Points : 7 568
Points : 7 568
Citation:
Envoyé par Meduse
Malheureusement je ne trouve pas cette option dans Access 97...
C'est normal elle n'existe pas en Access 97

Citation:
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+
marot_r est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/08/2011, 14h14   #4
Invité de passage
 
Inscription : novembre 2010
Messages : 5
Détails du profil
Informations forums :
Inscription : novembre 2010
Messages : 5
Points : 2
Points : 2
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.
dembasba est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/08/2011, 10h45   #5
Membre Expert
 
Avatar de Papy Turbo
 
Homme Etienne Pailleret
Développeur VBA
Inscription : mars 2004
Messages : 748
Détails du profil
Informations personnelles :
Nom : Homme Etienne Pailleret
Localisation : France, Hauts de Seine (Île de France)

Informations professionnelles :
Activité : Développeur VBA

Informations forums :
Inscription : mars 2004
Messages : 748
Points : 1 105
Points : 1 105
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,
Citation:
Dans l'onglet Général, décochez la case Suivi informations correction automatique.
Ça marche ? Si oui, c'est étonnant, non ?
Papy Turbo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/08/2011, 15h19   #6
Modérateur
 
Homme René MAROT
Inscription : octobre 2005
Messages : 5 479
Détails du profil
Informations personnelles :
Nom : Homme René MAROT
Localisation : Canada

Informations forums :
Inscription : octobre 2005
Messages : 5 479
Points : 7 568
Points : 7 568
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.
marot_r est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/08/2011, 17h30   #7
Membre Expert
 
Avatar de Papy Turbo
 
Homme Etienne Pailleret
Développeur VBA
Inscription : mars 2004
Messages : 748
Détails du profil
Informations personnelles :
Nom : Homme Etienne Pailleret
Localisation : France, Hauts de Seine (Île de France)

Informations professionnelles :
Activité : Développeur VBA

Informations forums :
Inscription : mars 2004
Messages : 748
Points : 1 105
Points : 1 105
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 ?
Papy Turbo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/08/2011, 21h29   #8
Modérateur
 
Homme René MAROT
Inscription : octobre 2005
Messages : 5 479
Détails du profil
Informations personnelles :
Nom : Homme René MAROT
Localisation : Canada

Informations forums :
Inscription : octobre 2005
Messages : 5 479
Points : 7 568
Points : 7 568
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.
marot_r est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/09/2011, 14h08   #9
Membre habitué
 
Homme Georges HAROT
Inscription : août 2003
Messages : 122
Détails du profil
Informations personnelles :
Nom : Homme Georges HAROT
Âge : 53
Localisation : Belgique

Informations forums :
Inscription : août 2003
Messages : 122
Points : 104
Points : 104
Envoyer un message via MSN à Geache
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.
Geache est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/09/2011, 14h30   #10
Membre habitué
 
Homme Georges HAROT
Inscription : août 2003
Messages : 122
Détails du profil
Informations personnelles :
Nom : Homme Georges HAROT
Âge : 53
Localisation : Belgique

Informations forums :
Inscription : août 2003
Messages : 122
Points : 104
Points : 104
Envoyer un message via MSN à Geache
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.
Geache est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/09/2011, 12h39   #11
Membre éprouvé
 
Homme Robert LINCE
Conseiller psycho-pédagogique
Inscription : octobre 2007
Messages : 281
Détails du profil
Informations personnelles :
Nom : Homme Robert LINCE
Localisation : Belgique

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

Informations forums :
Inscription : octobre 2007
Messages : 281
Points : 483
Points : 483
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 :
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 :
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.
Code :
1
2
3
4
Function MonEtat()
MargesParDéfaut "MonEtat"
DoCmd.OpenReport "MonEtat", acPreview
End Function
Cordialement.
RobiPMS est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 23h48.


 
 
 
 
Partenaires

Hébergement Web