formateur informatique

Formulaire de suppression Access

Accueil  >  Bureautique  >  Access  >  Access Avancé  >  Formulaire de suppression Access
Livres à télécharger


Pour partager cette vidéo sur les réseaux sociaux ou sur un site, voici son url :


Inscription Newsletter    Abonner à Youtube    Vidéos astuces Instagram
Sujets que vous pourriez aussi aimer :


Formulaire de suppression d'enregistrements

Dans la formation Access précédente, nous avons démontré une méthode relativement simple pour bâtir un formulaire d'insertion. Ici, nous souhaitons offrir un outil tout aussi intéressant. Au choix d'une référence et au clic sur un bouton, l'utilisateur doit pouvoir commander la suppression de l'enregistrement lié.

Formulaire Access pour supprimer automatiquement enregistrement au choix dans liste déroulante

Bien sûr, Access propose une commande nommée Supprimer un enregistrement. Elle peut être liée à un bouton. Et cette commande peut être exécutée sur un formulaire classique. Mais précisément, le rôle d'un formulaire classique est de permettre la consultation et la modification des données. D'ailleurs le réglage d'une simple propriété permet d'interdire cette action délicate sur un tel formulaire. Afin de préserver l'intégrité des informations, nous suggérons donc de détacher cette fonctionnalité, qui doit être actionnée par les utilisateurs privilégiés et avertis.

Source et présentation de la problématique
Pour supprimer des enregistrements, encore faut-il disposer de données à manipuler. C'est pourquoi, nous devons commencer par réceptionner une petite base de données Access. Comme le résume le volet des objets Access sur la gauche de l'écran, cette base de données n'est constituée que de deux éléments à ce stade. On note la présence de la table Parc et du formulaire Supprimer_vehicule.
  • Double cliquer sur la table Parc pour afficher son contenu en mode feuille de données,
Nous y retrouvons l'ensemble des véhicules en transit dans le parc automobile de la société. Chacun est identifié de façon unique par son immatriculation. Ce champ est fort naturellement exploité comme clé primaire. Chaque automobile est décrite sur trois autres champs : la marque, le modèle et le nombre de chevaux.

Table des véhicules à vendre à gérer par formulaire Access

Les administrateurs doivent donc pouvoir gérer les entrées et sorties dans ce parc. Nous avions à ce titre réalisé une formation Access pour bâtir un formulaire d'ajout. Mais lorsqu'une voiture est vendue, elle doit être sortie des références. Son enregistrement complet doit être supprimé. Nous devons donc bâtir ce fameux formulaire Access de suppression. Et c'est la raison pour laquelle cette petite base de données, propose un formulaire préconçu.
  • Fermer la table Parc en cliquant sur la croix de son onglet,
  • Puis, dans le volet sur la gauche, double cliquer sur le formulaire Supprimer_vehicule,
Nous l'affichons ainsi en mode exécution.

Formulaire Access pour supprimer enregistrement au choix référence dans liste déroulante

La structure du formulaire existe certes. Mais pour l'instant, aucune fonctionnalité ne permet de l'articuler. C'est tout l'enjeu de cette formation. Si vous déployez la liste déroulante, vous constatez que son contenu est vide.

L'administrateur doit pouvoir désigner une immatriculation correspondant au véhicule à sortir du parc automobile. Nous allons concevoir une requête isolant ces identifiants. Nous l'utiliserons dès lors comme source de la liste déroulante.

Et comme cette action est délicate, nous souhaitons charger l'enregistrement correspondant à ce choix dans le sous formulaire, situé juste en-dessus. Le détail du véhicule permettra de confirmer à l'utilisateur qu'il ne s'est pas trompé, avant d'engager la suppression irréversible. C'est de nouveau une requête qui doit charger le contenu de ce sous formulaire. Mais son critère doit être dynamique. Il dépend en effet du choix initié dans la liste déroulante.

Enfin, l'administrateur n'aura plus qu'à cliquer sur le bouton pour engager la suppression. Et comme il est question de contourner le code VBA, nous exploiterons les actions de macro.

Créer la source d'une liste déroulante
Ces immatriculations sont uniques par définition. Nous n'avons donc pas besoin de les purger de leurs doublons. Une simple requête isolant le champ de la clé primaire fera l'affaire pour nourrir la liste déroulante du formulaire.
  • En haut de la fenêtre Access, cliquer sur l'onglet Créer 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, sélectionner la table Parc,
  • Puis, cliquer sur le bouton Ajouter et sur le bouton Fermer,
Création de requête Access à lier au formulaire pour remplir liste déroulante

Les champs de la table désignée sont listés dans une représentation schématique.
  • Glisser le champ immatriculation sur la grille de requête en bas de l'écran,
  • Puis, dans sa zone Tri, choisir Croissant,
Pour faciliter le repérage par l'utilisateur, nous remplirons ainsi la liste déroulante des immatriculations, dans l'ordre alphabétique.
  • Enregistrer cette requête (CTRL + S),
  • Dans la petite boîte de dialogue qui suit, la nommer Requete_immat et valider par Ok,
Elle apparaît désormais listée dans le volet des objets Access, sur la gauche de l'écran.

Requête sélection Access pour extraire tous les identifiants de la table à charger dans une liste déroulante

Si vous double cliquez sur son nom, vous visualisez le résultat de son extraction en mode feuille de données (Cf. figure ci-dessus). Il s'agit bien de toutes les immatriculations pour les véhicules recensés dans le parc automobile.
  • Fermer la requête en cliquant sur la croix de son onglet puis revenir sur le formulaire,
  • Dans le ruban Accueil, cliquer sur la flèche du bouton Affichage,
  • Dans la liste, choisir Mode création,
Nous affichons ainsi le formulaire en conception pour pouvoir manipuler ses différents contrôles. La feuille de propriétés est nécessaire pour nos travaux. Si elle n'est pas visible dans votre environnement, vous devez cliquer sur le bouton Feuille de propriétés dans le ruban contextuel Création.
  • Cliquer sur la liste déroulante pour la sélectionner,
Il peut être nécessaire de réaliser un CTRL + Clic pour la désigner, en raison de l'empilement de plusieurs contrôles sur le même emplacement.

Comme vous le savez, la feuille de propriétés est contextuelle. Elle offre tous les réglages qu'il est possible de paramétrer pour l'objet désigné sur le formulaire.

Feuille de propriétés pour paramétrer les contrôles de formulaire Access

Et comme nous pouvons le lire, cette liste déroulante est nommée Immat. Ces noms d'objets sont fondamentaux pour pouvoir les désigner dans les interactions. Et ces interactions peuvent être engendrées par le code, comme par les macros ou les requêtes. Le contenu de cette liste doit donc être rempli de la sélection réalisée par notre requête.
  • Dans la feuille de propriétés, cliquer sur l'onglet Données pour l'activer,
  • Dans la propriété Contenu, choisir la requête Requete_immat,
Lier contenu liste déroulante de formulaire Access à requête sélection dynamique

La liaison est désormais établie.
  • Enregistrer les modifications du formulaire (CTRL + S),
  • Puis, enfoncer la touche F5 du clavier pour l'exécuter,
  • Déployer la liste déroulante,
Remplir dynamiquement contenu de liste déroulante sur formulaire Access

Comme vous le constatez, toutes les immatriculations sont désormais proposées à la sélection. Notre liste déroulante se nourrit de la sélection réalisée en amont par la requête. Si les données évoluent dans la table, le résultat de la requête s'actualise fort naturellement. De fait, le contenu de la liste déroulante s'adapte.

Charger le contenu correspondant au choix
Au choix d'une immatriculation dans la liste déroulante, l'enregistrement correspondant doit être récupéré et affiché dans le sous formulaire. La source de ce dernier doit être construite sur la base d'une requête dynamique. Son critère intervient donc sur le champ immatriculation. Il doit dépendre du choix effectué par l'administrateur depuis le formulaire. Donc, le résultat de l'extraction proposé par cette requête doit s'actualiser continuellement.
  • Dans le ruban Accueil, cliquer sur la flèche du bouton Affichage,
  • Dans la liste, choisir Mode création,
  • Cliquer ensuite 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, choisir la table Parc,
  • Puis, cliquer sur le bouton Ajouter et sur le bouton Fermer,
  • Cliquer sur le premier champ immatriculation pour le désigner,
  • Tout en maintenant la touche Maj enfoncée, cliquer sur le dernier (Chevaux),
Cette technique permet d'inclure tous les champs dans la sélection.
  • Glisser cette sélection sur la grille de requête,
Nous incluons ainsi toutes les colonnes de la table pour l'extraction à fournir. La condition dynamique doit être posée sur le champ immatriculation.
  • Dans la zone Critères du champ immatriculation, cliquer avec le bouton droit de la souris,
  • Dans le menu contextuel, choisir Créer,
Créer condition dynamique pour lier extraction requête Access à choix dans liste déroulante formulaire

Cette action a pour effet de déclencher l'affichage du générateur d'expression.
  • Dans la liste de gauche, déployer l'arborescence jusqu'à sélectionner le formulaire Supprimer_vehicule,
  • Dans la liste du centre, double cliquer sur le contrôle Immat,
Expression Access pour relier dynamiquement liste déroulante du formulaire et critère de requête sélection

Nous réalisons ainsi la correspondance dynamique pour le critère à poser sur le champ immatriculation, en fonction du choix réalisé sur le formulaire, depuis la liste déroulante Immat. A ce titre, vous notez l'inscription de la syntaxe de correspondance dans la partie supérieure de la boîte de dialogue.
  • Cliquer sur le bouton Ok pour valider cette condition dynamique,
De retour sur la grille de requête, vous constatez que l'expression construite est désormais renseignée dans la zone de critères du champ immatriculation. Nous ne pouvons pas exécuter la requête en l'état. En l'absence de valeur sélectionnée depuis le formulaire, elle ne peut produire aucun résultat d'extraction.
  • Enregistrer la requête (CTRL + S) sous le nom Requete_contenu,
  • Puis, la fermer en cliquant sur la croix de son onglet,
Liaison dynamique du contenu
Cette requête doit désormais être exploitée pour remplir dynamiquement le contenu du sous formulaire.
  • Revenir sur le formulaire en mode conception,
  • Cliquer sur le sous-formulaire pour le sélectionner,
Souvenez-vous, un CTRL + Clic peut être nécessaire pour l'atteindre. En consultant sa feuille de propriétés, vous remarquez que ce contrôle se nomme Confirmation.
  • Activer l'onglet Données de sa feuille de propriétés,
  • Puis, définir sa propriété Objet source sur Requête.Requete_contenu,
  • Enregistrer les modifications (CTRL + S) et exécuter le formulaire,
Au chargement, vous remarquez que le contenu du sous-formulaire n'est plus vide. Il restitue l'enregistrement correspondant à l'immatriculation active par défaut dans la liste déroulante.
  • Dans la liste déroulante, choisir une autre immatriculation,
Contenu du sous formulaire Access à adapter dynamiquement au choix de valeur dans la liste déroulante

Malheureusement, le contenu du sous-formulaire n'est pas réactualisé. Il conserve en mémoire le résultat de l'extraction opérée à l'ouverture. C'est pourquoi, à chaque nouveau choix dans la liste, nous devons déclencher l'exécution d'une macro, ordonnant de rétablir la liaison.
  • Dans le ruban Accueil, cliquer sur la flèche du bouton Affichage,
  • Dans la liste, choisir Mode création,
  • Cliquer sur la liste déroulante du formulaire pour la sélectionner,
  • Activer l'onglet Evénement de sa feuille de propriétés,
  • Puis, cliquer sur le petit bouton de son évènement Sur changement,
  • Dans la boîte de dialogue qui suit, choisir Générateur de macro et valider par Ok,
Nous basculons ainsi dans l'éditeur de macro qui permet d'empiler les actions à engager, les unes en dessous des autres.
  • Dans la liste déroulante, choisir l'action AfficherTousEnreg,
Action de macro pour actualiser contenu du formulaire Access sur choix dans liste déroulante

Cette action a pour effet de forcer la réactualisation des liaisons entre les objets Access. Comme elle intervient sur l'évènement Sur changement, dès qu'une nouvelle immatriculation est sélectionnée, la source du sous formulaire doit être réactualisée.
  • Dans le ruban, cliquer sur le bouton Enregistrer puis sur le bouton Fermer,
  • De retour sur le formulaire, réaliser le raccourci CTRL + S pour l'enregistrer à son tour,
  • Puis l'exécuter à l'aide de la touche F5 du clavier,
  • Dans la liste déroulante, choisir une nouvelle immatriculation,
Cette fois, le contenu du sous formulaire s'adapte. La liaison est désormais dynamique. Nous offrons le niveau de détail suffisant pour que l'administrateur puisse s'assurer du véhicule à supprimer.

Requête suppression
Pour parfaire l'application, nous devons la rendre pleinement fonctionnelle. L'administrateur peut désormais sélectionner l'immatriculation du véhicule à supprimer du parc. A titre de vérification, il peut consulter le détail de l'automobile désignée, dans le sous-formulaire. Mais surtout, il doit pouvoir déclencher la suppression de l'enregistrement complet, au clic sur le bouton. Ce clic doit déclencher l'exécution d'une macro. Et cette macro doit elle-même déclencher l'exécution d'une requête suppression. Mais il ne s'agit pas de n'importe quelle requête suppression. Elle doit seulement supprimer l'enregistrement correspondant à l'immatriculation choisie dans la liste déroulante. Son critère est donc dynamique. Et il s'agit du même critère que celui de la requête source du sous-formulaire. C'est pourquoi nous proposons de dupliquer cette dernière puis de modifier sa nature.
  • Dans le volet des objets Access, sélectionner la requête Requete_contenu,
  • La copier (CTRL + C) puis la coller (CTRL + V),
  • Dans la boîte de dialogue qui se déclenche, la renommer Requete_suppression et valider,
  • Cliquer avec le bouton droit de la souris sur son nom, dans le volet de gauche,
  • Dans le menu contextuel, choisir Mode création,
  • Dans le ruban Créer, en haut de la fenêtre Access, cliquer sur le bouton Suppression,
Nous venons de changer la nature de la requête. Elle ne sélectionne plus. Elle supprime. Et comme vous le constatez, elle a conservé les réglages de la précédente requête. Dans la grille de requête, vous observez l'apparition d'une zone nommée Supprimer. Elle identifie explicitement la table Parc pour procéder, tout en tenant compte du critère dynamique, toujours en vigueur sur le champ immatriculation.

Transformer requête sélection en requête suppression dynamique sur ordre du bouton du formulaire Access

Nous devons ordonner l'exécution de cette requête sur ordre, soit au clic sur le bouton du formulaire.
  • Enregistrer les modifications de la requête (CTRL + S),
  • Puis, la fermer en cliquant sur la croix de son onglet,
  • Revenir sur le formulaire en mode création,
  • Cliquer sur le bouton pour le sélectionner,
  • Activer l'onglet Evénement de sa feuille de propriétés,
  • Cliquer sur le petit bouton de son évènement Au clic,
  • Dans la boîte de dialogue, choisir Générateur de macro et valider par Ok,
Comme il s'agit d'une action délicate, nous souhaitons demander confirmation à l'utilisateur avant de procéder. Donc l'action à enclencher dépend de la réponse fournie par l'administrateur. Le traitement doit donc être imbriqué dans une instruction conditionnelle.
  • Avec la liste déroulante, choisir la commande Si,
Le raisonnement est identique à celui opéré avec les fonctions Si d'Excel. Si le critère est vrai, alors nous engageons une action, sinon nous engageons une autre action. Ici, si l'utilisateur souhaite poursuivre, alors nous devons déclencher l'exécution de la requête suppression. Dans le cas contraire, nous devons stopper le traitement. Il s'agit donc de lui poser la question par le biais d'une boîte de dialogue. Cette boîte de dialogue doit offrir les boutons Oui et Non en guise de réponse. Ensuite, nous devrons être en mesure d'interpréter le choix effectué.

Générateur expression de macro Access pour gérer les conditions
  • A l'extrémité droite de la zone du Si, cliquer sur l'icône de la baguette magique,
Nous appelons ainsi le générateur d'expression pour construire le critère de l'instruction conditionnelle.
  • Dans la liste de gauche, déployer l'arborescence des fonctions jusqu'à sélectionner les fonctions intégrées,
  • Dans la liste du centre, sélectionner la catégorie Message,
  • Dans la liste de droite, double cliquer sur la valeur BoîteMsg,
La syntaxe de la fonction ainsi désignée s'inscrit dans la partie supérieure du générateur d'expression. Nous devons renseigner ses arguments, sachant qu'ils sont tous facultatifs, sauf le premier. Celui-ci (Prompt) correspond au message destiné à l'utilisateur.
  • A la place de l'argument «prompt», inscrire le message de confirmation entre guillemets, comme par exemple : 'Confirmez-vous la suppression ?',
  • A la place de l'argument «boutons», saisir le chiffre 4,
Comme l'enseigne l'aide en ligne, cette valeur numérique permet de greffer les boutons Oui et Non sur la boîte de message.
  • Supprimer les autres arguments facultatifs et les points-virgules associés,
La parenthèse fermante doit être conservée bien entendu. L'expression construite à ce stade, est la suivante :

BoîteMsg('Confirmez-vous la suppression ?'; 4)

Communiquer avec utilisateur du formulaire Access par boîte de dialogue de macro attendant une réponse

Pour que le critère de l'expression conditionnelle puisse être évalué, il faut étudier la valeur numérique retournée, correspondant au clic sur l'un ou l'autre bouton. Là encore, comme l'indique l'aide en ligne, un clic sur le bouton Oui retourne la valeur 6 et 7 dans l'autre cas.
  • Cliquer sur le bouton Ok du générateur d'expression pour valider la syntaxe,
  • De retour dans l'éditeur de macro, ajouter le test suivant à la suite : =6,
  • Puis, déployer la liste déroulante du dessous et choisir l'action OuvrirRequête,
  • Dans la zone Nom de la requête, désigner la Requete_suppression,
Macro Access exécutant requête suppression si utilisateur a cliqué sur bouton de confirmation dans la boîte de dialogue

Nous venons de construire l'expression consistant à déclencher l'exécution de la requête dynamique de suppression, au clic sur le bouton Oui de la boîte de dialogue, par l'utilisateur.
  • Dans le ruban, cliquer sur le bouton Enregistrer puis sur le bouton Fermer,
  • De retour sur le formulaire, réaliser le raccourci CTRL + S pour l'enregistrer,
  • Puis, l'exécuter à l'aide de la touche F5 du clavier,
  • Choisir une immatriculation dans la liste déroulante,
  • Puis, cliquer sur le bouton Confirmer la suppression,
Boîte de dialogue sur formulaire Access pour demander confirmation suppression enregistrement

La boîte de dialogue paramétrée avec le générateur d'expression se déclenche.
  • Cliquer sur le bouton Oui pour confirmer la suppression de l'enregistrement,
Un autre message apparaît, mais cette fois, il est issu du système. Nous sommes en train de déclencher l'exécution d'une requête action qui aura des incidences sur les données source.
  • Valider ce message et cliquer sur le bouton Oui du message qui suit,
La mention Supprimé s'affiche dans les champs du sous-formulaire. Elle semble indiquer que l'enregistrement correspondant a été effacé de la source de données. L'immatriculation quant à elle, est toujours visible et sélectionnée dans la liste déroulante.

Si vous double cliquez sur la table Parc pour afficher son contenu, vous constatez que le véhicule a effectivement été supprimé de la base de données.
  • Dans la liste déroulante du formulaire, choisir une nouvelle immatriculation,
  • Puis, cliquer sur le bouton Confirmer la suppression,
  • Dans la boîte de message qui suit, cliquer sur le bouton Non cette fois,
Le traitement semble effectivement s'interrompre. Plus aucun message d'alerte ne suit. Si vous double cliquez sur la table Parc pour afficher son contenu, vous remarquez que le véhicule est en effet toujours présent.

Notre formulaire Access de suppression est donc à la fois fonctionnel et sécurisé. Mais il peut être amélioré. Nous souhaitons couper les messages d'alerte enclenchés par Access, avant l'exécution de la requête suppression. De même, il est opportun de réactualiser l'affichage du formulaire et de son sous-formulaire, dans le cas d'un enregistrement supprimé. Pour ce faire, nous proposons de commander la fermeture et la réouverture de l'objet.
  • Revenir sur le formulaire en mode création,
  • Cliquer sur le bouton pour le sélectionner,
  • Cliquer sur le bouton de son évènement Au clic dans sa feuille de propriétés,
Nous revenons ainsi dans l'éditeur de macro qui nous permet de compléter les actions précédentes.
  • Dans le ruban Création, cliquer sur le bouton Afficher toutes les actions,
Nous avons désormais accès à des commandes inaccessibles par défaut.
  • Dans la liste déroulante de l'éditeur, choisir l'action Avertissements,
  • Conserver son paramétrage par défaut sur Non,
Cette action permet de neutraliser les messages d'alerte qui suivent. Faut-il encore bien la placer dans la chronologie.
  • Glisser l'action Avertissements au-dessus de l'action OuvriRequête,
Neutraliser les alertes Access pendant exécution par action de macro Avertissements actifs

Deux actions supplémentaires sont encore nécessaires. Mais cette fois, elles doivent intervenir après l'exécution de la requête, et bien entendu, dans l'instruction conditionnelle.
  • Sous l'action OuvrirRequête, ajouter l'action FermerFenêtre,
  • Dans la zone Type d'objet, choisir Formulaire,
  • Dans la zone Nom d'objet, sélectionner le formulaire Supprimer_vehicule,
  • Dans la zone Enregistrer, choisir Non,
  • Ajouter alors l'action OuvrirFormulaire,
  • Dans la zone Nom de formulaire, choisir Supprimer_vehicule,
Actualiser affichage du formulaire Access par actions de macro après suppression enregistrement

Cette fois, tous les comportements sont prévus. Il ne nous reste plus qu'à tester.
  • Dans le ruban, cliquer sur le bouton Enregistrer puis sur le bouton Fermer,
  • De retour sur le formulaire, réaliser le raccourci CTRL + S pour l'enregistrer à son tour,
  • Puis, enfoncer la touche F5 du clavier pour l'exécuter,
  • Choisir une immatriculation dans la liste déroulante,
  • Cliquer sur le bouton Confirmer la suppression du formulaire,
  • Dans la boîte de message qui suit, confirmer par Oui,
Aucune alerte ne suit désormais. Le formulaire semble se réinitialiser. D'ailleurs, en déployant sa liste déroulante, nous pouvons constater que l'immatriculation précédemment désignée, a effectivement disparu. La confirmation est apportée en affichant le contenu de la table Parc.

Notre formulaire Access de suppression est cette fois pleinement fonctionnel et sécurisé.

 
Sur Facebook
Sur Youtube
Les livres
Contact
Mentions légales



Abonnement à la chaîne Youtube
Partager la formation
Partager sur Facebook
Partager sur Twitter
Partager sur LinkedIn