<Retour Grenier>

Début de page Question

Dans un formulaire, comment faire en sorte que la couleur (ou le gras, italique...) d'un champ varie en fonction de sa valeur ?

 

Début de page Réponse

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 :

capFormatCond3.gif (6951 octets)

Pour effectuer ces réglages :

  1. Ouvrez le formulaire en mode Création (il est également possible de faire l'opération en mode Formulaire).
  2. Cliquez dans l'un des champs à définir (par exemple : CA).
  3. Cliquez sur le menu Format, puis sur l'option Mise en forme conditionnelle.
  4. Réglez les options de la boîte de dialogue comme suit (le bouton Ajouter permet de créer des conditions supplémentaires) :

 

Pour le champ CodePostal, les réglages seraient :

 

Début de page Mise en forme "1 ligne sur 2" : version 1

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ù :

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.

 

Début de page Mise en forme "1 ligne sur 2" : version 2

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 Recordset
On Error Goto NumeroLigneErr
Set rst = frm.RecordsetClone
rst.Bookmark = frm.Bookmark
NumeroLigne = rst.AbsolutePosition
Set rst = Nothing
Exit Function
NumeroLigneErr:
	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".

 

Début de page Cas des sous-formulaires

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

 

Début de page Quelques compléments

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 :