Pour partager cette vidéo sur les réseaux sociaux ou sur un site, voici son url :
Sujets que vous pourriez aussi aimer :
Gestion des biens immobiliers avec Access
Dans cette
formation Access , nous proposons de monter un
formulaire permettant d'extraire les
annonces immobilières des biens en vente. Ils doivent correspondre à de multiples critères recoupés. Les exigences peuvent être émises sur le prix, la superficie, le nombre de pièces ou encore la distance séparant la localité choisie.
Dans une barre d'outils conçue à cet effet, l'utilisateur peut saisir les critères dans les zones de texte correspondantes. Instantanément, la liste des biens répondant à ces requêtes recoupées s'actualise dans le
sous formulaire au centre de l'écran. Aucun code VBA ne doit intervenir. C'est une
requête aux critères dynamiques qui doit livrer ces résultats affinés sur demande.
Sources et présentation de la problématique
Nous débutons les travaux depuis une petite
base de données proposée au téléchargement. Elle se nomme
gestion-immobiliere.accdb . Elle offre les données bien entendu mais propose aussi la structure du
formulaire .
Dans le volet des objets Access sur la gauche, vous notez la présence d'une table et d'un formulaire.
Double cliquer sur la table Biens pour l'afficher en mode feuille de données,
Nous y consultons la liste des biens immobiliers proposés à la vente. Ils sont référencés sur plusieurs champs. Le niveau de détail est volontairement simplifié. Nous souhaitons en effet démontrer la méthode pour extraire les annonces correspondant aux critères des clients. Vous notez que certains champs sont formatés pour une meilleure lisibilité.
Cliquer sur la flèche du bouton Affichage dans le ruban Accueil,
Dans la liste, choisir le Mode création ,
Nous affichons ainsi la table en conception. Vous notez la présence de la
clé primaire sur le
champ bien_id qui s'incrémente automatiquement. Il permet de définir chaque enregistrement comme unique. Cette notion est essentielle comme nous l'avons appris au travers de nos
formations au gestionnaire de bases de données Access .
Cliquer sur le champ bien_ville pour le sélectionner,
En consultant son onglet Général, en bas de la fenêtre, nous remarquons qu'il est formaté en majuscule grâce au symbole supérieur (>), pour des raisons d'homogénéité.
Si nous sélectionnons le
champ bien_superficie , nous constatons qu'il est formaté en mètres carrés (m²). Ces techniques de formatage sont identiques à celles que nous avons apprises avec
Excel notamment pour créer des formats numériques personnalisés . De même, ces champs sont typés au plus juste pour préserver les ressources. Le
type entier est préféré au
type entier long , dont les capacités sont certes plus importantes, mais démesurées par rapport aux besoins du champ.
Si nous sélectionnons tour à tour les
champs bien_prix et
bien_distance , nous remarquons qu'ils sont judicieusement formatés. Ces préférences d'affichage seront précieuses pour manipuler les informations. La requête les restituera en effet. Nous avions appris toutes ces notions au travers de la
formation Access sur les masques de saisie et le formatage des champs .
Les trois derniers champs sont booléens. Ils peuvent être soit Vrai, soit Faux. Sur un formulaire, ils sont fort logiquement matérialisés par une
case à cocher . Nous le constaterons.
Enfin, retenez qu'il est toujours intéressant de préfixer les noms des champs du nom de la table. Ils sont ainsi facilement identifiables dans les liaisons à entreprendre.
Fermer la table en cliquant sur la croix de son onglet,
Puis, double cliquer sur le formulaire Recherche_biens depuis le volet des objets Access,
Nous l'affichons ainsi en mode exécution. Comme vous le constatez, la structure est déjà conçue. Une barre d'outils est proposée sur la droite. Elle permet d'émettre plusieurs critères à recouper, pour extraire les annonces immobilières correspondantes et issues de la
table Biens . Il manque le
sous formulaire au centre de l'écran, réagissant à ces conditions émises. Mais pour cela, il devra puiser sa source dans une requête. Et cette requête doit réagir dynamiquement en fonction de ces contraintes. Il s'agit de l'enjeu de cette formation.
Cliquer sur la flèche du bouton Affichage dans le ruban Accueil,
Puis, dans la liste, choisir Mode création ,
Nous accédons ainsi au formulaire en mode conception.
Sélectionner la première zone de saisie sur la droite, celle de la superficie,
Dans sa feuille de propriétés, nous constatons que ce contrôle est nommé superficie. Ce nom d'objet est important pour la correspondance à établir dans la construction des critères dynamiques de la requête. Remarque : Si elle n'est pas visible, la feuille de propriétés peut être affichée grâce au bouton du même nom dans le ruban Création.
Activer l'onglet Données de la feuille de propriétés pour le contrôle superficie,
Pour des questions d'ergonomie, une
valeur par défaut et une
règle de validité sont définies. Cette dernière empêche la saisie de données non numériques. De plus, les nombres inscrits doivent nécessairement être positifs. Cela va de soi pour une superficie. Si cette règle n'est pas respectée,
Access n'autorisera pas la validation de l'information.
Nous bâtissons ainsi une application bien cadrée et sécurisée.
En sélectionnant tour à tour les autres contrôles, nous remarquons qu'ils se nomment respectivement nb_pieces, prix, distance et garage pour la case à cocher. Hormis pour cette dernière, des valeurs par défaut et règles de validité sont définies en cohérence.
Requête multicritère dynamique
Nous devons donc bâtir une
requête sélection . Mais il ne s'agit pas d'une requête classique. Son extraction doit évoluer en fonction des conditions émises au travers des contrôles du formulaire.
Cliquer sur l'onglet Créer en haut de la fenêtre Access pour activer son ruban,
Dans la section Requêtes, cliquer sur le bouton Création de requête ,
Dans la boîte de dialogue qui suit, ajouter la table Biens,
Puis, fermer la boîte de dialogue,
Glisser tous les champs, sauf bien_id vers la grille de requête,
Bien_id est en effet le
champ de la clé primaire . Il est utile dans la construction et pour l'unicité des enregistrements. Mais il n'est pas nécessaire à l'affichage.
Il s'agit de construire des
critères dynamiques sur les champs bien_superficie, bien_nb_pieces, bien_prix, bien_distance et bien_garage. Et pour cela, nous devons exploiter la
zone Critères de chacune de ces colonnes.
Ces conditions sont les suivantes :
bien_superficie doit être supérieur ou égal à la demande émanant du formulaire depuis le contrôle superficie ,
bien_nb_pieces doit être supérieur ou égal à la demande émanant du formulaire depuis le contrôle nb_pieces ,
bien_prix doit être inférieur ou égal à la demande émanant du formulaire depuis le contrôle prix ,
bien_distance doit être inférieur ou égal à la demande émanant du formulaire depuis le contrôle distance ,
bien_garage doit être égal à la demande émanant du formulaire depuis le contrôle garage ,
Ces inégalités et égalités doivent toutes être construites selon le même protocole. Il s'agit de faire la correspondance entre le champ de la requête et le contrôle correspondant du formulaire. Et pour cela, nous pouvons exploiter le
générateur d'expression . Nous avions bâti ce type de
requêtes dynamiques dans la
formation Access pour réaliser des recherches verticales .
Cliquer dans la zone de critères du champ bien_superficie pour l'activer,
Taper l'inégalité supérieure ou égale (>=) pour débuter la syntaxe,
Cliquer droit à la suite dans la zone de saisie,
Dans le menu contextuel, choisir Créer ,
Nous déclenchons ainsi l'affichage du
générateur d'expression . Nous devons naviguer au travers de l'arborescence jusqu'à atteindre le formulaire et désigner son
contrôle superficie . La correspondance dynamique sera ainsi établie par le biais de l'inégalité.
Dans la liste de gauche des éléments d'expression, déployer l'arborescence jusqu'à atteindre le formulaire Recherche_biens ,
Cliquer sur ce dernier pour le sélectionner,
Dans la liste du centre des catégories d'expressions, double cliquer sur son contrôle superficie pour poursuivre la construction de la syntaxe,
En haut du
générateur d'expression , la syntaxe de la correspondance s'inscrit en effet. Nous indiquons explicitement que la superficie doit être supérieure ou égale à la valeur mentionnée par l'utilisateur dans le
contrôle superficie du formulaire. Tous les enregistrements ne répondant pas à ce critère seront exclus de la sélection. Mais il s'agit de recouper cette condition avec les autres exigences potentiellement formulées dans les autres contrôles.
Valider ce critère en cliquant sur le bouton Ok,
De retour dans l'éditeur de requête, nous remarquons que la condition est effectivement inscrite dans la
zone de critères pour le
champ bien_superficie . Nous n'avons pas terminé mais il est important de sauvegarder le travail.
Enregistrer la requête à l'aide du raccourci clavier CTRL + S,
Dans la petite boîte de dialogue qui se déclenche, la nommer Selection_biens ,
Enfin, valider par Ok,
Il s'agit désormais de reproduire exactement le même procédé pour établir les critères dynamiques de chaque colonne en faisant correspondre les champs. Nous pourrions d'ailleurs écrire directement ces syntaxes. L'
objet Formulaires doit être suivi d'un point d'exclamation pour annoncer le nom du formulaire entre crochets. Et puis un nouveau point-d'exclamation permet de descendre jusqu'au
contrôle nb_pieces . C'est la philosophie de la programmation orientée objet. Ici le point d'exclamation remplace le point.
Pour les autres champs, bâtir les critères de correspondance suivants :
Pour le
champ bien_nb_pieces : >= Formulaires![Recherche_biens]![nb_pieces],
Pour le
champ bien_prix : <=Formulaires![Recherche_biens]![prix],
Pour le
champ bien_distance : <=Formulaires![Recherche_biens]![distance],
Pour le
champ bien_garage : Formulaires![Recherche_biens]![garage],
Tous les critères dynamiques sont désormais en place. Ainsi posés sur la même ligne, ils impliquent qu'ils doivent être recoupés, donc vérifiés ensemble pour des résultats affinés à la demande.
Enregistrer les modifications (CTRL + S),
Si nous exécutions la requête en l'état, elle ne produirait aucun résultat. Elle ne peut fonctionner seule. Elle attend les valeurs issues du formulaire, produites à l'instant t.
L'objectif désormais consiste à l'intégrer sur le formulaire et à la faire réagir en fonction des choix émis. Pour cela, nous allons exploiter un
sous formulaire .
Fermer la requête en cliquant sur la croix de son onglet,
Extraction dynamique sur formulaire
Pour établir la jonction, nos travaux se poursuivent sur le formulaire en mode conception.
Revenir sur le formulaire en mode création,
Cliquer sur l'onglet Création en haut de la fenêtre pour activer son ruban,
Déployer la liste des contrôles de formulaire,
Sélectionner l'objet sous formulaire / sous état ,
Le tracer sur le formulaire en dessous de la zone de titre et à gauche de la barre d'outils,
Un assistant se déclenche pour établir la liaison. Il s'agit de désigner la source du sous formulaire. Cette source est la
requête dynamique que nous venons de construire.
Conserver le choix proposé par défaut : Utiliser les tables et requêtes existantes ,
Puis, cliquer sur le bouton Suivant,
Choisir la requête Selection_biens à l'aide de la liste déroulante,
Inclure tous ses champs à l'aide de la double flèche au centre de l'assistant,
Cliquer de nouveau sur le bouton Suivant,
Conserver le nom proposé par défaut,
Enfin, cliquer sur le bouton Terminer pour procéder à l'implantation du sous formulaire,
Le
sous formulaire apparaît à l'endroit indiqué. Il convient d'ajuster ses dimensions, de supprimer son étiquette et de réajuster la largeur de ses champs. Ces petits travaux offrent une meilleure visibilité en mode feuille de données.
Enfoncer la touche F5 du clavier pour exécuter le formulaire,
Nous constatons que les annonces immobilières sont déjà filtrées. En effet les valeurs par défaut définies dans les contrôles, imposent des critères prédéfinis que la requête récupère. De fait, elle les exploite pour sa sélection restrictive. La
table Biens compte en effet 31 enregistrements à l'origine.
Mais fort logiquement à ce stade, si nous modifions les conditions dans les zones de saisie et que nous cliquons sur le
bouton Rechercher , rien ne se produit. L'affichage est figé. Nous devons imposer l'
actualisation des enregistrements pour que les nouveaux critères soient considérés sur demande.
Nous proposons de produire les résultats au clic sur le bouton. Mais nous veillerons aussi à ce qu'ils s'actualisent automatiquement. Un changement détecté dans chaque contrôle de critère doit regénérer les offres. Le procédé est trivial. Il suffit de déclencher une
macro ordonnant le recalcul, au
clic sur le bouton .
Cliquer sur le bouton Affichage du ruban Accueil,
Dans la liste, choisir Mode création ,
Sur le formulaire en conception, sélectionner le bouton Chercher ,
Activer l'onglet Evènement de sa feuille de propriétés,
Cliquer sur le petit bouton en regard de son évènement Au clic ,
Dans la boîte de dialogue qui suit, choisir Générateur de macros et valider par Ok,
Dans l'éditeur de macros qui apparaît, sélectionner l'action AfficherTousEnreg , à l'aide de la liste déroulante,
Cette
action de macro ne requiert aucun paramètre. Elle impose l'activation du formulaire, comme s'il était rechargé. En conséquence, elle commande la réactualisation des enregistrements pour considérer la mise à jour de l'environnement et donc des
critères dynamiques .
Cliquer sur le bouton Enregistrer situé dans le ruban Création,
Fermer l'éditeur de macros en cliquant sur le bouton Fermer placé dans le même ruban,
De retour sur le formulaire en conception, l'enregistrer également (CTRL + S),
Ainsi, nous mettons à jour le lien que nous venons d'opérer entre le bouton et sa macro.
Exécuter le formulaire avec la touche F5 du clavier,
Monter la distance à 50 Km grâce à la zone de saisie dédiée,
Cocher la case Avec garage ,
Puis, cliquer sur le bouton Chercher ,
Comme vous le constatez, l'offre s'actualise instantanément. Elle est plus riche.
Nous obtenons la liste de tous les biens immobiliers dont la superficie est au mois de 50 m
2 avec au minimum 3 pièces et un garage, pour un prix maximum de 100000 Euros et dans un rayon de 50 km.
Nous pouvons rendre ces extractions instantanées au fur et à mesure de la saisie des critères. Il s'agit de déclencher exactement la même
action de macro , mais pas sur le même évènement. A chaque fois qu'une saisie est terminée, le contrôle correspondant doit
exécuter la macro .
Cliquer sur la flèche du bouton Affichage du ruban Accueil,
Puis, choisir Mode création dans la liste,
Sélectionner la première zone de critère nommée superficie ,
Dans l'onglet Evènement de sa feuille de propriétés, cliquer sur le petit bouton de son évènement Après MAJ ,
Cet évènement signifie littéralement :
Après mise à jour . Il se déclenche une fois la saisie terminée.
Dans la boîte de dialogue, choisir Générateur de macro ,
Dans l'éditeur de macro, sélectionner l'action AfficherTousEnreg ,
Enregistrer et fermer,
De retour sur le formulaire, l'enregistrer également,
Enfoncer la touche F5 du clavier pour l'exécuter,
Passer la superficie à 80 m2 ,
Puis, valider en enfonçant la touche Tab ou en cliquant dans un autre contrôle,
La liste des offres immobilières s'affine automatiquement et instantanément. Tous les biens dont la superficie est inférieure à 80 m
2 sont exclus. Il s'agit de reproduire exactement la même association pour tous les autres contrôles de saisie y compris pour la case à cocher.
Si nous testons une fois toutes les macros associées, nous constatons que les résultats s'affinent automatiquement à chaque critère défini.
Dans une prochaine formation, nous verrons comment construire un
formulaire d'ajout sans code VBA . Son objectif est de permettre l'insertion de nouveaux biens dans la base de données. Ainsi sur des informations constamment actualisées, le formulaire d'extraction sera d'autant plus fonctionnel.