formateur informatique

Liste déroulante Excel chargée de valeurs uniques triées

Accueil  >  Bureautique  >  Excel  >  Excel VBA  >  Liste déroulante Excel chargée de valeurs uniques triées
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    Vidos astuces Instagram
Sujets que vous pourriez aussi aimer :


Remplir une liste de valeurs uniques triées

Avec cette nouvelle astuce Excel VBA, nous allons découvrir que les listes déroulantes des formulaires offrent une propriété fort intéressante pour charger dynamiquement leurs contenus, quand elles sont associées à des plages dynamiques sur la feuille Excel.

Classeur Excel à télécharger
Pour la démonstration de cette nouvelle astuce, nous suggérons d'appuyer l'étude sur un classeur Excel offrant quelques données et un formulaire abritant deux listes déroulantes. Nous débouchons sur une feuille très simple. Elle énumère quelques départements en colonne C. Il convient de les charger dans une liste déroulante d'un formulaire Excel. Mais celle-ci doit être en mesure d'intégrer les nouvelles entrées, soit les nouveaux départements ajoutés, sans intervention de l'utilisateur. Sur la gauche de la feuille, vous notez la présence d'un bouton intitulé Afficher.
  • Cliquer sur ce bouton,
Bouton de feuille Excel pour afficher un formulaire VBA avec deux listes déroulantes

Comme vous pouvez le voir, cette action déclenche l'ouverture d'un formulaire composé de deux listes déroulantes. Mais ces dernières sont vides pour l'instant. Elles ne sont pas encore liées dynamiquement à des sources de données.

Plage de cellules évolutive
Pour que les données d'une liste déroulante évoluent en fonction des nouveaux ajouts, elle doit être liée à une plage dynamique. La façon la plus simple pour créer ce type de plage est d'exploiter la fonctionnalité de mise sous forme de tableau.
  • Cliquer sur la croix du formulaire pour le fermer,
  • Sélectionner les cellules des départements, soit la plage C3:C13,
  • Dans la section Styles du ruban Accueil, cliquer sur le bouton Mettre sous forme de tableau,
  • Dans les propositions, cliquer sur un modèle de la première rangée (Catégorie nommée Clair),
  • Dans la boîte de dialogue qui suit, conserver décochée la case pour les entêtes,
Nom dynamique pour plage Excel évolutive

Comme vous le constatez, les cellules présélectionnées sont zonées par Excel pour confirmation.
  • Valider la création de cette plage de cellules dynamique en cliquant sur le bouton Ok,
Désormais, nos données sont encapsulées dans un modèle Excel. Plus précisément, il s'agit d'une plage nommée destinée à scruter l'évolution des données pour s'ajuster automatiquement. C'est ce que nous allons très vite constater.

Si maintenant vous consultez la zone Nom en haut à gauche de la feuille Excel, vous constatez que ces départements sont embarqués dans une plage de cellules nommée Tableau1.

Nom dynamique de la plage de données Excel

Lier une liste à une plage nommée
Nous allons le découvrir, c'est la propriété RowSource d'une liste déroulante qui permet de faire la jonction avec les données d'une feuille pour la remplir automatiquement.
  • Réaliser le raccourci clavier ALT + F11 pour basculer dans l'éditeur VBA Excel,
  • Dans l'explorateur de projet sur la gauche, double cliquer sur l'élément fListes,
Ainsi, nous affichons le formulaire dans sa vue en conception.
  • Sur ce formulaire, cliquer sur la première liste déroulante pour la sélectionner,
La fenêtre Propriétés doit être visible sous l'explorateur de projet. Si ce n'est pas le cas dans votre environnement, vous pouvez la rendre disponible, en cliquant sur la commande Fenêtre propriétés dans le menu Affichage.
  • Dans cette fenêtre, régler la valeur de l'attribut RowSource sur le nom du tableau : Tableau1,
  • Puis, valider par la touche Entrée du clavier,
Lier une liste déroulante de formulaire Excel à une plage de données dynamique

Notre liste déroulante doit désormais se nourrir des informations encapsulées dans la plage nommée automatiquement par Excel. Nous proposons de le constater.
  • Enregistrer les modifications (CTRL + S) et basculer sur la feuille Excel (ALT + Tab),
  • Cliquer alors sur le bouton Afficher,
  • Puis, déployer la première liste déroulante sur le formulaire qui apparaît,
Comme vous pouvez le voir, elle est parfaitement chargée des départements de la plage de cellules utilisée comme source de données.
  • Fermer le formulaire en cliquant sur la croix de sa fenêtre,
  • Puis, cliquer sur la cellule C15 pour la sélectionner,
Il s'agit de la première cellule vide située juste après le dernier département.
  • Ajouter un nouveau département comme par exemple : 95-Val d'Oise,
  • Puis, valider par la touche Entrée du clavier,
Maintenant, si vous rouvrez le formulaire et que vous déployez la première liste déroulante, vous constatez que la nouvelle entrée a automatiquement été intégrée. Et pour cela, nous n'avons engagé ni calcul, ni code VBA.
  • Fermer de nouveau le formulaire pour revenir sur la feuille,
  • En cellule C16, inscrire le nouveau département suivant : 26-Drome,
Maintenant, si vous rouvrez le formulaire et que vous déployez sa première liste déroulante, vous constatez la présence de ce nouveau département. Certes mais il n'est pas à sa place. Dans l'ordre alphabétique, il devrait être placé beaucoup plus haut.

Nouvelles données ajoutées automatiquement à la liste VBA Excel mais pas triées

Trier les données d'une liste déroulante
Il existe une astuce pour trier ces données dynamiques avant de les charger dans une liste déroulante. C'est d'ailleurs la raison de la présence du second ComboBox sur le formulaire. Depuis la version 2019, Excel offre une fonction matricielle dédiée qui se nomme Trier. Elle répond par un tableau des informations réorganisées, repéré par une ancre. En d'autres termes, il est automatiquement attaché à une plage dynamique.
  • Fermer le formulaire pour revenir sur la feuille Excel,
  • En cellule E4, taper et valider par Entrée la formule suivante : =TRIER(Tableau1),
Comme vous le constatez, la fonction matricielle répond bien par un tableau des données de la première plage, réorganisées dans l'ordre alphabétique. Cette fois, le département de la Drôme est à sa place.
  • Sélectionner l'intégralité de ces données triées,
Désormais, en consultant la zone Nom, vous remarquez que cette plage est repérée par une ancre : E4#. Cette formule matricielle se nourrit des informations d'une plage dynamique. Elle est aussi amenée à évoluer au même rythme. Et c'est ce nom (E4#) qui matérialise cette plage aux bornes évolutives. Nous allons donc l'exploiter dans la propriété RowSource de la seconde liste déroulante pour la remplir dynamiquement.
  • Revenir dans l'éditeur VBA Excel (ALT + F11),
  • Sur le formulaire en conception, cliquer sur la deuxième liste déroulante pour la sélectionner,
  • Régler sa propriété RowSource sur la valeur : E4#,
  • Puis, valider avec la touche Entrée du clavier,
  • Enregistrer les modifications et revenir sur la feuille Excel,
  • Cliquer sur le bouton Afficher et déployer la seconde liste déroulante,
Comme vous pouvez l'apprécier, les données de la première plage sont toutes restituées, mais elles sont triées dans l'ordre alphabétique cette fois.
  • Fermer le formulaire en cliquant sur la croix de sa fenêtre,
  • En cellule C17, ajouter le département suivant : 08-Ardennes,
  • Cliquer alors sur le bouton Afficher pour rouvrir le formulaire,
  • Puis, déployer la seconde liste déroulante,
C'est avec plaisir que vous constatez que les données sont toujours intégrées dynamiquement, tout en considérant les nouveaux ajouts mais cette fois avec une réorganisation alphabétique orchestrée à la volée par la fonction Trier.

Charger une liste déroulante de valeurs dynamiques triées sur un formulaire Excel

Une fois encore, nous sommes donc parvenus à remplir une liste déroulante avec du contenu dynamique et évolutif et ce, sans l'appui du 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