[Résolu] Userform pour filtre de recherche

ChTi160

XLDnaute Barbatruc
Bonsoir subirubi
Bonsoir le Fil ,le Forum
Tu veux vraiment filtrer a partir de toutes les colonnes ??????
Pourquoi ne pas te limiter aux principales ?
Bonne fin de Soirée
Jean marie
 

BOISGONTIER

XLDnaute Barbatruc
Bonsoir,

Avec 10 comboboxs

Code:
Dim f, bd, TabBD(), ColCombo()
Private Sub UserForm_Initialize()
Set f = Sheets("bd")
B_tout_Click
Set bd = f.Range("A2:Z" & f.[A65000].End(xlUp).Row)  ' BD  (A adapter)
TabBD = bd.Value
ColCombo = Array(5, 6, 7, 8, 9, 10, 11, 12, 13, 14)  ' Colonnes comboBox (1 à 10 / A adapter)
For c = 1 To UBound(ColCombo) + 1: ListeCol c: Next c
For i = UBound(ColCombo) + 2 To 10: Me("combobox" & i).Visible = False: Me("label" & i).Visible = False: Next i
For i = 1 To UBound(ColCombo) + 1: Me("label" & i) = f.Cells(1, ColCombo(i - 1)): Next i
End Sub

Sub ListeCol(noCol)
  Set MonDico = CreateObject("Scripting.Dictionary")
  For i = 1 To UBound(TabBD)
  ok = True
  For Cb = 0 To UBound(ColCombo)
  ColBD = ColCombo(Cb)
  If Cb + 1 <> noCol Then
  If Not TabBD(i, ColBD) Like Me("comboBox" & Cb + 1) Then ok = False
  End If
  Next Cb
  If ok Then
  tmp = TabBD(i, ColCombo(noCol - 1))
  MonDico(tmp) = ""
  End If
  Next i
  MonDico("*") = ""
  temp = MonDico.keys
  Tri temp, LBound(temp), UBound(temp)
  'If noCol = 9 Then For i = LBound(temp) To UBound(temp): temp(i) = Format(temp(i), "dd/mm/yyyy"): Next
  Me("ComboBox" & noCol).List = temp
End Sub

Private Sub B_tout_Click()
  For i = 1 To 10: Me("combobox" & i) = "*": Next i
  On Error Resume Next
  ActiveSheet.ShowAllData
End Sub
JB
 

Fichiers joints

Dernière édition:

Dranreb

XLDnaute Barbatruc
Bonjour.
Une version qui masque les lignes, puis démasque celles en correspondance avec les choix.
Mais on pourrait faire d'autres choses aussi. Les afficher dans une ListBox, par exemple. Si une seule ligne est recherchée en fin de compte, le plus classique c'est d'afficher dans des Label les infos en correspondance avec celle déjà affichées dans les ComboBox. Encore plus classique: les afficher dans des TextBox et permettre la modification, création et suppression de ligne.
 

Fichiers joints

subirubi

XLDnaute Occasionnel
Bonjour tout le monde,

@ChTi160 : Bonne remarque ! Merci
@BOISGONTIER : Merci beaucoup pour la solution proposée. Je l'ai testée et ça répondait à mon besoin.
@Dranreb : Je vais adopté ta solution qui me semble complète. Est-ce que ça fonctionnerait sur un tableau partagé ?
Egalement, je veux l'utiliser sur un autre tableau, qu'est-ce que je dois modifier dans la macro pour qu'elle fonctionne ? Je sais que l'userform doit être adapté tels que les titres...
 

Dranreb

XLDnaute Barbatruc
Bonjour.
Je ne vois pas à priori pourquoi ça ne fonctionnerait pas dans un classeur partagé, mais sait-on jamais, il y a tellement de limitation inattendues sur de tels classeurs…
La plage de données à traiter n'est précisée qu'à un seul endroit: elle est spécifiée à la méthode Plage de l'objet ComboBoxLiées. Elle est ensuite connue partout comme sa propriété PlgTablo.
Note: Si seule la 1ère ligne est précisée, il en déduit du contexte l'ensemble.
 

subirubi

XLDnaute Occasionnel
Bonjour Dranreb,

J'aimerais si possible que le bouton "Valider" soit ajouté au userform de telle sorte que ça permet de garder le résultat affiché.

Le problème rencontré c'est que dès que je ferme le userform le résultat disparaît.



Merci pour ton aide.
 

Dranreb

XLDnaute Barbatruc
Bonjour.
Ne serait-ce pas un peu dangereux de laisser des lignes masquées ?
Cette version ne les masque pas mais classe en tête les lignes retenues avec une couleur différente.
 

Fichiers joints

subirubi

XLDnaute Occasionnel
Bonjour Dranreb,

En effet ton approche est intéressante. Mais dans mon cas ça me chamboule tout car le tableur est divisé par firme d'évaluation, et chaque firme a une formule précise qui calcule le résultat d'éval.

La solution serait de faire la même chose que le fichier exemple (Classeur (Archives)-test.xls si possible.

Je te remercie beaucoup pour ton aide.
 

Fichiers joints

Dranreb

XLDnaute Barbatruc
Pourquoi ne pas afficher les lignes dans une ListBox ?
Sinon dans ma 1ère proposition, pour laisser les lignes masquées à la fermeture du UserForm il suffit d'inactiver la UserForm_QueryClose. Mais j'ai eu des problème à sa réouverture quand il y a des lignes masquées à la fin. Il faudrait faire un .Rows.Hidden = False au début, avant le CL.Actualiser. Mais sur toute la feuille car CL.PlgTablo n'est alors encore pas défini.
 

subirubi

XLDnaute Occasionnel
C'est parfait ! Un immense merci pour cette aide inestimable.
 

Créez un compte ou connectez vous pour répondre

Vous devez être membre afin de pouvoir répondre ici

Créer un compte

Créez un compte Excel Downloads. C'est simple!

Connexion

Vous avez déjà un compte? Connectez vous ici.

Haut Bas