Pour partager cette vidéo sur les réseaux sociaux ou sur un site, voici son url :
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.
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,
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.
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,
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.
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.
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.