[Résolu] Userform pour filtre de recherche

3xceln4ute

XLDnaute Occasionnel
Bonjour Forum,

J'aimerais si possible activer un userform pour faire une recherche dans un tableau, affecté au bouton en B2.



Voici un exemple fonctionnel:


Cordialement.
 

Pièces jointes

  • Filte de recherche tableau d'évaluation.xls
    190 KB · Affichages: 78

BOISGONTIER

XLDnaute Barbatruc
Repose en paix
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
 

Pièces jointes

  • FormPilotageFiltreAuto10.xls
    118 KB · Affichages: 75
  • PilotageFA.gif
    PilotageFA.gif
    49.4 KB · Affichages: 61
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.
 

Pièces jointes

  • CBxLiéesSubirubi.xlsm
    93.5 KB · Affichages: 54

3xceln4ute

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.
 

3xceln4ute

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.
 

3xceln4ute

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.
 

Pièces jointes

  • Classeur (Archives)-test.xls
    483.5 KB · Affichages: 46
  • Éval.xlsx
    620 KB · Affichages: 40

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.
 

Statistiques des forums

Discussions
312 078
Messages
2 085 117
Membres
102 783
dernier inscrit
Basoje