Dans un formulaire, comment faire en sorte que la couleur (ou le gras, italique...) d'un champ varie en fonction de sa valeur ?
Access 97 ne prévoit aucune option pour définir une mise en forme variable. Il est possible de "bidouiller" pour obtenir un résultat, mais ce n'est pas nécessairement pratique.
Access 2000 au contraire comporte une option nouvelle : la mise en forme conditionnelle (menu Format / Mise en forme conditionnelle). Voici un exemple :
Pour effectuer ces réglages :
Pour le champ CodePostal, les réglages seraient :
Le format conditionnel permet dans certains cas d'effectuer une coloration "1 ligne sur 2". Dans notre exemple, la table comporte un champ supplémentaire (Numero), comportant des valeurs consécutives (1, 2, 3...).
(Formulaires!frmSociétés!Numero mod 2)=0
où :
- frmSociétés est le nom du formulaire dans la base de données,
- Numero est le nom du champ pouvant être pair ou impair.
x mod 2 est le résultat de la division du nombre x par 2. Il vaut donc 0 pour un chiffre pair, et 1 pour un chiffre impair. Du coup (x mod 2)=0 est soit Vrai, soit Faux.
Dans le cas traité ci-dessus, le champ Numero doit être saisi dans la table, manuellement, et un tri sur un autre champ fausse le système (puisque les numéros pairs ne seront plus forcément consécutifs). Pour pallier ces problèmes, on peut faire la chose suivante :
=NumeroLigne(Formulaires!frmSociétés)
Function NumeroLigne(frm As Form) Dim rst As RecordsetOn Error Goto NumeroLigneErr Set rst = frm.RecordsetClone rst.Bookmark = frm.Bookmark NumeroLigne = rst.AbsolutePosition Set rst = Nothing Exit FunctionNumeroLigneErr: Set rst = Nothing NumeroLigne = Null Exit Function End Function
Et la cerise sur le gâteau : définissez la propriété "Visible" du champ Numero à "Faux".
Si le formulaire
est utilisé comme sous-formulaire, ça ne marche plus ! Il faut alors
remplacer la condition par :
(Formulaires!frmFormulairePrincipal![Liste des sociétés].Form!Numero mod 2)=0
- frmFormulairePrincipal étant le nom du formulaire qui contient le sous-formulaire frmSociétés,
- "Liste des sociétés" étant le nom du sous-formulaire frmSociétés, tel qu'il est placé sur frmFormulairePrincipal (ce nom peut être différent de frmSociétés).
A mon -- humble -- avis, cette nouvelle fonction de format conditionnel a été un peu "bâclée" par Microsoft. D'après quelques tests rapides :