Créer une liste déroulante de validation des données avec recherche, Excel VBA

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. 

Facebook
Twitter
LinkedIn
WhatsApp
Email
Print
0
Nous aimerions avoir votre avis, veuillez laisser un commentaire.x