OVH Cloud OVH Cloud

ListBox et Filtre

2 réponses
Avatar
Starwing
Bonjour =E0 tous...

... =E0 tous les cracks!

Je cherche une fa=E7on de pouvoir filtrer des informations =E0=20
partir d'un ListBox et de faire appara=EEtre le r=E9sultat=20
dans ce m=EAme ListBox.
Ex:
Mon ListBox ( qui est, en passant, sur un UserForm),
a Les donn=E9es suivantes:
Colonne A ; Colonne B ; Colonne C
1 A 1A
2 B 2B
3 c(minus) 3c

Je cherche le moyen =E0 partir de plusieurs TextBox =E0=20
filtrer certaines informations.
TextBox1: *a* -->Cherche tous les mots qui ont "a" ou "A"
TextBox2: <2 -->Cherche tous les nombres plus petit que 2
Etc.
Il va sans dire que j'aimerais obtenir toutes les formes=20
de crit=E8res possible: plus grand ou =E9gale =E0, plus petit=20
que, etc..
Le r=E9sultat attendu dans cet exemple serait:
Colonne A ; Colonne B ; Colonne C
1 A 1A

Merci beaucoup,


Starwing

2 réponses

Avatar
Hervé
Salut Starwing,
Une solution peut être.
Si j'ai bien compris, tu utilise 1 ListBox à 3 colonnes, 3 TextBoxs, et un
bouton pour lancer le filtrage. Le code fonctionne de la manière suivante :
Après avoir rentré les critères dans les 3 TextBoxs (TextBox1 pour la
colonne 1, TextBox2 pour la colonne 2 et TextBox3 pour la colonne 3) le
filtrage se fait sur la feuille Feuil1 de A1 à Cx(adapte si tes données sont
ailleurs), le résultat est copié sur la feuille Feuil2 en A1:Cx puis la
propriété "RowSource" de la ListBox est définie sur cette plage. Petite
précision; pour les colonnes numériques, quand on veux retourner tous les
enregistrements, le signe "*" ne fonctionne pas, il faut utiliser le signe
"<>".
A mettre dans le module de ta Form :

Private Sub CommandButton1_Click()
Filtre
Remplir
End Sub

Sub Filtre()
Dim Fe1 As Worksheet
Dim Fe2 As Worksheet
Dim Plage2 As Range

Set Fe1 = Worksheets("Feuil1")
Set Fe2 = Worksheets("Feuil2")

Fe2.Cells.Clear

With Fe1
With .Range(.[A1], _
.[C65536].End(xlUp))
.AutoFilter 1, TextBox1.Text
.AutoFilter 2, TextBox2.Text
.AutoFilter 3, TextBox3.Text
.Copy Fe2.[A1]
.AutoFilter
End With
End With

Set Fe1 = Nothing
Set Fe2 = Nothing
End Sub

Sub Remplir()
Dim Fe As Worksheet
Dim Plage As Range

Set Fe = Worksheets("Feuil2")

With Fe
Set Plage = .Range(.[A1], _
.[C65536].End(xlUp))
End With

With ListBox1
.RowSource = "Feuil2!" & Plage.Address(0, 0)
End With

Set Plage = Nothing
Set Fe = Nothing
End Sub

Private Sub UserForm_Initialize()
Dim Plage As Range

With Worksheets("Feuil1")
Set Plage = .Range(.[A1], _
.[C65536].End(xlUp))
End With

With ListBox1
.RowSource = "Feuil1!" & Plage.Address(0, 0)
End With

Set Plage = Nothing
End Sub

Hervé.

"Starwing" a écrit dans le message news:
12ff01c47bb9$43f5b980$
Bonjour à tous...

... à tous les cracks!

Je cherche une façon de pouvoir filtrer des informations à
partir d'un ListBox et de faire apparaître le résultat
dans ce même ListBox.
Ex:
Mon ListBox ( qui est, en passant, sur un UserForm),
a Les données suivantes:
Colonne A ; Colonne B ; Colonne C
1 A 1A
2 B 2B
3 c(minus) 3c

Je cherche le moyen à partir de plusieurs TextBox à
filtrer certaines informations.
TextBox1: *a* -->Cherche tous les mots qui ont "a" ou "A"
TextBox2: <2 -->Cherche tous les nombres plus petit que 2
Etc.
Il va sans dire que j'aimerais obtenir toutes les formes
de critères possible: plus grand ou égale à, plus petit
que, etc..
Le résultat attendu dans cet exemple serait:
Colonne A ; Colonne B ; Colonne C
1 A 1A

Merci beaucoup,


Starwing
Avatar
Starwing
Bonjour Hervé,

Je vais essayer ce code dès lundi matin le 9 août...

Je t'en donne des nouvelles par la suite.

Merci de bien vouloir m'aider!

Starwing
-----Message d'origine-----
Salut Starwing,
Une solution peut être.
Si j'ai bien compris, tu utilise 1 ListBox à 3 colonnes,
3 TextBoxs, et un

bouton pour lancer le filtrage. Le code fonctionne de la
manière suivante :

Après avoir rentré les critères dans les 3 TextBoxs
(TextBox1 pour la

colonne 1, TextBox2 pour la colonne 2 et TextBox3 pour la
colonne 3) le

filtrage se fait sur la feuille Feuil1 de A1 à Cx(adapte
si tes données sont

ailleurs), le résultat est copié sur la feuille Feuil2 en
A1:Cx puis la

propriété "RowSource" de la ListBox est définie sur cette
plage. Petite

précision; pour les colonnes numériques, quand on veux
retourner tous les

enregistrements, le signe "*" ne fonctionne pas, il faut
utiliser le signe

"<>".
A mettre dans le module de ta Form :

Private Sub CommandButton1_Click()
Filtre
Remplir
End Sub

Sub Filtre()
Dim Fe1 As Worksheet
Dim Fe2 As Worksheet
Dim Plage2 As Range

Set Fe1 = Worksheets("Feuil1")
Set Fe2 = Worksheets("Feuil2")

Fe2.Cells.Clear

With Fe1
With .Range(.[A1], _
.[C65536].End(xlUp))
.AutoFilter 1, TextBox1.Text
.AutoFilter 2, TextBox2.Text
.AutoFilter 3, TextBox3.Text
.Copy Fe2.[A1]
.AutoFilter
End With
End With

Set Fe1 = Nothing
Set Fe2 = Nothing
End Sub

Sub Remplir()
Dim Fe As Worksheet
Dim Plage As Range

Set Fe = Worksheets("Feuil2")

With Fe
Set Plage = .Range(.[A1], _
.[C65536].End(xlUp))
End With

With ListBox1
.RowSource = "Feuil2!" & Plage.Address(0, 0)
End With

Set Plage = Nothing
Set Fe = Nothing
End Sub

Private Sub UserForm_Initialize()
Dim Plage As Range

With Worksheets("Feuil1")
Set Plage = .Range(.[A1], _
.[C65536].End(xlUp))
End With

With ListBox1
.RowSource = "Feuil1!" & Plage.Address(0, 0)
End With

Set Plage = Nothing
End Sub

Hervé.

"Starwing" a écrit dans le message
news:

12ff01c47bb9$43f5b980$
Bonjour à tous...

.... à tous les cracks!

Je cherche une façon de pouvoir filtrer des informations à
partir d'un ListBox et de faire apparaître le résultat
dans ce même ListBox.
Ex:
Mon ListBox ( qui est, en passant, sur un UserForm),
a Les données suivantes:
Colonne A ; Colonne B ; Colonne C
1 A 1A
2 B 2B
3 c(minus) 3c

Je cherche le moyen à partir de plusieurs TextBox à
filtrer certaines informations.
TextBox1: *a* -->Cherche tous les mots qui ont "a" ou "A"
TextBox2: <2 -->Cherche tous les nombres plus petit que 2
Etc.
Il va sans dire que j'aimerais obtenir toutes les formes
de critères possible: plus grand ou égale à, plus petit
que, etc..
Le résultat attendu dans cet exemple serait:
Colonne A ; Colonne B ; Colonne C
1 A 1A

Merci beaucoup,


Starwing



.