Mise en surbrillance d'un enregistrement dans un formulaireDate de publication : 24/02/2005 , Date de mise à jour : 24/05/2006
Par
Jean-Philippe AMBROSINO (home page)
Ce document a pour but de vous montrer comment mettre en évidence un enregistrement dans un formulaire.
Vous devez maîtriser la conception de formulaire et connaitre le langage Visual Basic for Application pour mettre en oeuvre cet exemple et savoir manipuler plus particulièrement les RecordSets et DAO.
1. Avant propos 1-1. Remerciements 1-2. Contact 2. Présentation du formulaire exemple 2-1. Création du formulaire 2-1-1. Conception du formulaire avec l'assistant 2-1-2. Conception du formulaire manuellement 2-1-3. Mise en forme des champs 3. Création de la fonction retourant le N° de ligne 3-1. Visual Basic Editor 3-2. Événement sur le formulaire 3-2-1. L'événement Sur Clic (Form_Click) 3-2-2. L'événement Sur Activation (Form_Current) 3-2-2. La proppriété SelTop 4. Passage en mode formulaire pour visualiser 4-1. Modification des propriétés du contrôle txtBackground 4-1-1. Création d'un autre événement pour le contrôle txtBackground 5. Colorier les champs sans la zone d'arrière plan 6. Conclusion 7. Téléchargement 1. Avant propos
Ce document a pour but de vous montrer comment mettre en évidence un enregistrement dans un formulaire. En effet, dans une liste d'enregistrements, seule la flèche situé à gauche (pour peu que vous l'ayez affichée) est seule à même de vous donner la position de l'enregistrement en cours. Ce document montre comment colorier l'arrière plan de l'enregistrement actif. 1-1. Remerciements
Je tiens à remercier tout particulièrement Messieurs Maxence Hubiche et Olivier alias Bestiol ainsi que toutes celles et ceux qui ont participé à la relecture de ce document en y incluant leurs remarques. 1-2. Contact
Pour tous renseignements complémentaires, veuillez me contacter directement (Argyronet) par MP. 2. Présentation du formulaire exemple
L'objectif de ce tutoriel est de vous montrer qu'il est possible de mettre en évidence un enregistrement (qui est l'enregistrement actif) par l'intermédiaire d'une bande de couleur, ce qui permet de le visualiser immédiatement.
Le formulaire en mode formulaire
Vous pouvez constater que ce formulaire est volontairement dépourvu du sélecteur et du diviseur d'enregistrements. J'ai également pour les mêmes raisons d'esthétique, supprimé les boutons de déplacement. ![]()
Le formulaire en mode création (Design)
Lorsque l'on passe en Mode Création, vous pouvez remarquer que derrière les champs se trame une espèce de zone illisible bleue (couleur que j'ai choisie). C'est cette même zone qui va nous servir de bande colorée.
![]()
Détail des éléments utilisés
Pour mettre en application ce tutoriel, vous avez besoin de deux champs cachés et un champ principal représentant la bande colorée... Nous allons aborder au pas à pas chaque étape pour aboutir au résultat final. ![]()
Le champ représentant la bande colorée est une zone de texte dont vous déterminez la couleur et dans lequel vous insérez une formule:
Formule du champ indépendant txtBackGround
Pourquoi utiliser le caractère Û ?
Eh bien dans la police utilisée par la zone de texte qui contient cette formule, le Û renvoie un carré plein. Je ne sais si vous avez eu l'occasion de développer sous DOS, mais à l'époque (ouh là je suis vieux !) où moi-même je le faisais, le seul moyen de contruire des cadres d'écran (eh oui, on ne parlais pas de formulaire en ce temps là) consistait à exploiter les caractères de la table ASCII concernés. En l'occurence et pour n'en citer que quelques uns, le jeu compris entre 170 et 223. Il s'avère que la police qui permet d'afficher ces caractères est encore disponible: il s'agit de la police Terminal.
Note: Il vous faudra déterminer le nombre de caractères Û. Ici, j'en ai mis 100. Après quelques essais, il s'avérait que c'était le nombre nécessaire pour qu'il ne subsiste aucun blanc de part et d'autre du formulaire. Je suis pointilleux sur l'aspect finition des formulaires. Il s'agit d'une police écran et non pas d'une police dite True Type.
Deux champs cachés réduits à zéro en largeur (voir image ci-dessous) sont dédiés à recevoir respectivement le résultat d'une fonction pour l'un et le résultat d'une propriété pour l'autre.
Cette fonction détermine la position de l'enregistrement en cours. Quant à la propriété, elle détermine le rectangle de sélection correspondant également à l'enregistrement en cours...
![]() 2-1. Création du formulaire
Si vous souhaitez mettre en place cette fonctionnalité sur un formulaire existant, passez directement à la section 2.1.3. Vous pouvez indifféremment construire votre formulaire manuellement ou à l'aide de l'Assistant. Bien entendu, l'exemple traité ne reflétera pas les champs qui composent votre propre formulaire. 2-1-1. Conception du formulaire avec l'assistant
Etape 1 Depuis la fenêtre Base de donnée, choisissez Nouveau L'image ci-après apparaît et vous sélectionnez alors Assistant Formulaire Vous sélectionnez ensuite une table ou une requête dans la liste du dessous qui sera la source du formulaire. Cliquez sur Suivant ![]()
Etape 2 Les deux zones de liste représentent respectivement les champs disponibles (ceux issus de votre table ou de votre requête) et les champs à incorporer dans le formulaire. Dans mon exemple, j'ai choisi une requête où j'avais préalablement inclu les champs qui m'intéressaient. J'ai donc cliqué sur le bouton >> qui a pour effet d'envoyer l'ensemble des champs dans la liste de droite. A vous de déterminer dans votre propre formulaire ceux dont vous avez besoin. Cliquez sur Suivant ![]()
Etape 3 Le choix de la présentation se détermine dans cette étape où vous choisissez Tabulaire. Cliquez sur Suivant ![]()
Etape 4 Ici, vous sélectionnez la couleur de l'arrière plan de votre formulaire. Les images issues de la liste des fonds disponibles sont limitées à 9 par défaut. Personnellement, je préfère définir mes arrières plan moi-même en sélectionnant des couleurs plutôt pastels en mode création. Ici, vous êtes contraint d'en choisir un puisque vous êtes passé par l'Assistant. Pour cet exemple, nous choisirons "Expédition" Cliquez sur Suivant ![]()
Etape 5 Vous donnez alors un titre à votre formulaire (qui sera également le nom du formulaire).
Vous cochez ensuite l'option "Modifier la structure du formulaire" et cliquez sur Terminer.
![]()
Formulaire généré Le formulaire est donc prêt à être modifié: - Agrandissez la section Détail - Si la barre d'outils Boîte à outils n'est pas visible, affichez-là - Sélectionnez le bouton Zone de texte - Amenez votre pointeur de souris sur la zone libre de la section détail et dessinez un rectangle comme l'illustre l'image de la section 2-1-3. Mise en forme des champs ![]() 2-1-2. Conception du formulaire manuellement
Au cas où vous souhaiteriez concevoir le formulaire manuellement, depuis la fenêtre Base de donnée, choisissez Nouveau L'image ci-après apparaît et vous sélectionnez alors Mode création ![]()
Vous pouvez d'entrée sélectionner une table ou une requête dans la liste du dessous qui sera la source du formulaire mais vous pourrez également la sélectionner utlérieurement. Cliquez sur OK
Etape 1 Le formulaire se présente vide avec seulement la section Détail visible. ![]()
Etape 2 Dans le menu affichage, sélectionnez En-tête/pied de formulaire de manière à subdiviser la section en trois parties, opération indispensable pour passer en Mode Continu. ![]()
Etape 3 Depuis la barre d'outils, localisez le bouton pour afficher les propriétés du formulaire.Dans l'onglet Toutes, pointez sur la propriété Source afin de sélectionner la table ou la requête correspondante. Depuis la barre d'outils, localisez le bouton pour afficher la Liste des champs correpondants.![]()
Etape 4 La liste des champs va vous permettre de poser les champs sur le formulaire comme l'illustre la figure ci-dessous. ![]()
Etape 5 Une fois posés, vous devez les agencer de manière à les répartir équitablement sur les différentes zones. Profitez en pour élargir la zone Détail en amenant votre pointeur sur le bord droit de la section détail et en tirant sur la droite comme ci-dessous. ![]()
Etape 6 Voyez comment vous allez ranger vos champs. ![]()
Etape 7 Dans cette étape, vous devez à la fois agencer la section Détail et couper les étiquettes de l'ensemble des champs en deux opérations successives. Commencez par dessiner un rectangle autour des étiquettes en prenant soin de ne pas toucher les zones de texte, comme ci-dessous. ![]()
Ensuite, choisissez dans le menu Edition la commande Couper ou bien à l'aide du raccourci clavier, tapez Ctrl + X Les champs disparaissent alors... Cliquez sur la section En-tête de Formulaire et choisissez dans le menu Edition la commande Coller ou bien à l'aide du raccourci clavier, tapez Ctrl + V Une fois cela fait, prenez les étiquettes une à une et placez-les de telle sorte que l'agencement global ressembe à un tableau.
![]()
Etape 8 Une fois terminé, vous devez obtenir quelque chose qui ressemble à ceci... Dans notre exemple, le champ IDMember (qui est la clé primaire de la table) va être masqué et sa largeur sera réduite à zéro. Il sera par là-même, placé sur le bord gauche de la section détail. ![]()
Vous avez maintenant terminé la première partie... Il nous reste à mettre en place les champs, les formules et le code conséquent à cet exercice. 2-1-3. Mise en forme des champs
Etape 1 Commencez par sélectionner l'outil Zone de Texte et dessiner une rectangle sur la partie libre de la section Détail que vous aurez préalablement agrandie. ![]()
Etape 2 Vous obtenez un champ avec son étiquette.
![]()
Etape 3 Nous allons donc affecter différentes propriétés à notre contrôle qui est dédié à être la bande colorée de l'enregistrement actif. Vous appliquerez donc à ce contrôle, les propriétés suivantes: 1. La police: Terminal 2. La couleur de la police: Bleue, mais vous pouvez en choisir une autre en fonction de la couleur de fond de votre formulaire. 3. La taille: 20 (Il est probable que vous ayez besoin d'une taille supérieure ; Vous ajusterez en fonction de vos besoins) 4. La couleur de fond: Aucune (Transparente) 5. Le nom: txtBackground (N'importe quel nom fera l'affaire mais choississez un nom circonstanciel) Vous devez obtenir alors: ![]()
Etape 4 Vous supprimez l'étiquette qui est absolument inutile pour ce champ. ![]()
Etape 5
Vous sélectionnez le champ (8 points d'ancrage délimitent ce dernier).
Vous affichez ensuite, par l'intermédiaire du bouton situé sur la barre d'outils, les propriétés de ce champ.Vous pointez la propriété Source contrôle (ControlSource) et entrez la formule suivante:
Ainsi que je l'ai expliqué ci-avant, il vous faudra déterminer le nombre de caractères Û à saisir.
![]()
Etape 6 Nous allons créer un second contrôle qui est dédié à recevoir le numéro de ligne de l'enregistrement en cours. ![]()
Nous allons lui affecter les propriétés suivantes: 1. La source de contrôle (ControlSource): =fnctGetLineNumber() (vu en détail ci-après) 2. Le nom: ctlCurline (N'importe quel nom fera l'affaire mais choississez un nom circonstanciel) ![]()
Ensuite, vous devez réduire la largeur de ce champ à zéro. En effet, ce champ ne doit pas et d'une, encombrer votre environnement de travail et de deux, être visible car bien que réduit à zéro, il reste à vue. Vous afficherez donc ses propriétés à nouveau et dans l'onglet Format (Etape 7 ci-après), posez respectivement les valeurs Non pour Visible et 0 pour la Largeur. Vous pouvez toutefois réduire le contrôle à la souris comme illustré. ![]()
Etape 7 C'est ici que vous définissez les propriétés du champ. Vous pouvez voir que le contrôle positionné en haut et à gauche. ![]()
Etape 8 Nous allons créer le troisième et dernier champ comme précédemment. Pour ce champ, vous définissez les propriétés suivantes: 1. La source de contrôle (ControlSource): Aucune 2. Le nom: ctlSelTop (N'importe quel nom fera l'affaire mais choississez un nom circonstanciel) 2. Largeur: 0 (Comme pour le contrôle ctlCurline) 2. Haut: 0 (Top) 2. Gauche: 0 (Left) 2. Visible: Non (False) Pour ce dernier, vous supprimerez également l'étiquette qui est inutile. ![]()
Etape 9 Il ne vous reste plus qu'à juxtaposer ce champ txtBackground à la Section Détail et de ramener la section Pied de formulaire juste au dessous. Vous ajusterez de façon identique la section En-tête de formulaire. Vous pouvez attribuer une police différente pour les étiquettes, changer les différentes couleurs de fond etc. ![]()
C'est terminé pour la partie formulaire...
3. Création de la fonction retourant le N° de ligne
Pour créer la fonction retournant le numéro de ligne, vous devez connaître le language VBA. Enfin, quand je dis connaître, c'est préférable pour vous dans le sens où cet exercice est suffisament explicite pour que vous puissiez le mettre en application même si ce language reste un mystère. Disons que pour un confort d'utilisation et de maintenance, vous devez vous familiariser avec les procédures événementielles, les objets Recordset, les boucles et les gestions d'erreurs. 3-1. Visual Basic Editor
Pour la partie code VBA, vous allez appeler l'éditeur Visual Basic Editor (VBE) selon plusieurs possibilités :
1. La combinaison de touche ATL + F11 2. Le menu contextuel de la fenêtre sur la partie grise où vous choisissez Créer code événement. 3. Le bouton Créer situé dans la barre d'outils4. La fenêtre de propriétés depuis l'onglet Événement ![]()
Dans la partie centrale, vous recopiez la fonction ci-dessous.
Ce qui donne alors
![]()
Puis vous choisissez dans la liste des objets, l'objet Form. Cette sélection va créer un événement qui, par défaut pour celui-ci, est Form_Load(). Vous laissez tel que car nous ne nous servirons pas de cet événement dans ce tutoriel... ![]()
Vous pointez la liste des événements à droite puis sélectionnez respectivement les événements Click() et Current().
![]() 3-2. Événement sur le formulaire
Pour provoquer l'effet coloré sur l'enregistrement, vous devrez appliquer à l'objet Form deux événements. Ceci est nécessaire pour que la propriété SelTop soit réaffectée à chaque fois que l'on clique sur une ligne d'enregistrement. 3-2-1. L'événement Sur Clic (Form_Click)
L'événement Clic (Click) se produit lorsque l'utilisateur appuie puis relâche un bouton de la souris sur un objet.
Dans notre cas, c'est l'événement Clic (Click) de la section Détail qui nous intéresse. Vous écrirez donc pour l'événement Click :
3-2-2. L'événement Sur Activation (Form_Current)
L'événement Activation (Current) se produit lorsque le focus passe à un enregistrement donné pour en faire l'enregistrement en cours ou bien lorsque le formulaire est Actualisé par un autre événement.
L'événement qui provoque le fait que le formulaire est actualisé sous entend qu'un certain nombre d'opérations ont été effectuées par vous-même ou par un tiers en environnement Multi-Utilisateurs.
Je sous-entends ici que les enregistrements ajoutés sont affichés autant que ceux qui ont été supprimés disparaissent et bien entendu, les enregsitrement ayant été mis à jour s'actualisent par la même, toutes ces opérations ayant lieu en même temps. Vous écrirez donc pour l'événement Current :
3-2-2. La proppriété SelTop
La propriété SelTop détermine ou spécifie quelle ligne d'enregistrement se trouve en haut du rectangle de sélection. Le rectangle de sélection est défini par les lignes et les colonnes sélectionnées dans la feuille de données d'une table ou d'une requête ou d'un formulaire en mode continu. Pour notre cas, la propriété est sollicitée dans le formulaire en mode continu.
La propriété SelTop est un Entier de type Long (Long Integer) dont la valeur est comprise entre 1 et le nombre d'enregistrements total représenté par la source de données (RowSource) dans le formulaire en cours. Si le formulaire est filtré ou est ouvert avec une condition WHERE, la valeur maximum de la propriété SelTop sera égale au nouveau nombre d'enregistrements correspondant.
Dans notre exemple, j'ai sollicité un contrôle Zone de Texte (Textbox) que j'ai nommé txtBackground et qui compare la valeur de cette propriété par rapport à celle retournée par la fonction fnctGetLineNumber() qui est renseignée dans le champ ctlCurline. Cette comparaison est établie par une fonction Microsoft Access interne VraiFaux (IIf) vue ci-avant et qui renvoie VRAI ou FAUX selon le cas. 4. Passage en mode formulaire pour visualiser
Une fois ces procédures correctement écrites ou copiées, fermez l'éditeur VBE et réaffichez votre formulaire, toujours en mode Création. Choissez dans le menu Affichage la commande Formulaire ou bien cliquez sur le bouton qui se substitue au bouton mode Création réprésenté par une équerre bleue.
![]()
Cliquez sur un enregistrement au hasard et l'arrière plan de ce dernier devient bleu (pour ce cas).
4-1. Modification des propriétés du contrôle txtBackground
En effectuant un jeu de clics successifs, vous vous apercevrez vite qu'il y a un schmurtz... En effet, de temps à autre, le contrôle txtBackground passe par-dessus les autres champs ce qui provoque un effet non attendu. Il vous faut alors dans un premier temps lui passer la propriété Arrêt tabulation à Non et ensuite lui affecter un événement. 4-1-1. Création d'un autre événement pour le contrôle txtBackground
Il vous faut alors ajouter un petit bout de code sur l'événement GotFocus() en sollicitant un autre contrôle dès que ce denier reçoit le focus...
J'ai choisi le contrôle FirstName mais libre à vous de sélectionner n'importe quel contrôle susceptible de recevoir le focus par défaut, le but étant de faire en sorte que la bande bleue représentée par la Zone de Texte txtBackground ne le reçoive jamais.
5. Colorier les champs sans la zone d'arrière plan
Effectivement, il n'est pas obligatoire de poser une zone colorée à l'arrière... Il est tout à fait possible de solliciter la Mise en Forme Conditionnelle et colorier les champs eux-mêmes. Pour ce faire, vous devez alors entrer l'expression dans la zone de 1ère condition... ![]()
Vous validez ensuite et les champs se coloriront en conséquence de la mise en forme choisie mais vous devez poser la condition pour chacun des champs visibles, évidemment...
6. Conclusion
Cette fonctionnalité peut s'avérer utile pour les développeurs exigeants qui souhaitent fournir des formulaires avec un aspect professionnel. J'ai été amené à mettre en place cette fonctionnalité à la demande d'un client pour une grosse application de gestion et depuis, je l'applique quasi systématiquement à tous mes formulaires sous forme de liste. C'est une bonne parade à l'environnement Access en mode Formulaire car il faut avouer que le Diviseur d'enregistrement ne rempli pas assez bien, selon moi et visuellement parlant, son rôle. 7. Téléchargement
Bien que je pense que ce tutoriel est suffisament explicite pour que vous puissiez mettre en application sur vos applications Access, vous pouvez télécharger la base exemple pour vous guider dans vos premiers pas en cliquant ici.
Téléchargement des polices
Ce document est issu de http://www.developpez.com et reste la propriété exclusive de son auteur.
La copie, modification et/ou distribution par quelque moyen que ce soit est soumise à l'obtention préalable de l'autorisation de l'auteur.
|