XL 2010 Filtrer par premiers chiffres sur listbox

Dadi147

XLDnaute Occasionnel
Bonjour J'ai un userform qui récupère les noms de fichiers PDF d'un dossier vers la listbox1
Ce que je recherche, c'est un moyen de filtrer ou de trier ces noms par premières lettres sur listbox1 par textbox1
Sachant que les noms de fichiers sont une valeur numérique, par exemple 35_896500
 
Solution
Je ne sais pas comment tu charges la ListBox mais en prenant dans mon répertoire TEST, les fichiers y sont 2 fois car tu fais 2 fois remplissage_combo cheminPDF.
Sinon j'ai inclus le module dans ton code. J'ai dû y faire quelques modifs.
Le Click pour visionner a été remplacé pour DblClick en {Enter} car l'évènement ListBox_Click() se déclenche sur d'autres actions qu'un Clic souris et cela interfère avec mon code.

Dudu2

XLDnaute Barbatruc
Bonjour,
VB:
'-------------------------------------------------------
'Tri QuickSort Boisgontier
'http://boisgontierj.free.fr/pages_site/tableaux.htm#Tri
'Exemple: Call TriT1D(t, LBound(t), UBound(t))
'-------------------------------------------------------
Sub TriT1D(a, gauc, droi, Optional sens = 1) ' Quick sort
    Dim ref, g, d, temp
    ref = a((gauc + droi) \ 2)
    g = gauc: d = droi
    Do
        If sens > 0 Then
            Do While a(g) < ref: g = g + 1: Loop
            Do While ref < a(d): d = d - 1: Loop
        Else
            Do While a(g) > ref: g = g + 1: Loop
            Do While ref > a(d): d = d - 1: Loop
        End If
        If g <= d Then
            temp = a(g): a(g) = a(d): a(d) = temp
            g = g + 1: d = d - 1
        End If
    Loop While g <= d
    If g < droi Then Call TriT1D(a, g, droi, sens)
    If gauc < d Then Call TriT1D(a, gauc, d, sens)
End Sub

Code:
'------------------------------------------------------------------
'Tri QuickSort Boisgontier
'http://boisgontierj.free.fr/pages_site/tableaux.htm#Tri2DSansIndex
'Exemple: Call TriT2D(tt, 1, LBound(tt, 1), UBound(tt, 1))
'------------------------------------------------------------------
Sub TriT2D(a, ColTri, gauc, droi, Optional sens = 1) ' Quick sort
    Dim ref, g, d, k, temp
    ref = a((gauc + droi) \ 2, ColTri)
    g = gauc: d = droi
    Do
        If sens > 0 Then
            Do While a(g, ColTri) < ref: g = g + 1: Loop
            Do While ref < a(d, ColTri): d = d - 1: Loop
        Else
            Do While a(g, ColTri) > ref: g = g + 1: Loop
            Do While ref > a(d, ColTri): d = d - 1: Loop
        End If
        If g <= d Then
            For k = LBound(a, 2) To UBound(a, 2)
                temp = a(g, k): a(g, k) = a(d, k): a(d, k) = temp
            Next k
            g = g + 1: d = d - 1
        End If
    Loop While g <= d
    If g < droi Then Call TriT2D(a, ColTri, g, droi, sens)
    If gauc < d Then Call TriT2D(a, ColTri, gauc, d, sens)
End Sub
 

Dadi147

XLDnaute Occasionnel
Bonjour,
VB:
'-------------------------------------------------------
'Tri QuickSort Boisgontier
'http://boisgontierj.free.fr/pages_site/tableaux.htm#Tri
'Exemple: Call TriT1D(t, LBound(t), UBound(t))
'-------------------------------------------------------
Sub TriT1D(a, gauc, droi, Optional sens = 1) ' Quick sort
    Dim ref, g, d, temp
    ref = a((gauc + droi) \ 2)
    g = gauc: d = droi
    Do
        If sens > 0 Then
            Do While a(g) < ref: g = g + 1: Loop
            Do While ref < a(d): d = d - 1: Loop
        Else
            Do While a(g) > ref: g = g + 1: Loop
            Do While ref > a(d): d = d - 1: Loop
        End If
        If g <= d Then
            temp = a(g): a(g) = a(d): a(d) = temp
            g = g + 1: d = d - 1
        End If
    Loop While g <= d
    If g < droi Then Call TriT1D(a, g, droi, sens)
    If gauc < d Then Call TriT1D(a, gauc, d, sens)
End Sub

Code:
'------------------------------------------------------------------
'Tri QuickSort Boisgontier
'http://boisgontierj.free.fr/pages_site/tableaux.htm#Tri2DSansIndex
'Exemple: Call TriT2D(tt, 1, LBound(tt, 1), UBound(tt, 1))
'------------------------------------------------------------------
Sub TriT2D(a, ColTri, gauc, droi, Optional sens = 1) ' Quick sort
    Dim ref, g, d, k, temp
    ref = a((gauc + droi) \ 2, ColTri)
    g = gauc: d = droi
    Do
        If sens > 0 Then
            Do While a(g, ColTri) < ref: g = g + 1: Loop
            Do While ref < a(d, ColTri): d = d - 1: Loop
        Else
            Do While a(g, ColTri) > ref: g = g + 1: Loop
            Do While ref > a(d, ColTri): d = d - 1: Loop
        End If
        If g <= d Then
            For k = LBound(a, 2) To UBound(a, 2)
                temp = a(g, k): a(g, k) = a(d, k): a(d, k) = temp
            Next k
            g = g + 1: d = d - 1
        End If
    Loop While g <= d
    If g < droi Then Call TriT2D(a, ColTri, g, droi, sens)
    If gauc < d Then Call TriT2D(a, ColTri, gauc, d, sens)
End Sub
Bonsoir Tout d'abord merci de l'intérêt que vous portez à ma demande. Peut-être que je n'ai pas pu bien communiquer l'idée. En termes simples, j'ai une liste1 qui contient les noms des fichiers PDF dans un dossier spécifique dans le même chemin que le classeur. Ce que j'essaie de faire, c'est que lorsque je tape le premier numéro du nom de fichier, la liste est filtrée pour les fichiers qui incluent ce numéro. Est-il nécessaire de copier le contenu de la liste sur une feuille spécifique, par exemple, pour ce faire, ou existe-t-il un autre moyen ?
 

patricktoulon

XLDnaute Barbatruc
re
si j'ai bien compris le post#3
tu parle d'un filtre INSTR et non ORDRE ALPHA ce qui implique une reduction de liste
dans ce cas là
tu peux utiliser simplement la fonction Filter d'un array en mode include
VB:
' tu remplis ta listbox normalement comme tu le fais jusqu'à maintenant 
 ' et ....
t= application.transpose(listbox1.list,0,1))
t=filter(t,"toncritère",true)
listbox1.list=t
 

Dudu2

XLDnaute Barbatruc
Et tu tapes ce(s) 1er chiffre(s) où ? Dans une cellule ? Dans une TextBox ?
T'es sur un feuille ou un UserForm ?

A titre d'information vois cette ressource:
 

Dudu2

XLDnaute Barbatruc
Alors si tu veux absolument une TextBox + une ListBox, j'ai ça aussi. Sur UserForm et en Feuille (Active X).
Mais c'est un poil plus compliqué que la ComboBox car il faut intercepter pas moins de 5 évènements en lien avec la TextBox et la ListBox pour gérer la saisie filtrée. Mais c'est pas difficile à mettre en place car il y a un exemple pour chacun des 2 cas.

Edit: je n'ai pas mis toutes les options de filtrage qu'on trouve pour la ComboBox mais c'est possible.
 

Pièces jointes

  • Saisie Filtrée TextBox & ListBox UserForm.xlsm
    55.5 KB · Affichages: 1
Dernière édition:

Dadi147

XLDnaute Occasionnel
Une très bonne solution, mais elle diffère de ma demande. Peut-être pouvez-vous mettre n'importe quel dossier à côté du fichier appelé test, qui contient tous les fichiers au format PDF
Il y a la zone de texte 1. Vous devez écrire, par exemple, le premier ou le dernier numéro. Seuls les fichiers qui l'incluent sont affichés.
 

Pièces jointes

  • visionneuse PDF3.xlsm
    21.4 KB · Affichages: 2

Dudu2

XLDnaute Barbatruc
Je ne sais pas comment tu charges la ListBox mais en prenant dans mon répertoire TEST, les fichiers y sont 2 fois car tu fais 2 fois remplissage_combo cheminPDF.
Sinon j'ai inclus le module dans ton code. J'ai dû y faire quelques modifs.
Le Click pour visionner a été remplacé pour DblClick en {Enter} car l'évènement ListBox_Click() se déclenche sur d'autres actions qu'un Clic souris et cela interfère avec mon code.
 

Pièces jointes

  • visionneuse PDF3.xlsm
    50.2 KB · Affichages: 1
Dernière édition:

Dadi147

XLDnaute Occasionnel
Je ne sais pas comment tu charges la ListBox mais en prenant dans mon répertoire TEST, les fichiers y sont 2 fois car tu fais 2 fois remplissage_combo cheminPDF.
Sinon j'ai inclus le module dans ton code. J'ai dû y faire quelques modifs.
Le Click pour visionner a été remplacé pour DblClick en {Enter} car l'évènement ListBox_Click() se déclenche sur d'autres actions qu'un Clic souris et cela interfère avec mon code.
Merci. L'expérience a réussi. Merci beaucoup.
 

Discussions similaires

Réponses
8
Affichages
397
  • Résolu(e)
Microsoft 365 Code de tri
Réponses
22
Affichages
303

Statistiques des forums

Discussions
312 210
Messages
2 086 277
Membres
103 170
dernier inscrit
HASSEN@45