XL 2010 Filtrer un Combobox en VBA excel

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

aurelio.ewane

XLDnaute Occasionnel
Bonjour Chers Excellsiste,
je possède une listbox avec un grand nombre de données
et je voudrais a partir d'un textbox lorsque je saisie une valeur que mon liste se filtre
c'est à dire une sorte de saisie intuitive pour pouvoir faire des recherches

pour mieux faire la recherche
je peut rechercher en saisissant
son matricule
Son nom
Son prenom
Sa date de naissance
Son Lieu de Naissance
le nom d'un parent

voila les champs ou je voudrais que ma recherche s'effectue

je joins un fichier avec ce que jai fais que je trouve très lent
Sil vous plait pouvez vous me rendre cela plus rapide et plus digeste
et aussi ma plage peut être variable
bien vouloir tenir compte de cela

voici mon code qui ne fonctionne pas
Option Base 1

Private Sub TextBox1_Change()
Call RechercheItems(2, 110, 1)
End Sub

Private Sub UserForm_Initialize()
Dim Sh As Worksheet
Set Sh = ThisWorkbook.Sheets("Base")

'Derniere ligne vide
Let LigneFin = Sh.Cells(Sh.Rows.Count, 2).End(xlUp).Row
Table = Sh.Range("B6😀F" & LigneFin)
Me.ListBox1.List() = Table
Me.ListBox1.ColumnCount = 109
'Me.ListBox1.ColumnWidths = "100;100"

Set Sh = Nothing
End Sub

Sub RechercheItems(ByVal CD As Long, ByVal CF As Long, ByVal Item As Long)
Dim Sh As Worksheet
Dim Plage, EeACellule As Range
Dim EeACounter As Long, EeAFirstAddress As Long, EeALigneFin As Long, EeANbcol As Long, EeAIndex As Long, EeAColonne As Long
Dim EeATable()
Set Sh = ThisWorkbook.Worksheets("Base")

Let EeALigneFin = Sh.Cells(Sh.Rows.Count, CD + 1).End(xlUp).Row
Let EeANbcol = CF - CD + 1
Me.FrameListBox1.ScrollTop = 0

'Call DisableAll

If Me.Controls("Textbox" & Item).Text = "" Then 'Or Me.Controls("ComboBox" & N2).Text = "Clicquer pour effectuer une recherche" Then

If EeALigneFin = 50 Then
Me.ListBox1.Enabled = False
Else
Me.ListBox1.Enabled = True
'temp = Sh.Range(Sh.Cells(51, CD), Sh.Cells(LF, CF)).Value
Me.ListBox1.List() = Sh.Range(Sh.Cells(51, CD), Sh.Cells(EeALigneFin, CF)).Value
Me.FrameListBox1.ScrollTop = 0
Me.FrameListBox1.ScrollHeight = 15 * Me.ListBox1.ListCount
'Me.Info1.Caption = "" 'Me.ListBox1.ListCount & " occurence(s) trouvée(s)"
End If

Else

If Len(Me.Controls("Textbox" & Item).Text) >= 3 Then
Me.ListBox1.Clear
Me.ListBox1.RowSource = ""

EeACounter = 0
If EeALigneFin = 50 Then
Else


With Sh.Range(Sh.Cells(51, CD), Sh.Cells(EeALigneFin, CD + 1))
Set EeACellule = .Find(Me.Controls("Textbox" & Item).Text, _
LookIn:=xlValues, LookAt:=xlPart, SearchOrder:=xlByColumns, _
SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False)


If Not EeACellule Is Nothing Then
EeAFirstAddress = EeACellule.Row
Do
EeACounter = EeACounter + 1
ReDim Preserve EeATable(EeANbcol, EeACounter)
EeAIndex = 1
For EeAColonne = CD To CF
EeATable(EeAIndex, EeACounter) = Sh.Cells(EeACellule.Row, EeAColonne).Value
EeAIndex = EeAIndex + 1
Next EeAColonne

Set EeACellule = .FindNext(EeACellule)
Loop While Not EeACellule Is Nothing And EeACellule.Row <> EeAFirstAddress 'C.Address <> FirstAddress

If EeACounter <> 0 Then
Me.ListBox1.Column() = EeATable
Me.FrameListBox1.ScrollTop = 0
Me.FrameListBox1.ScrollHeight = 15 * Me.ListBox1.ListCount
End If

End If
'Me.Info1.Caption = Me.ListBox1.ListCount & " occurence(s) trouvée(s)"
'Me.Info1.Caption = Me.ListBox1.ListCount & " occurence(s) trouvée(s)"
End With

End If
End If
End If

'Call EnableAll
Set Sh = Nothing
Set Plage = Nothing
End Sub
 

Pièces jointes

Bonjour le Fil
Pourquoi une plage de 5 colonnes et une ListBox de 109 colonnes ?
VB:
Derniere ligne vide
Let LigneFin = Sh.Cells(Sh.Rows.Count, 2).End(xlUp).Row
Table = Sh.Range("B6😀F" & LigneFin)
Me.ListBox1.List() = Table
Me.ListBox1.ColumnCount = 109
'Me.ListBox1.ColumnWidths = "100;100
Bonne journée
Jean marie
 
Bonjour le Fil
Pourquoi une plage de 5 colonnes et une ListBox de 109 colonnes ?
VB:
Derniere ligne vide
Let LigneFin = Sh.Cells(Sh.Rows.Count, 2).End(xlUp).Row
Table = Sh.Range("B6😀F" & LigneFin)
Me.ListBox1.List() = Table
Me.ListBox1.ColumnCount = 109
'Me.ListBox1.ColumnWidths = "100;100
Bonne journée
Jean marie
la plage a bel est bien 109 colonnes
juste que dans le columnwidths je n'ai pas voulu afficher ue les 02 premières
 
Bonjour à tous,
Au vu de vôtre tableau Access serait quand même plus adapté à vôtre demande.
Toutes les colonnes N° Index sont-elles vraiment nécessaires ? (cela alourdi la recherche pour rien).
Pour ma part je travaillerais sur plusieurs tableaux liés par des index, un tableau pour les élèves, un pour les enseignants, etc..
Pouvez-vous faire ces transformations sur le classeur définitif ?
 
Bonjour,
Quelle est la finalité ?
Tu peux filtrer Va les entête de colonnes directement dans ta feuille excel, alors pourquoi une listbox ?

Quelle est la finalité ? Édité/modifier le contenu de ta feuille excel via un formulaire ou simplement affiché le résultat du filtre?

Sur quel système d'exploitation es tu windows, Mac etc.
 
je suis sur windows la
Bonjour,
Quelle est la finalité ?
Tu peux filtrer Va les entête de colonnes directement dans ta feuille excel, alors pourquoi une listbox ?

Quelle est la finalité ? Édité/modifier le contenu de ta feuille excel via un formulaire ou simplement affiché le résultat du filtre?

Sur quel système d'exploitation es tu windows, Mac etc.
finalité cest de pouvoir rechercher facilement un eleve
 
bonjour le fil,
mon essai, juste tapez quelque chose dans le textbox1
Edit : mais pareil a @dysorthographie, je ne sais pas la finalité ...
je regarde grandement merci
la finalité cest de faciliter la recherche d'un eleve en tapant son nom, ou sa classe, ou encore sa det de naissance etc
bonjour le fil,
mon essai, juste tapez quelque chose dans le textbox1
Edit : mais pareil a @dysorthographie, je ne sais pas la finalité ...
Merci jai essayé mais la recherche ne se fait pas je voudrais par exemple si je veux rechercher un eleve et je ne connais que son prenoms je saisie une partie de son nom ca recherche tous ceux qui ont ceux no et sa affiche dans la liste listbox. cela me permet de rechercher rapidement et facilement... et videment on peut aussi rechercher par matricule et aussi par date de naissance ou lieu de naissance....
on n'est pas obligé d'afficher tous le tableau dans la listbox, o, peut afficher juste du matricule jusqua la classe
 
Ma solution, en attendant.

Edit: dernière minute: ajouté un dispositif qui sélectionne la ligne dans la base correspondant à une ligne sélectionnée dans la ListBox
jaime bien ta demarche, mais esce quil yaurait une maniere de faire en sorte que lorsquon selectionne le parametre de recherche ici qui ne peuvent etre que
le matricule
le nom et prenom
la date et naissance
la classe
qua dans le deuxieme combobox qui serait alors un textbox, on ai la possibilité de filtrer le tableau en prenant comme colonne de filtre la colonne selectionné par le combobox et permettant donc davoir une liste dans listbox que je pourrais selectionner.
 
Oui, bien sûr, on peut limiter la liste des intitulés disponibles, voire supprimer la ComboBox des intitulés, mais prévoir une ComboBox séparée pour chaque critère de recherche. Mais il n'y a pas de raison de mettre une TextBox au lieu d'une ComboBox pour la valeur. Une ComboBox n'est pas essentiellement faite pour y choisir un élément de sa liste, mais surtout y saisir un début, comme pour une TextBox.
Si c'est une question de facilité de choix de l'intitulé, on peut aussi classer la liste des intitulés par ordre alphabétique sans presque rien changer dans le code. C'est fait comme ça en attendant dans cette version:
 

Pièces jointes

Dernière édition:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
5
Affichages
238
Réponses
3
Affichages
729
Réponses
4
Affichages
549
  • Question Question
XL 2021 VBA excel
Réponses
4
Affichages
244
Retour