Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

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,
J'arrive un peu tard sur ce sujet et je n'ai pas lu les 3 pages.
A titre d'information j'ai ça dans mes cartons, si ça peut être utile...

Sinon, on n'est pas obligé d'avoir un couple TextBox / ListBox.
Une ComboBox fait l'affaire. Une ancienne ressource...
 

Pièces jointes

Je te reviens
bonjour jais essayer de tous faire par tableau et ca marche plutot bien



jai dans ma plage plusieurs colonne:

Colonne H Colonnes des eleves

Colonne R Colonnes des Classes ( ici on peut avoir plusieurs classes

Colonne T Colonne des Séquences

Colonne V Colonne des Coefficients

Colonne Y colonne des Notes


Je voudrais avoir dans le combobox 1 la liste des classes

Je voudrais avoir dans le combobox 2 la liste des Sequences

Je voudrais donc avoir dans le Listbox 1 la liste des eleves correspondant à la classe choisis
Colonne0 à colonne 9
évidement les colonnes 2 à 9 seront masquées par le columwidths

les colonnes 10 11 et 12 seront pour la moyenne de la séquence 1, son rang et l'appreciations

Pareil pour les colonnes
12-13-14 pour la Séquence 2

15-16-17 pour la séquence 3

17-18-19 pour la séquence 4

20-21-22 pour la séquence 5

23-24-25 pour la séquence 6


pour la moyenne, le calcul est simple
c'est la somme de toutes les notes de cet élevé multiplié par son coef divisé par le total des coefficients ou il ya eu une note
(entendu qu'une note peut etre de 0 à 20)

Exemple:
Si l'a eu
Note1 15 coefficient 2
Note2 10 Coefficient 3
Note3 M Coefficient 2 (C'est à dire absent)
Note4 6 Coefficient 1 (C'est à dire absent)

Sa Moyenne sera donc 15*2+10*3+6*1=30+30+6=66
total des coefficients sera 2+3+1=6
Sa moyenne sera donc pour cette séquence 66 divisé par 6 qui lui fera 11 de moyenne
pour le rang il est calculé comme nous le savons en utilisant la fonction rang

Jai essayer avec des formules sommeprod qui marche bien qui est très lente mais je nais pas comment l'implémenter en VBA EXCEL

Prière de m'aider en programmant la macro qui se chargera des calculer les moyennes rangs et appréciations suivant l'explication donné plus haut

pour les appréciations jai élaborer une fonction
AppreciationMoyenne qui tiens compte d'une plage AH51: AK
vous pourrez si vous jugez nécessaire la reprogrammer pour quelle soit plus rapide



je joins un fichier

Cordialement







Le Listbox
 

Pièces jointes

Du fichier que j'avais joint, glissez/déplacez le module de service standard MSujetCBx et les modules de classe ComboBoxLiées et ComboBoxMmbr, reprenez la programmation de l'UserForm et adaptez là. Je ne vais quand même pas refaire 36 fois la même chose !
 
Une fois l'adaptation effectué, le garnissage de la ListBox sera peut être plus compliqué, surtout si vous voulez une synthèse d'une seule ligne pour chaque élève. Je vous équiperai le classeur d'une fonction Gigogne qui pourrait faciliter son élaboration.
 
- 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
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…