IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Recherche dans une listbox


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Femme Profil pro
    Femme au foyer
    Inscrit en
    Novembre 2024
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 59
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Femme au foyer

    Informations forums :
    Inscription : Novembre 2024
    Messages : 2
    Par défaut Recherche dans une listbox
    Bonjour,

    J'ai mis en place le code proposé par joe.levrai dans la discussion ci-dessous

    https://www.developpez.net/forums/d1...x/#post8319424

    Sous cette forme le code recherche dans la 1ère colonne, mais :

    1- je voudrais l'améliorer pour qu'il recherche dans les autres colonnes

    2- qu'il ne prenne pas en compte la casse

    3- qu'il aille me sélectionner dans la ListBox1 le premier résultat trouvé

    Je vous ai mis mon fichier en pièce jointe.

    Merci pour votre aide et Bon Dimanche


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
     
    Function data_in_listbox() 'Affichage Liste Clients (ListeBoxClients)
    ListBox1.ColumnCount = 5
    ListBox1.ColumnWidths = "50;50;50;50;50"
    Sheets("Feuil1").Activate
    Dim lastRow As Long
    lastRow = Cells(Rows.Count, "A").End(xlUp).Row
    If lastRow <> 1 Then
    ListBox1.List = Range("A2:E" & lastRow).Value
    End If
    End Function
     
    Private Sub TextBoxRecherche_Change()
    With Me
        ' efface le listbox de filtrage
        .ListBoxResultats.Clear
     
        ' pour chaque élément de la matrice
        For i = 1 To .ListBox1.ListCount
            ' si l'élément commence par ce qui est écrit dans le champs recherche
            ' on l'ajoute au listbox de filtrage
            FILTRE = "*" & TextBoxRecherche.Text & "*"
            If .ListBox1.List(i - 1) Like FILTRE Then .ListBoxResultats.AddItem .ListBox1.List(i - 1)
        Next i
     
    End With
    End Sub
     
    Private Sub UserForm_Initialize()
    Call data_in_listbox
    End Sub
    Fichiers attachés Fichiers attachés

  2. #2
    Membre Expert
    Inscrit en
    Décembre 2002
    Messages
    993
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 993
    Par défaut
    Bonjour, voici une proposition:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    Private Sub TextBoxRecherche_Change()
        Dim FILTRE As String
        Dim i As Long, j As Long
        Dim resultatTrouve As Boolean
     
        With Me
            .ListBoxResultats.Clear
     
            ' Définit le filtre en ignorant la casse
            FILTRE = "*" & LCase(TextBoxRecherche.Text) & "*"
     
            For i = 0 To .ListBox1.ListCount - 1
                For j = 0 To .ListBox1.ColumnCount - 1
                    If LCase(.ListBox1.List(i, j)) Like FILTRE Then
                        .ListBoxResultats.AddItem .ListBox1.List(i, 0)
                        .ListBoxResultats.List(.ListBoxResultats.ListCount - 1, 1) = .ListBox1.List(i, 1)
                        .ListBoxResultats.List(.ListBoxResultats.ListCount - 1, 2) = .ListBox1.List(i, 2)
                        .ListBoxResultats.List(.ListBoxResultats.ListCount - 1, 3) = .ListBox1.List(i, 3)
                        .ListBoxResultats.List(.ListBoxResultats.ListCount - 1, 4) = .ListBox1.List(i, 4)
     
                        ' Sélectionne le premier résultat trouvé dans ListBox1
                        If Not resultatTrouve Then
                            .ListBox1.ListIndex = i
                            resultatTrouve = True
                        End If
                        Exit For
                    End If
                Next j
            Next i
        End With
    End Sub

  3. #3
    Candidat au Club
    Femme Profil pro
    Femme au foyer
    Inscrit en
    Novembre 2024
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 59
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Femme au foyer

    Informations forums :
    Inscription : Novembre 2024
    Messages : 2
    Par défaut
    Citation Envoyé par Franc Voir le message
    Bonjour, voici une proposition:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    Private Sub TextBoxRecherche_Change()
        Dim FILTRE As String
        Dim i As Long, j As Long
        Dim resultatTrouve As Boolean
     
        With Me
            .ListBoxResultats.Clear
     
            ' Définit le filtre en ignorant la casse
            FILTRE = "*" & LCase(TextBoxRecherche.Text) & "*"
     
            For i = 0 To .ListBox1.ListCount - 1
                For j = 0 To .ListBox1.ColumnCount - 1
                    If LCase(.ListBox1.List(i, j)) Like FILTRE Then
                        .ListBoxResultats.AddItem .ListBox1.List(i, 0)
                        .ListBoxResultats.List(.ListBoxResultats.ListCount - 1, 1) = .ListBox1.List(i, 1)
                        .ListBoxResultats.List(.ListBoxResultats.ListCount - 1, 2) = .ListBox1.List(i, 2)
                        .ListBoxResultats.List(.ListBoxResultats.ListCount - 1, 3) = .ListBox1.List(i, 3)
                        .ListBoxResultats.List(.ListBoxResultats.ListCount - 1, 4) = .ListBox1.List(i, 4)
     
                        ' Sélectionne le premier résultat trouvé dans ListBox1
                        If Not resultatTrouve Then
                            .ListBox1.ListIndex = i
                            resultatTrouve = True
                        End If
                        Exit For
                    End If
                Next j
            Next i
        End With
    End Sub

    Super, exactement ce que je recherchais , Merci Franc

Discussions similaires

  1. [XL-2003] Afficher les résultats d'une recherche dans une listbox
    Par sword56 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 31/03/2012, 20h24
  2. auto recherche dans une listbox
    Par pseudo88 dans le forum Général JavaScript
    Réponses: 0
    Dernier message: 19/05/2010, 13h28
  3. Auto recherche dans une listbox
    Par pseudo88 dans le forum ASP.NET
    Réponses: 2
    Dernier message: 09/05/2010, 22h33
  4. Comment effectuer une recherche dans une listBox?
    Par Mickey.jet dans le forum Delphi .NET
    Réponses: 2
    Dernier message: 19/05/2006, 16h15
  5. recherche dans une listbox
    Par micknic dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 23/02/2005, 21h39

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo