formateur informatique

Supprimer une table précise en VBA Access

Accueil  >  Bureautique  >  Access  >  Access VBA  >  Supprimer une table précise en VBA 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 :


Supprimer une table en VBA Access

Certaines applications utilisent des tables temporaires pour stocker et consolider des données, par exemple dans le cas d'une interface de facturation. Ainsi et à validation, le code n'a plus qu'à récupérer les données insérées pour les intégrer dans les tables officielles. Mais dès lors, la table temporaire est de trop. Elle peut être supprimée. Cette nouvelle astuce VBA Access montre comment supprimer une table désignée par le code VBA.

Interface Access pour supprimer une table choisie par le code VBA

Sur l'exemple illustré par la capture, au chargement du formulaire, une liste déroulante se remplit automatiquement des noms des tables composant la base de données. Dès lors, l'utilisateur choisit l'une d'entre elles et clique sur le bouton supprimer. Aussitôt, elle disparaît de l'affichage actualisé du volet de navigation. Et dans le même temps, la liste déroulante rafraîchit elle aussi son contenu pour ne plus considérer la table effacée.

Base de données Access à télécharger
Pour la démonstration de la technique, nous suggérons d'appuyer l'étude sur une base de données abritant quelques tables et offrant ce formulaire. Comme l'indique le volet de navigation sur la gauche de l'écran, cette base de données est constituée de 10 tables et d'un formulaire.
  • Dans le volet de navigation, double cliquer sur le formulaire fParcourir pour l'ouvrir,
Si vous déployez la liste déroulante, vous constatez qu'elle est déjà chargée des noms de table. C'est un code VBA existant qui s'en occupe, à l'activation du formulaire. Le bouton Fermer est fonctionnel. Comme son nom l'indique, il permet de fermer le formulaire. Le bouton Supprimer est bien entendu inopérant à ce stade. C'est lui que nous devons développer pour supprimer de la base de données, la table spécifiée par l'utilisateur avec la liste déroulante.

La déclaration des variables
Nous allons le voir, le développement est relativement simple. De plus, il recèle quelques astuces fort intéressantes et utiles dans d'autres contextes. Tout d'abord, nous avons besoin de déclarer des variables, notamment pour pointer sur la base de données en cours.
  • A gauche du ruban Accueil, cliquer sur la flèche du bouton Affichage,
  • Dans les propositions, choisir le mode Création,
  • Sur le formulaire en conception, cliquer sur le bouton Supprimer pour le sélectionner,
  • Dès lors, activer l'onglet Evénement de sa feuille de propriétés,
Code VBA au clic sur le bouton Supprimer du formulaire Access

Comme vous pouvez le voir, une procédure événementielle est déjà attachée à l'événement du clic sur ce bouton.
  • Cliquer sur le petit bouton à trois points situé à l'extrémité droite de la zone,
De fait, nous basculons dans l'éditeur VBA Access entre les bornes de la procédure supprimer_Click. Supprimer est le nom du bouton. Click est son événement associé. Vous notez de même la présence de la procédure Form_Current. Comme nous l'avons évoqué, elle s'occupe de remplir la liste déroulante des noms de table, au chargement du formulaire.
  • Dans la procédure supprimer_Click, ajouter les déclarations de variables suivantes :
Private Sub supprimer_Click()
Dim base As Database
Dim requete As String: Dim nomTable As String


End Sub


L'objet base est typé comme un objet de base de données (Database). Il est destiné à pointer sur la base de données en cours pour pouvoir manipuler ses objets, comme ses tables.

La variable requete, typée comme un texte (String) doit stocker la syntaxe Sql permettant de supprimer une table précise. La variable nomTable est elle aussi typée en texte. Sa vocation est de réceptionner le nom de la table désignée par l'utilisateur avec la liste déroulante.

Récupérer le nom de la table
Pour pouvoir l'introduire dans la syntaxe Sql, nous devons maintenant récupérer le nom de la table choisie par l'utilisateur avec la liste déroulante.
  • A la suite du code VBA, ajouter les instructions suivantes :
...
nomTable = listeTables.Value

If (nomTable <> "") Then

End If
...


C'est effectivement la propriété Value d'un objet de zone de liste déroulante qui permet de désigner la valeur sélectionnée par l'utilisateur. Nous la stockons dans la variable nomTable. Puis, nous engageons un test (nomTable <> "") pour vérifier qu'un choix a bien été émis. En effet, il n'est pas question d'amorcer le traitement si aucune table n'a été définie en amont.

La requête de suppression
Donc, si la table est spécifiée, il est temps d'exécuter la requête ordonnant sa suppression. Mais avant cela, nous devons pointer sur la base de données active, grâce à l'objet base que nous avons déclaré.
  • Dans les bornes de l'instruction conditionnelle, ajouter les instructions VBA suivantes :
...
Set base = CurrentDb()
requete = "DROP TABLE [" & nomTable & "];"
base.Execute requete
...


Nous le savons, c'est la fonction VBA Access CurrentDb qui permet à un objet d'hériter des propriétés et méthodes pour piloter la base de données en cours. Dès lors, nous construisons la syntaxe de destruction de la table grâce à la clause DROP TABLE suivie du nom de la table en question. Les crochets ne sont pas forcément utiles. Mais ils sont nécessaires lorsqu'il s'agit de désigner des tables dont les noms comportent des espaces. Sinon, la syntaxe SQL échoue. Il ne nous reste plus qu'à déclencher cette requête action grâce à la méthode Execute de l'objet base. Bien sûr, la syntaxe lui est passée en paramètre par le nom de la variable.

Fermer et vider l'objet de base de données
Nous en avons l'habitude désormais, chaque objet qui n'est plus utilisé doit être fermé et vidé pour libérer complètement les ressources.
  • A la suite du code de l'instruction conditionnelle, ajouter les lignes VBA suivantes :
...
base.Close
Set base = Nothing
...


La méthode Close de l'objet base permet de fermer l'objet. Sa réaffectation (Set) à Nothing permet de le détruire complètement et donc, de le sortir de la mémoire de l'ordinateur.

Il est donc temps de tester le bon fonctionnement du code VBA.
  • Enregistrer les modifications (CTRL + S) et basculer sur le formulaire (ALT + Tab),
  • L'exécuter par exemple avec la touche F5 du clavier,
  • Choisir un nom de table avec la liste déroulante,
  • Puis, cliquer sur le bouton Supprimer,
Table Access supprimée toujours visible dans le volet de navigation

Même si le code semble s'être déroulé avec succès puisqu'aucune erreur n'est à déplorer, le rendu du volet de navigation n'est pas très rassurant. La table a priori supprimée est toujours visible. Mais rassurez-vous, cela tient au fait que l'affichage de ce dernier n'a pas été réactualisé. Si vous pointez avec la souris sur ce nom de table, elle disparaît aussitôt.

Rafraîchir le volet de navigation
Cependant, la solution en l'état n'est pas pleinement satisfaisante d'autant que l'objet Application propose une méthode dédiée pour rafraîchir globalement l'affichage des fenêtres et volets.
  • Revenir dans l'éditeur VBA Access,
  • Après la destruction de la variable base, ajouter l'instruction VBA suivante :
...
Application.RefreshDatabaseWindow
...


Cette méthode (RefreshDatabaseWindow) ne s'invente pas mais elle porte bien son nom pour actualiser l'affichage des fenêtres.
  • Revenir sur le formulaire en exécution,
  • Choisir une autre table avec la liste déroulante,
  • Puis, cliquer sur le bouton Supprimer,
Cette fois, le résultat est beaucoup plus probant. Comme vous pouvez l'apprécier, dès que la suppression est commandée, le nom de la table disparaît de la liste du volet de navigation. Cependant, un défaut persiste. La liste déroulante du formulaire ne s'actualise pas et c'est gênant. Elle conserve les noms des tables supprimées dans l'énumération.

Actualiser une liste après suppression
Il existe une astuce et technique très simple pour rafraîchir le contenu d'une liste déroulante après l'exécution d'une requête Suppression. L'idée consiste à fermer le formulaire pour le rouvrir aussitôt. La transaction est absolument transparente pour l'utilisateur à la vitesse du processeur. Et comme le formulaire commande le remplissage de la liste déroulante au chargement, celle-ci sera automatiquement mise à jour après suppression. Donc, d'autres suppressions de tables pourront être entreprises dans l'enchaînement.
  • Revenir dans l'éditeur VBA Access,
  • Puis, sous l'instruction précédente, ajouter les deux lignes VBA suivantes :
...
DoCmd.Close acForm, "fParcourir"
DoCmd.OpenForm "fParcourir"
...


Dans les deux cas, c'est l'objet DoCmd qui est mis à contribution. Sa méthode Close permet de fermer un objet dont il est question de définir la nature (acForm) en premier argument et le nom en second paramètre "fParcourir". La méthode OpenForm est plus directe puisqu'elle inclut la nature de l'objet. Elle permet d'ouvrir le formulaire dont le nom lui est passé en paramètre.
  • Enregistrer les modifications et basculer sur le formulaire,
  • Avec la liste déroulante, choisir encore une autre table,
  • Puis, cliquer sur le bouton Supprimer,
Cette fois, en même temps que le volet de navigation actualise son affichage pour éliminer la table supprimée, la liste déroulante met à jour ses éléments en cohérence avec les tables encore présentes dans la base de données. Le code VBA complet que nous avons conçu pour supprimer une table précise et actualiser les dépendances, est le suivant :

Private Sub supprimer_Click()
Dim base As Database
Dim requete As String: Dim nomTable As String

nomTable = listeTables.Value

If (nomTable <> "") Then
Set base = CurrentDb()
requete = "DROP TABLE [" & nomTable & "];"
base.Execute requete

base.Close
Set base = Nothing

Application.RefreshDatabaseWindow

DoCmd.Close acForm, "fParcourir"
DoCmd.OpenForm "fParcourir"
End If

End Sub


 
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