Colorier la ligne active dans Access

Comment colorier entièrement la ligne correspondant à l’enregistrement actif, dans un formulaire Access ?

Surbrillance de ligne

Le scénario

Je dispose d’un formulaire Personnes, illustré ci-dessus. Les champs importent peu, ici, sauf le champ Code Personne (clef numérique). Le formulaire est affiché en mode Tabulaire… ou « Formulaires multiples« … ou encore « Plusieurs formulaires » ; Microsoft, merci de donner un terme stable et cohérent à ce mode de formulaire ! 😉

L’objectif est donc de colorier la ligne active de ce formulaire, automatiquement bien sûr.

La fausse bonne idée

On pourrait être tenté d’utiliser l’événement Sur activation (Form_Current) du formulaire, et d’y placer du code VBA pour appliquer les changements de couleur. Le problème est que cet événement est déclenché de la même manière pour toutes les lignes du formulaire. Ce n’est pas ce que nous voulons !

Pour ceux qui voudraient tenter, imaginons que vous modifiiez l’événement Sur activation du formulaire pour attribuer une couleur au champ Nom. Vous écririez par exemple :

Mais voici ce que vous obtiendriez, quelle que soit la ligne active du formulaire :

Surbrillance incorrecte

La vraie bonne idée

Dans ce cas précis, la mise en forme conditionnelle est votre amie. Mais il faut quand même un peu de mise en place pour détecter l’enregistrement en cours.

Voici la procédure à suivre :

  1. Ouvrez votre formulaire en mode Création.
  2. Ajoutez un champ Texte indépendant, que vous appelez par exemple txtCodePersonneActive. Ce champ va servir à mémoriser la valeur du champ Code Personne actif.
  3. Ajoutez le code suivant à votre formulaire ; l’idée est de programmer l’événement Sur activation, simplement pour transférer la valeur Code Personne dans le champ txtCodePersonneActive :

  1. Sélectionnez les champs du formulaire (la zone Détail plus précisément ; vous pouvez cliquer sur la règle graduée à gauche de cette zone Détail pour faire une sélection rapide).
  2. Activez l’onglet Format du ruban, puis sur l’icône Mise en forme conditionnelle.
    Mise en forme conditionnelle
  3. Cliquez sur le bouton Nouvelle règle.
  4. Dans la liste déroulante centrale, choisissez Expression.
  5. Renseignez cette formule à droite de Expression :

  1. Choisissez également votre mise en forme dans la partie basse de la boîte : gras, italique, souligné, couleur de fond, couleur de texte. Mes réglages ressemblent à ça :
    Règle de mise en forme conditionnelle

Passez en mode Formulaire, déplacez-vous de ligne en ligne : c’est fait ! 🙂

Surbrillance de ligne

Les finitions

La zone de texte txtCodePersonneActive, que j’ai placée dans l’en-tête de formulaire, est visible pour l’utilisateur. Ça vous permet aussi de vérifier que tout se passe comme prévu. Une fois vos tests terminés, vous pouvez la masquer :

  1. En mode Création de formulaire, faites apparaître les propriétés de cette zone de texte.
  2. Sous l’onglet Format, réglez Visible = Non.

Vous aimerez aussi...

30 réponses

  1. ButteDuLac dit :

    J’ai essayé, mais je suis dans un formulaire créé à partir d’une requête et la requête ne contient pas mon champ clé primaire. J’ai donc essayé avec un autre champ contenu dans mon formulaire, sans succès… est-ce que ça doit obligatoirement être la clé primaire?

    • Hervé Inisan dit :

      Idéalement, il vaut mieux utiliser la clef primaire : c’est ce champ qui permet de différencier de façon sûre les lignes.
      Il suffit de l’ajouter à la requête sous-jacente au formulaire, et le champ sera disponible sur le formulaire lui-même.

  2. Rafie dit :

    Bonjour Hervé, merci de ton truc pour colorier tous les champs de l’enregistrement courant d’un formulaire. J’avais le même problème que ComputingFroggy, seul le controle sur lequel je cliquais se mettait en couleur. En y regardant de plus près, après avoir sélectionné tous les controles de la section détail, j’ai défini la propriété StyleFond (Onglet format) à Standard au lieu de transparent. Je n’ai plus le problème.

  3. Brigitte dit :

    Bonsoir,
    Est-il possible d’appliquer une mise en forme conditionnelle à un champ de table ?
    Merci.

  4. Bonjour,

    Intéressante technique malheureusement avec Access 2010 et Windows 7, j’ai bien la police qui est changé pour toute la ligne mais seulement le fond de la cellule dans laquelle j’ai cliqué est changé toutes les autres cellules de la ligne sont restées avec leur couleur précédente.
    Suis-je le seul avec ce bug ?
    Une idée pour le corriger ?

  5. Daniel Tréché dit :

    Bonjour,
    Le principe fonctionne parfaitement, j’ai juste un souci pour faire disparaitre le champ indépendant. J’ai tenté Visible=false et ColumnWidth=0 sans succès. Il faut dire que j’affiche une « feuille de données », pas un « formulaire continu ». Une idée ? Merci par avance.

  6. Sam dit :

    Yes ça fonctionne nickel!
    Bon courage

  7. Rémi dit :

    Bonjour Hervé,
    Tout d’abord merci pour cet article bien documenté.
    Tout fonctionne parfaitement bien sous access 2003 et Windows 7 et il ne se passe rien avec exactement
    le même fichier access 2003 mais sur une machine Windows 8.1?
    Merci d’avance pour une éventuelle explication

  8. Hervé Inisan dit :

    sara > Le champ qui te sert à faire la recherche ne doit pas être le même que celui qui sert à colorier.

  9. sara dit :

    Bonjour,
    oui c’est ça que j’ai fait les deux cote de vba donc l’article (Se positionner sur un formulaire) cherche le N° et cette article (Colorier la ligne active ) met la couleur. Mais j’ai pas compris quand vous avez dit que « Chaque technique a son code VBA et sa zone de texte (avec des noms différents bien sûr) » donc on cherche le N° et on couleur la ligne d’aprés le N°; est ce que si possible de me faire un exemple ça sera parfait pour que je comprends bien MERCII 🙂 🙂

  10. Hervé Inisan dit :

    sara > J’ai vérifié : les 2 techniques sont complètement compatibles. A condition de les suivre comme expliqué, séparément.

    Par exemple, tu ne dois pas réutiliser la zone de texte de l’une pour mettre en place l’autre. Chaque technique a son code VBA et sa zone de texte (avec des noms différents bien sûr).

  11. sara dit :

    Bonjour,
    Oui Hervé je veux cohabiter les 2 articles (à la fois le positionnement + la couleur).comment je peus le faire stp 🙁

  12. Hervé Inisan dit :

    sara > En fait, ça dépend de l’objectif : si l’idée est seulement de colorier la ligne active, il faut garder le contenu de cet article et ne pas utiliser l’autre.

    Maintenant, s’il y a aussi l’idée de se positionner sur une ligne précise (sans couleur), c’est l’autre article qu’il te faut. 😉

    A priori, les 2 articles concernent des points différents, mais qui peuvent aussi cohabiter (si on veut à la fois le positionnement + la couleur).

  13. sara dit :

    Dons d’aprés ce que vous dit j’ai compris je doit seulement copier ce code et supprimer l’autre de l’article (Se positionner sur un formulaire) c’est ça ;-(

  14. Hervé Inisan dit :

    jahwil > Il me faut plus d’infos pour diagnostiquer… 😉 Qu’est-ce qui ne marche pas ? Quelle version d’Access ? Quelle est l’erreur affichée, s’il y en a une ?

  15. jahwil dit :

    Ne marche pas du tout !?

  16. Hervé Inisan dit :

    sara > txtCodePersonneActive ne sert pas tout à fait pour trouver la ligne, mais au contraire pour mémoriser sa clef quand on a trouvé la ligne. Comme ce n’est pas le même principe que l’article « Se positionner sur un formulaire », tu devrais créer des objets indépendants, et ne pas réutiliser les autres (ce sont 2 traitements différents).

  17. sara dit :

    oui le champs ID existe même le code de l’article « Se positionner dans un formulaire ou un sous-formulaire » ca marche parfaitement avec ce champs ID.
    Moi je pense que ce code
    « Private Sub Form_Current()
    Me.txtCodePersonneActive = Me.Code_Personne
    End Sub »
    sa sert seulement pour trouver la ligne n’est ce pas ? donc si le code de l’article « Se positionner dans un formulaire ou un sous-formulaire » me trouve la ligne demander donc je dois seulement le colorer par le bouton Mise en forme conditionnelle 🙁

  18. Hervé Inisan dit :

    sara > Le champ Id existe bien dans la table ? (écrit exactement comme ça ?).

    En principe, quand tu fais Me. (Me suivi du point), tu dois avoir une liste des propriétés et champs du formulaire. Si Id n’est pas dans cette liste, tu as effectivement une erreur.

  19. sara dit :

    Bonjour Hervé,

    Suite à l’article « Se positionner dans un formulaire ou un sous-formulaire » j’ai essayé de faire cette partie mais mon code
    « Private Sub Form_Current()
    Me.txtNumero = Me.ID
    End Sub »
    donne des erreurs je ne sais pas pourquoi 🙁 que le champs ID est introuvable par contre il existe déja même j’ai l mets dans le code que j’ai recopier de l’article « Se positionner dans un formulaire ou un sous-formulaire » est sa marche trés bien .
    c’est où le soucis :'( ?

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *