FAQ MS-Access

FAQ MS-AccessConsultez toutes les FAQ
Nombre d'auteurs : 140, nombre de questions : 926, dernière mise à jour : 15 juin 2021
Sommaire→États- Comment exporter un état au format Word ?
- Comment annuler l'ouverture d'un état ?
- Comment exporter un état tout en conservant la mise en page ?
- Dans un état, comment dans le bas de page afficher la somme d'un champ du détail ?
- Comment faire du formatage conditionnel dans un état ?
- Comment afficher un état en plein écran et avec un zoom personnalisé ?
- Comment ajuster la prévisualisation d'un état à la fenêtre en VBA ?
- Comment insérer un numéro de ligne dans un état ?
- Pourquoi le message : "Alias de sortie 'Expr1' dupliqué" lorsque je lance mon état ?
- Problème d'affichage des chiffres dans les états. Pourquoi les chiffres ne sont-ils pas visibles à l'ouverture, ou à l'impression ?
- Comment compter le nombre d'enregistrements dans chaque groupe d'un état ?
- Comment masquer (ou réduire/ajuster la hauteur) d'une section en fonction des données ?
- Dans un état Access, on trouve une boite de dialogue "Trier / Regrouper", cette fonction est-elle programmable ?
- Comment empêcher la perte des marges d'un état ?
- Comment imprimer un état situé sur une base distante ?
- Comment choisir le mode d'affichage d'un état depuis un formulaire ?
- Comment ne pas perdre la mise en page d'un état ?
- Comment créer un graphique paramétrable depuis un formulaire vers un état ?
- Comment afficher un état en plein écran avec un zoom ajusté ?
8.1. Impressions
(12)
8.2. États Trucs et Astuces
(11)
DoCmd.OutputTo acOutputReport, "Etat Utilisateur", acFormatRTF, "c:\mes documents\tmp.doc", TrueLorsqu'un état ne contient pas de donnée, son événement Sur Aucune Donnée (NoData) est levé.
Pour annuler l'ouverture de l'état, il suffit de fixer le paramètre Cancel de la procédure Report_NoData à True.
Exemple :
Private Sub Report_NoData(Cancel As Integer)
MsgBox "Impossible d'ouvrir l'état : aucune donnée à afficher",VbCritical
Cancel = True
End SubSolution 1 : il faut acquérir le logiciel Adobe Acrobat Writer. Il suffit alors d'imprimer sur PDF writer.
Solution 2 : l'utilitaire Snapshot Viewer exporte votre état sur un fichier d'extension SNP. Ce fichier peut alors être envoyé attaché à un e-mail. Tout ce dont le destinataire a besoin, pour lire ce fichier, c'est l'utilitaire précité, sans qu'il ait à posséder Access.
Snapshot est téléchargeable sur le site de Microsoft.
Télécharger SnapShot pour Access 97/2000/2002 : http://www.microsoft.com/downloads/details.aspx?familyid=b73df33f-6d74-423d-8274-8b7e6313edfb&displaylang=fr
Pour obtenir une somme en bas de page, il suffit de créer un contrôle invisible dans la section détail qui contiendra la somme, puis y faire référence dans une zone de texte du pied de page.
Il faut utiliser l'événement Au formatage de la section concernée :
Private Sub Détail_Format(Cancel As Integer, FormatCount As Integer)
If Me![nomControle] < "0" Then
Me![SourcEcr].ForeColor = 16777215
Else
Me![SourcEcr].ForeColor = 0
End If
End SubDoCmd.OpenReport "Etat Utilisateur", AcView.acViewPreview
DoCmd.RunCommand acCmdZoom150
DoCmd.MaximizePlusieurs solutions :
- cette propriété non documentée :
DoCmd.OpenReport "NomEtat", acViewPreview
Reports("NomEtat").ZoomControl = 0- la méthode documentée qui correspond est :
DoCmd.OpenReport "NomEtat", acViewPreview
DoCmd.RunCommand acCmdFitToWindowProcédure à suivre :
- insérer un contrôle TextBox ;
- dans l'onglet Données de la boîte de propriétés :
propriété Source contrôle, mettre la valeur "=1",
propriété Cumul : "Par groupe".
Cela veut dire que votre requête source essaie de renvoyer un jeu d'enregistrements avec deux colonnes ayant le même nom, et ce n'est pas possible.
Ceci concerne Access 2000. Il s'agit d'un aspect connu et recensé par Microsoft.
Une clé du registre (1025) a pour valeur 'On'.
La solution consiste à la mettre à Off dans l'éditeur de registre (Démarrer/Exécuter, taper regedit, puis Cliquer OK)
Voici son emplacement :
HKEY_CURRENT_USERS\Software\Microsoft\Office\9.0\Common\LanguageResources\1025.
Pour toute information supplémentaire à ce sujet, il est possible de se référer à la KB de Microsoft à cette adresse :
http://www.microsoft.com/intlkb/france/articles/F19/5/16.asp
Vous pouvez afficher le nombre d'enregistrements par groupe en utilisant
une zone de texte dans l'en-tête ou le pied du groupe. Dans la propriété
Source contrôle, vous saisirez =Compte([Champ]) en remplaçant
Champ par le nom d'un champ valide. Vous pouvez également utiliser l'astérisque.
Vous pouvez utiliser cette technique dans l'en-tête ou le pied de page de l'état.
Il suffit de jouer sur la propriété autoréductible du contrôle et de la section. Ceci est valable également pour les en-têtes et pieds de section.
L'équivalent de la boite de dialogue Trier/Regrouper doit se trouver dans la méthode CreateGroupLevel de l'objet Application, mais celle-ci n'est disponible que pour un état en mode création. Elle est notamment utile pour créer un assistant de création d'états.
CreateGroupLevel doit être utilisé en mode création, mais si le niveau de regroupement est déjà créé, on peut alors utiliser la propriété GroupLevel de l'état.
Cette propriété est utilisable dans tous les modes et s'accompagne d'autres propriétés utiles comme SortOrder, GroupOn, GroupInterval, KeepTogether et ControlSource.
Sur l'événement Open de l'état, vous pouvez changer ses propriétés selon vos besoins.
Exemple :
Me.GroupLevel(2).ControlSource = "LeChampATrier"
Me.GroupLevel(2).SortOrder = False
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)...
Mais il peut arriver qu'Access décide de remettre les paramètres par défaut.
Un moyen d'éviter ce problème (depuis Access 2000) :
allez dans le menu Outils/Options ;
dans l'onglet Général, décochez la case Suivi informations correction automatique.
En utilisant l'automation Access.
Les arguments de la fonction sont :
. chemin de la base distante ;
. nom de l'état ;
. page de départ ;
. page de fin.
Function PrintRemoteReport(ByVal strMDB As String, _
ByVal strReport As String, _
Optional ByVal iStart As Integer = 1, _
Optional ByVal iEnd As Integer = 9999) As Boolean
Dim objAccess As Access.Application
Dim lngRet As Long
' Gestion d'erreurs
On Error GoTo PrintRemoteReport_Err
If Len(Dir(strMDB)) > 0 Then
' Création de l'objet Access
Set objAccess = New Access.Application
With objAccess
' Ouverture de la base
.OpenCurrentDatabase strMDB
' Les commandes sont les mêmes que pour la base en cours
' hormis le "objAccess."
' Ouverture de l'état
.DoCmd.OpenReport strReport, acViewNormal
' Impression des pages
.DoCmd.PrintOut acPages, iStart, iEnd, acHigh
' Fermeture de l'état sans sauvegarde
.DoCmd.Close acReport, strReport, acSaveNo
End With
End If
PrintRemoteReport_Exit:
' Libération des objets
On Error Resume Next
objAccess.Quit
Set objAccess = Nothing
Exit Function
PrintRemoteReport_Err:
PrintRemoteReport = False
Select Case Err.Number
Case 7866:
' MDB ouverte en mode exclusif
MsgBox "La base demandée " & vbCrLf & strMDB & _
vbCrLf & " est actuellement ouverte en mode exclusif. " & vbCrLf _
& vbCrLf & "Merci de la rouvrir en accès partagé.", _
vbExclamation + vbOKOnly, "Impossible d'ouvrir la base"
Case 2103:
' L'état n'existe pas
MsgBox "L'état '" & strReport & _
"' n'existe pas dans la base " _
& vbCrLf & strMDB, _
vbExclamation + vbOKOnly, "État non trouvé"
Case 7952:
' L'utilisateur a fermé le fichier .mdb
PrintRemoteReport = True
Case Else:
MsgBox "Error#: " & Err.Number & vbCrLf & Err.Description, _
vbCritical + vbOKOnly, "Runtime error"
End Select
Resume PrintRemoteReport_Exit
End FunctionExemple d'utilisation :
PrintRemoteReport "d:\temp\db.mdb", "MonEtat", 1, 10DocmdOpenReport, ReportName, acViewPreview
DoCmd.RunCommand acCmdPreviewOnePageLe code ci-dessus affichera les états en mode paysage (à l'italienne).
Si vous voulez les afficher sur deux pages les états en mode portrait (à la française) remplacez la seconde ligne par :
DoCmd.RunCommand acCmdPreviewTwoPagesUn conseil : explorez les autres options de RunCommand acCmdPreview afin de découvrir d'autres possibilités qu'offre Access.
Il faut définir une mise en page spécifique pour un état via le menu [Fichier | Mise en page...] sans oublier, bien sûr, d'enregistrer l'état après la mise en page. Ainsi cette mise en page sera conservée et appliquée, quel que soit le poste utilisateur.
Il existe un défaut majeur d'Access 2000 qui perd les informations de mise en page.
Pour y remédier il faut :
>> mettre à jour Access/Office avec le package SR-1a (et au passage installer le SP3).
http://office.microsoft.com/fr-fr/of...226001036.aspx
>> à défaut, dans la boîte de dialogue des Options (obtenues via [Outils[Options...]), sélectionner l'onglet [Général] et désactiver les commandes de la section
[Correction automatique de nom..].
http://support.microsoft.com/default...b;en-us;240826
>> des utilisateurs indiquent que les infos de mise en page sont perdues si une imprimante spécifique est désignée et qu'elle n'est pas référencée sur le poste client.
Donc préférer l'imprimante par défaut.
Il suffit depuis votre formulaire d'attribuer le SQL à une requête et d'attribuer cette requête comme source de données à l'état ainsi ne reste plus qu'à changer le SQL à la volée et l'état s'en trouvera automatiquement modifié.
Pour exécuter ce code, il faut activer la référence : Microsoft DAO 3.x Object Library.
CurrentDb.QueryDefs("MaRequeteGraph").SQL = strSQLLien : Définition et manipulation de données avec DAO par Tofalu
Ces codes permettent d'ouvrir un état avec le zoom ajusté à la taille de l'écran au lieu du zoom à 100 % par défaut.
Code OtObOx :
Code sur le principe de la Source de Tofalu (Simuler l'appui de n'importe quelle touche du clavier (exemple avec CAPSLOCK))
dans un module, mettre le code de Tofalu :
Public Declare Sub keybd Lib "user32" Alias "keybd_event" _
(ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, _
ByVal dwExtraInfo As Long)
Public Sub appui_touche(T as long)
' Appuie sur la touche
keybd T, 0, 0, 0
' Relâche la touche
keybd T, 0, 2, 0
End SubEnsuite dans le module de l'état mettre sur l'événement "sur ouverture" :
Private Sub Report_Open(Cancel As Integer)
' Agrandit la fenêtre au maximum
DoCmd.Maximize
' Ajuste l'affichage de la page à la taille de l'écran
appui_touche (90)
End Sub
Code de FreeAccess
À partir d'un formulaire, mettre le code suivant sur l'événement "Sur clic" d'un bouton" :
Private Sub Commande0_Click()
' Ouvrir état en mode Ajusté
DoCmd.OpenReport "E_ESSAI", acViewPreview
DoCmd.Maximize
DoCmd.RunCommand acCmdFitToWindow
End SubL'état doit être "actif" AVANT que les commandes Maximize et acCmdFitToWindow ne soient exécutées.
Lien : Simuler l'appui de n'importe quelle touche du clavier (Exemple avec CAPSLOCK) par Christophe WARIN
Lien : Comment afficher un état en plein écran et avec un zoom personnalisé ?



