creer un champ de recherche

niamké19

XLDnaute Nouveau
bonjour à vous. bonjour forum
suis nouveau dans ce cadre.
j'ai un petit projet que je voudrais réaliser. il s'agit d'une petite application avec vba pour enregistrer les élèves d'une école primaire. j'ai presque terminé le projet mais le coté qui me fatigue et je n'ai toujours pas élucider c'est comment faire une recherche via un textbox et l'affichant dans une listbox.
bien voilà le soucis:
j'ai un tableau d' environ 28 colonnes que j'affiche dans une listbox. mon formulaire comprends 4 pages ; l'une pour enregistrer, l'une pour modifier, l'une pour actualiser et l'autre pour afficher les references de l'eleve.
dans la page 3 j'ai deux textbox qui sont en relation pour la recherche de l'eleve et l'autre pour la classe. je souhaiterais qu' en saisissant la premiere lettre dans le champ de recherche "nom" la listbox affiche tous les élèves ayant l'initial saisir et ainsi de suite. Et si on saisie et l'eleve et la classe , la listbox affiche également le resultat.
dans la page 4 j'ai seulement qu' un combobox chargé avec les classes du CP1 au CM2. Je souhaiterais que lorsqu'on choisit une classe la listbox affiche tous les élèves apparteneant à cette classe.
je joins mon fichier pour plus de compréhension.
merci de m'aider
 

Pièces jointes

  • APPLICATION D' ENREGISTREMENT DES ELEVES.xlsm
    631.6 KB · Affichages: 67

Lone-wolf

XLDnaute Barbatruc
Bonjour niamké et vgendron, le Forum :)

@niamké19

VB:
'En entête du formulaire
Dim WsS As Worksheet, ListOb As ListObject, ctrl As Control, num As Long, DL As Long

    'Dans UserForm_Initialize
    Set WsS = Sheets("SOURCE")
    Set ListOb = WsB.ListObjects("Tab_1")
   

    'Dans la macro d'enregistrement
    DL = WsS.Range("a" & Rows.Count).End(xlUp).Row + 1
    ListOb.ListRows.Add

    With WsS
            'Création de la Matricule
             .Range("a" & DL) = Left(txt_prenom, 3) & "-" &  1228 + DL
             .Range("b" & DL) = xxxxxxxx
            etc.
    End With

    With ListOb
        .Sort.SortFields.Clear
        .Sort.SortFields.Add _
        Key:=Range("Tab_1[Nom]"), SortOn:=xlSortOnValues, _
        Order:=xlAscending, DataOption:=xlSortNormal
        .Sort.Header = xlYes
        .Sort.Apply
    End With

    'Pour éffacer les TextBox et ComboBox
    For Each ctrl In Me.Controls
    If TypeOf ctrl Is MSForms.TextBox Or TypeOf ctrl Is MSForms.ComboBox Then ctrl = ""
    Next ctrl

Quand on utilise For i = Lbound(Tablo) to Ubound(Tablo), il ne faut pas que certaines colonnes soient vides. Quand tu enregistre un nouvel élève si il n'a pas de tuteur ou autre met un tiret dans la textbox.
 
Dernière édition:

BOISGONTIER

XLDnaute Barbatruc
Repose en paix
Bonjour,

Choix Classe par ComboBox + Recherche intuitive sur le Nom

Code:
Option Compare Text
Dim TBlBD(), Tbl()
Private Sub UserForm_Initialize()
  TBlBD = [tableau1].Value        ' pour rapidité
  Me.ListBox1.List = TBlBD
  Me.ListBox1.ColumnCount = [tableau1].Columns.Count
  Me.ListBox1.ColumnWidths = "30;50;50;50;50;50;50;50;50;50;50"
  '------------------------ Alimentation ComboBox
  Set d = CreateObject("scripting.dictionary")
  d("*") = ""
  For i = 1 To UBound(TBlBD)
    d(TBlBD(i, 4)) = ""
  Next i
  temp = d.keys
  'Tri temp, LBound(temp), UBound(temp)
  Me.ComboBox1.List = temp
  Me.ComboBox1 = "*"
End Sub

Private Sub ComboBox1_click()
  NbLignes = Application.CountIf([Tableau1[Classe]], Me.ComboBox1)
  ColRecherche = 4
  clé = Me.ComboBox1: n = 0
  ReDim Tbl(1 To NbLignes, 1 To UBound(TBlBD, 2))
  For i = 1 To UBound(TBlBD)
    If TBlBD(i, ColRecherche) Like clé Then
        n = n + 1
        For k = 1 To UBound(TBlBD, 2): Tbl(n, k) = TBlBD(i, k): Next k
     End If
  Next i
  Me.TextBoxRech = ""
  If n > 0 Then Me.ListBox1.List = Tbl Else Me.ListBox1.Clear
End Sub

Private Sub TextBoxRech_Change()
  Dim b()
  If Me.TextBoxRech <> "" Then
   Set d1 = CreateObject("Scripting.Dictionary")
   tmp = Me.TextBoxRech & "*"
   n = 0
   For i = 1 To UBound(Tbl)
      If Tbl(i, 2) Like tmp Then
        n = n + 1: ReDim Preserve b(1 To UBound(Tbl, 2), 1 To n)
        For k = 1 To UBound(Tbl, 2): b(k, n) = Tbl(i, k): Next k
     End If
   Next i
   If n > 0 Then Me.ListBox1.Column = b Else Me.ListBox1.Clear
Else
   Me.ListBox1.List = Tbl
End If
End Sub

jb
 

Pièces jointes

  • FormRechercheComboBoxIntuitif.xls
    86 KB · Affichages: 56

Lone-wolf

XLDnaute Barbatruc
Bonjour le Fil :)

@niamké19 : moi d'après l'image, il y comme un petit problème. ;)

form.gif


Apparemment: la combo sert à trier la listbox par nom - classe - sexe - status, puisqu'il y a les textbox pour la recherche. Et c'est bien l'onglet 4 qui est sélectionné.
 

Discussions similaires

  • Résolu(e)
Microsoft 365 Code de tri
Réponses
22
Affichages
206

Statistiques des forums

Discussions
311 733
Messages
2 082 015
Membres
101 870
dernier inscrit
Dethomas