Créer une liste déroulante de validation des données avec recherche, Excel VBA
Voici un exemple détaillé en VBA pour créer une liste déroulante de validation des données avec une fonctionnalité de recherche dans Excel. L’objectif est de créer une liste déroulante dynamique dans une cellule et de permettre à l’utilisateur de rechercher facilement une option dans la liste en tapant dans la cellule.
Étape 1: Préparer les données
Nous commencerons par créer une liste de données dans une colonne spécifique (par exemple, colonne A). Ensuite, la liste déroulante de validation des données sera basée sur cette liste.
Étape 2: Créer la Liste Déroulante avec Recherche
Le code VBA suivant ajoute une validation des données avec une fonction de recherche. La recherche sera effectuée à mesure que l’utilisateur commence à taper, et les éléments correspondants apparaîtront dans la liste déroulante.
Code VBA :
Sub CreerListeDeroulanteAvecRecherche() Dim ws As Worksheet Dim rng As Range Dim cell As Range Dim liste As Range Dim nomListe As String Dim dataValidation As String Dim derniereLigne As Long ' Définir la feuille de travail Set ws = ThisWorkbook.Sheets("Feuil1") ' Définir la plage des données pour la liste déroulante derniereLigne = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row Set liste = ws.Range("A1:A" & derniereLigne) ' Nom de la liste pour la validation des données nomListe = "ListeDeroulanteRecherche" ' Créer une plage nommée pour la validation des données ws.Names.Add Name:=nomListe, RefersTo:=liste ' Appliquer la validation des données à la cellule B1 Set rng = ws.Range("B1") rng.Validation.Delete ' Supprimer toute validation existante ' Ajouter une validation des données rng.Validation.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, _ Operator:=xlBetween, Formula1:="=" & nomListe ' Créer un événement de recherche pour filtrer les éléments Application.OnKey "^l", "FiltrerListe" ' Raccourci Ctrl+L pour filtrer End Sub Sub FiltrerListe() Dim ws As Worksheet Dim rng As Range Dim searchTerm As String Dim filteredRange As Range Dim cell As Range ' Définir la feuille de travail Set ws = ThisWorkbook.Sheets("Feuil1") ' Définir la plage des données Set rng = ws.Range("A1:A" & ws.Cells(ws.Rows.Count, "A").End(xlUp).Row) ' Demander à l'utilisateur de saisir un terme de recherche searchTerm = InputBox("Entrez un terme de recherche pour filtrer la liste:") ' Filtrer la plage en fonction du terme de recherche rng.AutoFilter Field:=1, Criteria1:="*" & searchTerm & "*" ' Réinitialiser la validation des données Set filteredRange = rng.SpecialCells(xlCellTypeVisible) rng.Validation.Delete rng.Validation.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, _ Operator:=xlBetween, Formula1:="=" & filteredRange.Address End Sub
Explication du Code :
CreerListeDeroulanteAvecRecherche :
1. Définir la feuille de travail et les plages :
- Nous définissons la feuille de travail (ws) et la plage des données à utiliser pour la liste déroulante (liste).
2. Créer une plage nommée pour la liste :
- Nous créons une plage nommée ListeDeroulanteRecherche qui fait référence à la plage de données (colonne A dans cet exemple).
3. Appliquer la validation des données :
- Nous appliquons une validation des données à la cellule B1 avec la liste déroulante, en utilisant la plage nommée ListeDeroulanteRecherche comme source.
4. Ajouter un raccourci clavier pour la recherche :
- Nous associons un raccourci clavier Ctrl+L (via la fonction OnKey) pour activer la recherche.
FiltrerListe :
1. Définir la feuille de travail et la plage de données :
- Nous accédons à la feuille et à la plage contenant les données.
2. Demander un terme de recherche à l’utilisateur :
- Un InputBox est utilisé pour demander à l’utilisateur d’entrer un terme de recherche. Le terme sera utilisé pour filtrer la liste.
3. Appliquer un filtre :
- Le filtre est appliqué à la plage de données en utilisant AutoFilter. Le critère de filtre est défini pour rechercher des éléments contenant le terme de recherche.
4. Réinitialiser la validation des données :
- Après avoir appliqué le filtre, nous réinitialisons la validation des données de manière à ce que la liste déroulante affiche uniquement les éléments filtrés.
Étape 3: Utilisation
1. Exécuter le code :
- Allez dans l’éditeur VBA (Alt + F11), collez ce code dans un module, puis exécutez la macro CreerListeDeroulanteAvecRecherche.
2. Rechercher dans la liste :
- Sélectionnez la cellule B1, tapez dans la cellule pour afficher la liste déroulante, et utilisez le raccourci Ctrl+L pour filtrer les éléments en fonction d’un terme.
Conclusion
Ce code vous permet de créer une liste déroulante dynamique avec une recherche dans Excel en utilisant VBA. L’utilisateur peut facilement rechercher un élément en filtrant les données affichées dans la liste déroulante.