Textbox recherche & tri dans une Listbox

Y compris Power BI, Power Query et toute autre question en lien avec Excel
p
patafix
Nouveau venu
Nouveau venu
Messages : 7
Inscrit le : 23 août 2017
Version d'Excel : 2013 FR

Message par patafix » 28 août 2017, 12:34

Bonjour à tous,

J'espère que vous saurez m'aider, j'ai essayé plusieurs codes trouvés sur ce forum et ailleurs sans réussir à les faire fonctionner jusqu'ici :

J'ai un UserForm (accessible via le bouton bleu) permettant de sélectionner des items dans une Listbox, et en cliquant sur Valider, d'effectuer le tri correspondant à la sélection dans un certain nombre de feuilles.

Dans cet UserForm, je voudrais faire une barre de recherche (Textbox) qui me permette de trier les propositions de cases à cocher qui apparaissent dans la Listbox.
Dans le cas où la barre de recherche n'est pas utilisée, je voudrais que la listbox reste affichée.

Dans le fichier ci-joint, j'ai déjà positionné la Textbox.
Mon dernier essai est le code suivant, mais comme je suis un bébé sur VBA je ne comprends pas ce qu'il manque pour que cela fonctionne - je n'ai pas de bug, mais l'effet recherché ne se produit pas :
Private Sub TextBox1_Change()

    Dim i As Long
    Dim sFind As String
     
    sFind = Me.TextBox1.Text
     
    If Len(sFind) = 0 Then
        Me.ListBox_Selection_Postes.ListIndex = -1
        Me.ListBox_Selection_Postes.TopIndex = 0
    Else
        For i = 0 To Me.ListBox_Selection_Postes.ListCount - 1
            If UCase(Left(Me.ListBox_Selection_Postes.List(i), Len(sFind))) = UCase(sFind) Then
                Me.ListBox_Selection_Postes.TopIndex = i
                Me.ListBox_Selection_Postes.ListIndex = i
                Exit For
            End If
        Next i
    End If

End Sub
PI : Les données affichées dans la listbox proviennent du tableau en onglet "source".
A noter que la ListBox a comme propriété d'être SelectMulti - pas certaine que cela puisse avoir une incidence, mais sait-on jamais.

D'avance merci beaucoup pour votre aide !
20170828_Fichier exemple_Test.xlsm
(604.06 Kio) Téléchargé 153 fois
Avatar du membre
thev
Membre impliqué
Membre impliqué
Messages : 2'445
Appréciations reçues : 205
Inscrit le : 13 juin 2016
Version d'Excel : 2013 FR 64 bits

Message par thev » 28 août 2017, 14:36

Bonjour,

Tout d'abord, je remplacerai :
 Me.ListBox_Selection_Postes.TopIndex = i
 Me.ListBox_Selection_Postes.ListIndex = i
par
Me.ListBox_Selection_Postes.Selected(i) = True
Ensuite, je changerai l'événement "Change" qui se produit dès le premier caractère entré dans la TextBox par un appui sur la touche "Entrée" après avoir entré l'ensemble des caractères :
Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
       
    Dim i As Long
    Dim sFind As String

    If KeyCode = vbKeyReturn Then
        sFind = Me.TextBox1.Text
     
        If Len(sFind) = 0 Then
            Me.ListBox_Selection_Postes.ListIndex = -1
            Me.ListBox_Selection_Postes.TopIndex = 0
        Else
            For i = 0 To Me.ListBox_Selection_Postes.ListCount - 1
                If UCase(Left(Me.ListBox_Selection_Postes.List(i), Len(sFind))) = UCase(sFind) Then
                    Me.ListBox_Selection_Postes.Selected(i) = True
                    Exit For
                End If
            Next i
        End If

    End If

End Sub
p
patafix
Nouveau venu
Nouveau venu
Messages : 7
Inscrit le : 23 août 2017
Version d'Excel : 2013 FR

Message par patafix » 28 août 2017, 15:23

Bonjour Thev,

Merci pour la suggestion. Je viens d'essayer, mais tout comme ma tentative précédente, je n'ai ni erreur ni changement qui apparaisse.

Je ne vois pas ce qu'il manque ::~
Avatar du membre
thev
Membre impliqué
Membre impliqué
Messages : 2'445
Appréciations reçues : 205
Inscrit le : 13 juin 2016
Version d'Excel : 2013 FR 64 bits

Message par thev » 28 août 2017, 17:48

Bonjour,

Tu as bien appuyé sur la touche Entrée après avoir entré ton critère de recherche ?
p
patafix
Nouveau venu
Nouveau venu
Messages : 7
Inscrit le : 23 août 2017
Version d'Excel : 2013 FR

Message par patafix » 28 août 2017, 17:59

Oui...
Avatar du membre
thev
Membre impliqué
Membre impliqué
Messages : 2'445
Appréciations reçues : 205
Inscrit le : 13 juin 2016
Version d'Excel : 2013 FR 64 bits

Message par thev » 28 août 2017, 18:11

Si j'entre comme critère de recherche "Poste 015", il me coche bien ce poste après avoir appuyé sur la touche Entrée. Ton code ne permet qu'une seule sélection du fait de la présence de l'instruction : Exit For
            For i = 0 To Me.ListBox_Selection_Postes.ListCount - 1
                If UCase(Left(Me.ListBox_Selection_Postes.List(i), Len(sFind))) = UCase(sFind) Then
                    Me.ListBox_Selection_Postes.Selected(i) = True
                    Exit For
                End If
            Next i
p
patafix
Nouveau venu
Nouveau venu
Messages : 7
Inscrit le : 23 août 2017
Version d'Excel : 2013 FR

Message par patafix » 28 août 2017, 18:15

Merci pour l'info !

Est-il possible de faire en sorte que si je tape "5", j'ai tous les résultats incluant ce chiffre qui s'affichent ?
J'ai besoin que la multisélection fonctionne aussi avec la recherche
Avatar du membre
thev
Membre impliqué
Membre impliqué
Messages : 2'445
Appréciations reçues : 205
Inscrit le : 13 juin 2016
Version d'Excel : 2013 FR 64 bits

Message par thev » 28 août 2017, 20:42

bonsoir,

il suffit de modifier ton code ainsi :
            For i = 0 To Me.ListBox_Selection_Postes.ListCount - 1
                If UCase(Me.ListBox_Selection_Postes.List(i)) Like "*" & UCase(sFind) & "*" Then
                    Me.ListBox_Selection_Postes.Selected(i) = True
                End If
            Next i
p
patafix
Nouveau venu
Nouveau venu
Messages : 7
Inscrit le : 23 août 2017
Version d'Excel : 2013 FR

Message par patafix » 28 août 2017, 23:13

Merci beaucoup, ça fonctionne parfaitement comme ça !

Bonne soirée
Répondre Sujet précédentSujet suivant
  • Sujets similaires
    Réponses
    Vues
    Dernier message