Visualiser requete filtree dans listbox

OUIZEMANN

XLDnaute Junior
Bonjour,

Je recherche un moyen simple de visualiser le résultat d'une requête entre 2 date dans une listbox.
Ma requête fonctionne très bien, mais le résultat ne peut être vue sur la listbox.
Je n'ai pas trouvé sur le forum, ni sur le net,de réponses à mes questions.
Je vous adresse ce que j'ai fait en pièce jointe.
Pouvez-vous m'aider SVP ?
Merci par avance.
 

Pièces jointes

  • test2.xls
    63 KB · Affichages: 42
  • test2.xls
    63 KB · Affichages: 45
  • test2.xls
    63 KB · Affichages: 42

Dranreb

XLDnaute Barbatruc
Re : Visualiser requete filtree dans listbox

Bonsoir.
Le plus simple c'est de prendre cette procédure:
VB:
Sub ValoriserFiltre(TSorti() As Variant, ByVal F As Worksheet)
Dim PlgF As Range, LMax As Long, CMax As Long, Zone As Range, TEntré() As Variant, L As Long, C As Long
Set PlgF = F.AutoFilter.Range ' L'initialise à l'unique plage possible de la feuille couverte par un filtre auto.
Set PlgF = PlgF.Rows(2).Resize(PlgF.Rows.Count - 1) ' La réinitialise de façon à en sauter les entêtes.
LMax = 0: CMax = PlgF.Columns.Count ' Nombre de lignes de sortie à 0, et nombre de colonnes de la plage filtrée noté.
On Error Resume Next
Set PlgF = PlgF.SpecialCells(xlCellTypeVisible) ' La réinitialise de façon à n'en prendre que les cellules visibles.
       Rem. Ceci aboutit dans le cas général à une plage multi-zones, tout comme une union ou une sélection multiple.
If Err Then ReDim TSorti(0 To 0, 1 To CMax): Exit Sub ' Évite un plantage en testant Unbound dans pgm appelant.
On Error GoTo 0
For Each Zone In PlgF.Areas ' Pour chaque zone:
   LMax = LMax + Zone.Rows.Count ' Ajoute au nombre de lignes total celui de la zone.
   Next Zone
ReDim TSorti(1 To LMax, 1 To CMax) As Variant ' Redimensionne convenablement le tableau à produire.
LMax = 0 ' Numéro de ligne de sortie courant remis à 0.
For Each Zone In PlgF.Areas ' Pour chaque zone:
   TEntré = Zone.Value ' en récupère l'intégralité des valeurs.
   For L = 1 To UBound(TEntré, 1): LMax = LMax + 1 ' Pour chacune des lignes, le N° de ligne de sortie est incrémenté
      For C = 1 To CMax: TSorti(LMax, C) = TEntré(L, C): Next C ' et on y copie la valeur de chaque colonne.
      Next L
   Next Zone
End Sub
Dans votre userform:
VB:
Dim T() As Variant
ValoriserFiltre T, Feuil3
Votre taleau T contiendra les valeurs des cellules visibles, il vous suffira peut être de l'affecter à la propriété List de la ListBox.
A +
 

BOISGONTIER

XLDnaute Barbatruc
Repose en paix
Re : Visualiser requete filtree dans listbox

Bonjour,

Code:
Private Sub UserForm_Initialize()
  Sheets.Add
  Sheets("archives").Range("_FilterDataBase").Offset(1).SpecialCells(xlCellTypeVisible).Copy [A1]
  Me.ListBox1.List = [A1].CurrentRegion.Value
  Application.DisplayAlerts = False
  ActiveSheet.Delete
End Sub

JB
 

Pièces jointes

  • FlireListBox.xls
    33.5 KB · Affichages: 85
  • Copie de test2-1.xls
    51 KB · Affichages: 78
Dernière édition:

OUIZEMANN

XLDnaute Junior
Re : Visualiser requete filtree dans listbox

Bonjour,
Merci beaucoup, la solution de BOISGONTIER me va bien car plus simple, sauf que la listbox ne se rafraichit pas. En effet, il faut que je ferme l'userform pour que le filtre soit visualisable sur la listbox.
J'ai essayé de mettre "Me.Listbox1.Clear" à plusieurs endroits, mais cela ne fonctionne pas.
Comment faire pour la listbox tienne compte immédiatement du filtre ?
Merci par avance.
 

BOISGONTIER

XLDnaute Barbatruc
Repose en paix
Re : Visualiser requete filtree dans listbox

Ajouter

UserForm_Initialize


Code:
Private Sub CommandButton20_Click()
Sheets("Archives").Activate
Dim a As Single
Dim b As Single
a = CDate(TextBox1)
b = CDate(TextBox2)
Selection.AutoFilter Field:=7, Criteria1:=">=" & a, Operator:=xlAnd, Criteria2:="<=" & b + 1
Selection.AutoFilter Field:=8, Criteria1:=">=" & a, Operator:=xlAnd, Criteria2:="<=" & b + 1
UserForm_Initialize
End Sub

jb
 
Dernière édition:

OUIZEMANN

XLDnaute Junior
Re : Visualiser requete filtree dans listbox

Merci BOISGONTIER, cela fonctionne.
Cependant j'ai remarqué qu'il y avait un bug "erreur 104" lorsque par exemple je mets une fourchette de date qui n'existe pas (exemple 01/07/2013 et 30/07/2013).
J'ai essayé d'intégrer la fonction ON ERROR NEXT comme ci-après mais cela ne fonctionne pas :

Private Sub CommandButton20_Click()
On Error Resume Next

Sheets("Archives").Activate
Dim a As Single
Dim b As Single
a = CDate(TextBox1)
b = CDate(TextBox2)
Selection.AutoFilter Field:=7, Criteria1:=">=" & a, Operator:=xlAnd, Criteria2:="<=" & b + 1
Selection.AutoFilter Field:=8, Criteria1:=">=" & a, Operator:=xlAnd, Criteria2:="<=" & b + 1
UserForm_Initialize

If (Err.Number > 0) Then
MsgBox "Requête impossible"
End If

End Sub


Pouvez-vous me dire ce qui ne va pas ?

Encore merci de votre aide.
 

BOISGONTIER

XLDnaute Barbatruc
Repose en paix
Re : Visualiser requete filtree dans listbox

Code:
Private Sub UserForm_Initialize()
  If Application.Subtotal(3, [A2:A1000]) > 0 Then
   Sheets.Add
   Sheets("archives").Range("_FilterDataBase").Offset(1).SpecialCells(xlCellTypeVisible).Copy [A1]
   Me.ListBox1.List = [A1].CurrentRegion.Value
   Application.DisplayAlerts = False
   ActiveSheet.Delete
  Else
   MsgBox "Pas de lignes"
  End If
End Sub

jb
 

Discussions similaires

Réponses
3
Affichages
124

Statistiques des forums

Discussions
312 345
Messages
2 087 485
Membres
103 557
dernier inscrit
gerard.messerlin68@orange