Filtrer un tableau dans une userform

  • Initiateur de la discussion Mickaël
  • Date de début
M

Mickaël

Guest
Bonjour le forum.

Voila, j'ai un petit problem qui apres recherche sur ce forum ne trouve toujours pas reponse.

Alors j'ai un tableu avec 2 colonnes A et B

La colonne A ne contien des données unique.

La colonne B contien des noms qui peuvent ce repeter sur plusieures lignes.

La facilitée aurait voulus que je recherche par la colonne A mais comme rien n'est jamais simple il me faut recherche par la colonne B.

La difficulté c'est que dans ma listbox j'obtiens par exemple 15 fois le meme nom a la suite.

Est-il possible de filtrer cette listbox?

Merci beaucoup pour votre aide.
 
H

hurricane

Guest
salut michael

un bout de code qui permet de ne pas avoir de doublon ds les filtres


Dim Lem As New Collection
Dim item
On Error Resume Next
ListBox1.Clear
Sheets("feuil1").AutoFilterMode = False 'mise a zero du filtre

If Sheets("feuil1").AutoFilterMode = False Then ' si filtre à zero alors je filtre
Sheets("feuil1").Select
Range("a1:s1").Select
Selection.AutoFilter
End If

For Each cell In Worksheets("feuil1").Range("a2:a250")
Lem.Add cell.Text, cell.Text
Next cell
On Error GoTo 0
For Each item In Lem
UserForm1.ListBox1.AddItem item
Next item

End Sub
Private Sub listbox1_change()
End Sub
Private Sub listbox1_click()


Dim Lem As New Collection
Dim item
On Error Resume Next
ListBox2.Clear

If Sheets("feuil1").AutoFilterMode Then
Sheets("feuil1").Range("a1").AutoFilter 1, ListBox1
Else
Sheets("feuil1").Range("a1").AutoFilter 1, ListBox1
End If

Worksheets("feuil1").Range("b2:b500").Copy Destination:=Worksheets("feuil4").Range("b2")
For Each cell In Worksheets("feuil4").Range("b2:b250")
Lem.Add cell.Text, cell.Text
Next cell
On Error GoTo 0
For Each item In Lem
UserForm1.ListBox2.AddItem item
Next item

End Sub

@+
 
M

Mickaël

Guest
Excelent.

C'est trop top ton code.

Ca marche super pour le 1 filtre de la listbox1.

Mais quand je selectionne une donnée de la listbox1 la listbox 2 contient tous les enregistrement.
Est-il possible que la listbox2 ne continne que les valeures corespondante à la données selectionner en listbox1.

merci SO MUCH

a+
 
H

hurricane

Guest
c'est des bouts de code brut car sur mon filtre il ya 8 listbox et 12 textbox
je filtre de la colonne A à la colonne S

apres c'est toujour pareil du recopie le bout de code et tu changes juste les N° de colonne ,cellule , listbox

si tu as un probleme je t'envoi mon code complet se sera peut-etre plus clair pour toi que des bouts de code

@+

tu met ça a la suite

Private Sub listbox2_change()
End Sub

Private Sub listbox2_click()

Dim Lem As New Collection
Dim item
On Error Resume Next
ListBox3.Clear

If Sheets("feuil1").AutoFilterMode Then
Sheets("feuil1").Range("a1").AutoFilter 2, ListBox2
Else
Sheets("feuil1").Range("a1").AutoFilter 2, ListBox2
End If
Worksheets("feuil1").Range("c2:c500").Copy Destination:=Worksheets("feuil4").Range("c2")

For Each cell In Worksheets("feuil4").Range("c2:c250")
Lem.Add cell.Text, cell.Text
Next cell
On Error GoTo 0
For Each item In Lem
UserForm1.ListBox3.AddItem item
Next item
End Sub
 
M

Mickaël

Guest
Ok j'ai compris le principe c'est bien trouver.

Moi par exemple j'aimerai faire QQ de plus raide si c'est possible car j'ai 15000 lignes à filtrer et c'est un peu long.

Alors si je rentre A dans Textbox1 le resultat dans listbox1 ne contient que les données commencant par A.

Voila en faite le fond de ma pensée.

Si tu peut m'aider ce serait cool.

A+
 
M

Mickaël

Guest
Merci de ton aide hurricane et merci a thierry pour sont bon exemple Tres utile.
je te joins mon fichier avec des exemples.

en clair ca ne marche pas.
j'ai expliquer dans la USF1 comment ca aurait du marcher si j'etais meilleure.

Merci encore.

a+
 

Pièces jointes

  • Classeur1.zip
    25.4 KB · Affichages: 64
  • Classeur1.zip
    25.4 KB · Affichages: 73
  • Classeur1.zip
    25.4 KB · Affichages: 89
H

hurricane

Guest
Ok je vais regarder ce que je peux faire
tu auras une reponse peut etre pas tout de suite mais je te tiens informé
en plus ce soir il y a rien a la tele j'aurais le temps de bricoler une macro

allez retour au taf

@+ hurricane
 
H

hurricane

Guest
Salut

Bon j’ai modifié ton userform enfin j’ai juste rajouté 2 combobox ‘s pour traiter ton problème je pense que c’est ce que tu souhaitais mais en plus simple. C’est ce que je sais faire si tu veux vraiment faire mot à mot ce qui est demandé dans le fichier il faut que tu passe par quelqu’un d’autre. Parce que la, je ne sais plus faire donc si tu vois @+ Thierry lui il te fera sa aux petits oignons. (@ Thierry le John walkenbach du VBA et des userform’s de XLD ).

@+ Hurricane
 

Pièces jointes

  • Classeur1.zip
    17.2 KB · Affichages: 69
  • Classeur1.zip
    17.2 KB · Affichages: 75
  • Classeur1.zip
    17.2 KB · Affichages: 68
M

Mickaël

Guest
Bon y a rien a dire c'est super.
T'es vraiment cool d'avoir passer du temps dessus.
Moi hier j'ai chercher longtemps et j'ai bien cru y arriver avec la fonction LEFT tu vois je voulais regarder la premiére lettre de la colonne pour tous les A par exemple.

Bref ce que tu a fait est tres bien et je crois que c'est pas la peine de trpo ce torturer.

Merci encore.

A+
 
M

Mickaël

Guest
Ok j'ai vu.

Bon j'ai modifier un peu le classeur et remplacer le TB3 par une liste box.
Ca marche pas mal du tout.

Le seul point c'est que sur la feuil4 je dois effacer à chaque nouvelle selection les données.

Bon avec 15000 c'est un peu lent au chargement mais bon apres ca va.

Je me suis apercu que j'avais besoin de plusieures lignes dans ma listbox pour les données.

Je travail dessus.

En tous cas me voila relance merci encore.
 

Discussions similaires

Statistiques des forums

Discussions
314 656
Messages
2 111 612
Membres
111 225
dernier inscrit
arnaud3110