Rechercher des DATES sur LISTBOX
Bonjour je suis débutant sur VBA.
J'ai à la base un classeur avec plusieurs feuilles qui vont contenir des données tableau.
Pour le moment je parviens à récupérer et afficher les données grâce au critères (entêtes tableau) que je choisi sur ma Combobox et à la recherche que tape sur ma Textbox.
Toutes les colonnes fonctionnent avec la recherche sur le formulaire sauf la critère Date contenu dans la Colonne C avec des dates.
Mon raisonnement :
- J'ai une Feuil1 où sont copier les contenus des tableaux des autres feuilles.
- Ensuite Feuil2("Filtrage") qui qui reçoit la critère et données triées lors de la recherche sur le formulaire.
Merci d'excuser mon code qui serait loin d'être optimisé vu mon niveau de débutant.
Merci de votre aide pour que la recherche fonctionne aussi sur les dates.
Mon fichier d'exemple ci-joint.
'Recherche intuitive, pas tenir compte de la casse
Option Compare Text
Dim bddFeuil1, plageFeuil2, critere
Private Sub CommandButton1_Click()
'Effacer cellules Feuil2
Feuil2.Cells.Clear
'Effacer controles
Me.TextBox1.Value = ""
Me.ComboBox1.Value = ""
Me.ListBox1.RowSource = ""
End Sub
Private Sub TextBox1_Change()
'Vider contenu feuille 2
Feuil2.Cells.Clear
'Mettre valeur Combobox1 dans K1
Feuil2.[K1] = bddFeuil1.Cells(1, critere)
'Mettre valeur Textbox1 dans K2
Feuil2.[K2] = Me.TextBox1.Value & "*"
'Copier contenu feuil1(bdd) sur feuil2 pour le trier avec l'outil filtre avancé
Feuil1.[A1].CurrentRegion.AdvancedFilter Action:=xlFilterCopy, _
criteriarange:=Feuil2.[K1:K2], _
copytorange:=Feuil2.[A1], Unique:=False
'Definir variable plagefeuil2
If Feuil2.[A1].CurrentRegion.Rows.Count > 1 Then
Set plageFeuil2 = Feuil2.[A1].CurrentRegion.Offset(1).Resize(Feuil2.[A1].CurrentRegion.Rows.Count - 1)
'Faire apparaitre plageFeuil2 dans la liste box
Me.ListBox1.RowSource = plageFeuil2.Address(external:=True)
End If
End Sub
'Fomrmulaire
Private Sub UserForm_Initialize()
'Déclarion variable
Dim col
'Alimenter Combobox
For col = 1 To 6
Me.ComboBox1.AddItem Feuil1.Cells(1, col).Value
Next
'position du formulaire
Me.StartUpPosition = 0
Me.Top = 167
Me.Left = 336
End Sub
'Combobox
Private Sub ComboBox1_Change()
'Copier toutes les autres page vers une autre sauf les exclues
Dim Lg&, Sh As Worksheet, f As Worksheet
Set f = Feuil1
f.Range("A2:I1048576").ClearContents
For Each Sh In Worksheets
If Sh.Name <> f.Name And Sh.Name <> "Filtrage" Then 'Nom de la feuille à ne pas copier
Lg = Sh.Range("a" & Rows.Count).End(xlUp).Row
Sh.Range("A2:F" & Lg).Copy Destination:= _
f.Range("a" & Rows.Count).End(xlUp)(2)
End If
Next
'Parcours des champs de la combobox et récupérer le critére choisi
For col = 1 To 6
If Feuil1.Cells(1, col).Value = Me.ComboBox1.Value Then
critere = col
End If
Next
'Definir variable bddFeuil1, champs rempli
Set bddFeuil1 = Feuil1.[A1].CurrentRegion
'Compte les colonnes de ce champs
Me.ListBox1.ColumnCount = Feuil1.[A1].CurrentRegion.Columns.Count
'Division de la largeur du Champs de text(listBox) au nombre de colonnes à afficher
Me.ListBox1.ColumnWidths = "100;100;100;100;100;100"
'Declarer entetes de colonne
Me.ListBox1.ColumnHeads = True
'Vider textbox1
Me.TextBox1.Text = ""
'Donner le focus
Me.TextBox1.SetFocus
End Sub
Très grand Merci fanfan38.
Je pense que je vais m'adapter à ta proposition et clôturer.