formateur informatique

Vider une liste déroulante en VBA Access

Accueil  >  Bureautique  >  Access  >  Access VBA  >  Vider une liste déroulante 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 :


Vider une liste déroulante

L'idée peut sembler anecdotique et la technique triviale, mais il n'est pas si simple que cela de vider une liste déroulante de tous ses éléments par le code VBA. En effet, contrairement à une zone de liste ou à d'autres contrôles, une liste déroulante n'offre pas de méthode Clear. En conséquence, chaque élément doit être passé en revue pour être supprimé tour à tour.

Mais pourquoi est-ce important de savoir purger une liste déroulante ? Dans de nombreuses applications, les contenus des listes déroulantes doivent s'adapter au contexte et aux actions de l'utilisateur. Dans ces conditions, il n'est pas question d'empiler les nouvelles entrées sur les anciennes. Il est question de remplacer les anciennes par les nouvelles. Donc, les éléments doivent d'abord être supprimés pour ensuite pouvoir nourrir la liste avec les nouvelles entrées.

Base de données Access à télécharger
Pour la démonstration de la technique, nous proposons d'appuyer l'étude sur une base de données Access hébergeant un formulaire avec une liste déroulante qui se remplit automatiquement de contenu à l'ouverture.
  • Télécharger le fichier compressé vider-liste-deroulante.rar en cliquant sur ce lien,
  • Le décompresser dans le dossier de votre choix,
  • Double cliquer sur la base de données résultante pour l'ouvrir dans Access,
  • Cliquer sur le bouton Activer le contenu du bandeau de sécurité,
  • Dans le volet de navigation sur la gauche, double cliquer sur le formulaire fParcourir,
  • Sur le formulaire en exécution, déployer la liste déroulante qui se propose,
Liste déroulante de formulaire Access chargée automatiquement des noms de tables

Comme vous pouvez le voir, cette liste déroulante est effectivement remplie automatiquement des noms de tables qui sont énumérées dans le volet de navigation sur la gauche de l'écran.

Parcourir les éléments de la liste déroulante
Nous l'avons dit, une liste déroulante ne propose pas de méthode Clear mais elle propose la méthode RemoveItem. Elle permet de supprimer un élément précis de la liste en le désignant par sa position. L'idée consiste donc à les parcourir tous par le biais d'une boucle. Ainsi, à chaque passage, nous pourrons exploiter cette méthode RemoveItem en lui passant l'indice en cours de lecture dans la boucle, correspondant à la position de l'élément dans la liste. Mais nous allons vite le comprendre, il s'agit d'une fausse bonne idée sur laquelle tout le monde se rue de prime abord.
  • 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 Vider pour le sélectionner,
  • Dès lors, activer l'onglet Evénement de sa feuille de propriétés,
  • Cliquer sur le petit bouton associé à son événement Au clic,
  • Dans la boîte de dialogue qui suit, choisir le générateur de code et valider par Ok,
Déclencher un code VBA Access au clic sur un bouton de formulaire

Nous nous retrouvons ainsi propulsés dans l'éditeur VBA Access, entre les bornes de la procédure événementielle vider_Click.
  • Dans les bornes de cette procédure, ajouter les déclarations et l'affectation suivantes :
Private Sub vider_Click()
Dim nb As Integer: Dim i As Integer

nb = listeTables.ListCount


End Sub


Nous typons les deux variables comme des entiers (Integer). La seconde (i) doit être utilisée comme variable de boucle tandis que nous exploitons la première (nb) pour récupérer le nombre d'éléments contenus dans la liste déroulante. Pour cela, nous dégainons la propriété ListCount sur l'objet listeTables qui représente la liste déroulante du formulaire.
  • A la suite du code, créer la boucle suivante :
...
For i = 0 To nb - 1
listeTables.RemoveItem (i)
Next i
...


Nous partons donc du premier élément situé à la position zéro pour rejoindre le dernier situé à la position nb-1. Et c'est ainsi que nous supprimons chaque élément passé en revue en engageant la méthode RemoveItem sur l'objet de liste déroulante. Et pour que cette méthode sache quel élément il est question de supprimer, nous lui indiquons sa position dans la liste en paramètre.
  • Enregistrer les modifications (CTRL + S) et basculer sur le formulaire (ALT + Tab),
  • Exécuter ce dernier avec la touche F5 du clavier,
  • Puis, cliquer sur le bouton Vider,
Erreur VBA au moment de vider la liste déroulante

Comme vous pouvez le voir, la magie n'opère pas. Une erreur surgit. Elle indique qu'un élément situé à une position définie, ne peut être trouvé. Pourtant, nous les passons bien tous en revue dans l'ordre. Et c'est là que réside le problème. Au fil des premières suppressions, le contenu de la liste déroulante se restreint. Donc, les éléments qui étaient présents dans les positions supérieures, sont descendus. L'indicateur est faussé et la suppression ne peut être entreprise.
  • Cliquer sur le bouton Fin de la boîte de dialogue pour stopper l'exécution,
Parcourir la liste à l'envers
L'astuce est très simple mais brillante. Le procédé est identique mais il consiste à parcourir les éléments du dernier au premier. Ainsi, en débutant la suppression à partir des éléments du bas, nous n'aurons pas de mauvaise surprise en les remontant. Les données placées sur les premières positions seront toujours bien présentes.

Avant de procéder et pour bien comprendre, si vous déployez la liste déroulante sur le formulaire, vous remarquez que des éléments ont bien été supprimés, mais pas tous.

Tous les éléments n-ont pas été supprimés de la liste VBA Access
  • Fermer le formulaire en cliquant sur la croix de son onglet,
  • Puis, le rouvrir en double cliquant sur son nom dans le volet de navigation,
Ainsi, nous rechargeons complètement la liste déroulante pour la simulation à venir.
  • Revenir dans l'éditeur VBA Access entre les bornes de la procédure vider_Click,
  • Adapter le code de la boucle selon les instructions en gras,
Private Sub vider_Click()
Dim nb As Integer: Dim i As Integer

nb = listeTables.ListCount

For i = nb - 1 To 0 Step -1
listeTables.RemoveItem (i)
Next i

End Sub


Le pas naturel d'une boucle est l'incrémentation d'une unité. Comme cette fois nous partons du dernier élément (nb-1) pour rejoindre le premier (0), nous exploitons l'instruction Step pour indiquer de parcourir les éléments en descendant (-1) en non plus en montant.

Maintenant, si vous cliquez sur le bouton Vider du formulaire, vous constatez premièrement que plus aucune alerte ne surgit. En déployant ensuite la liste déroulante, vous notez deuxièmement que son contenu est effectivement parfaitement vidé, par notre tout petit code VBA.

 
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