Ouverture userform / filtre d'une listbox / par le biais d'une textbox

Bonjour a tous,

Je souhaiterais avoirs un petit coups de main.

Après plusieurs essaye je n'arrive pas coder cette fonction.

Voila, je cherche a filtrer une bases de données dans une listbox via une textbox, le tout dans une userform.

Le filtre sur la listbox doit se faire uniquement sur une seul colonne en l'occurrence dans mon fichier la colone O

Le tableau bases de données se trouve dans une seul feuil excel

La valeur a cherche devra obligatoirement être saisi sur une feuil excel dans mon fichier sur la feuil1 cellule F17 et la fonction sera déclencher par un bouton présent sur la feuil1.

Le résulta que je souhaite avoir :

je rentre dans la cellule F17 "paris"

je clique je le bouton (button1)

l'userform s'ouvre

dans la textbox1 le mot "paris"

dans la listbox1 le resultat de ma recherche (la avec le mot paris il y aura 2 ligne ( de A1 a A39 et de B1 a B39)

je vous joint un fichier pour la compréhension.

Merci d'avance pour votre aide

45test.xlsm (25.12 Ko)

Bonjour,

Dim Rng, TblBD(), NbCol
Option Compare Text
Private Sub UserForm_Initialize()
  Set f = Sheets("feuil1")
  Set Rng = f.Range("A1").CurrentRegion.Offset(1)
  TblBD = Rng.Value
  NbCol = UBound(TblBD, 2)
  Me.ListBox1.List = TblBD
  Me.ListBox1.ColumnCount = NbCol
  'Me.ListBox1.ColumnWidths = "30;60;90;60"
  EnteteListBox
End Sub

Private Sub TextBox1_Change()
  colRecherche = 15
  clé = "*" & Me.TextBox1 & "*"
  Dim Tbl()
  TotalFact = 0
  For i = 1 To UBound(TblBD)
    If TblBD(i, colRecherche) Like clé Then
        n = n + 1
        ReDim Preserve Tbl(1 To UBound(TblBD, 2), 1 To n)
        For k = 1 To UBound(TblBD, 2): Tbl(k, n) = TblBD(i, k): Next k
     End If
  Next i
  If n > 0 Then
     Me.ListBox1.Column = Tbl
   Else
     Me.ListBox1.List = TblBD
   End If
End Sub

Boisgontier

53copie-de-test.xlsm (40.96 Ko)

Bonjour

Un essai à tester. Te convient-il ?

Bye !

32test-v1.xlsm (32.53 Ko)

Bonjour,

Merci pour vos réponses.

La solution de Mr Boisgontier me correspond le plus.

Merci de votre aide si précieuse quand on le bloque sur un fichier excel

Bonjour,

cf PJ

Boisgontier

47copie-de-test.xlsm (42.45 Ko)

Bonjour,

merci de votre retour je l'ai adapter a mon fichier et tous fonctionne nickel.

Je souhaiterais avoir les en-tête de colonne, j'ai chercher sur le net mais si j'ai bien compris il faut que j'utilise la fonction Rowsource mais la je suis perdu...

J'ai donc utilisé des labels pour nommer mes colonnes, mais le soucis c'est que mon la taille de mon userform est modifiable donc quand je change la taille les labels ne sont plus en face des colonnes !

Avez vous une solutions ?

Merci d'avance

CDT

Bonjour,

  • Les colonnes à visualiser sont définies dans ColVisu=Array(1,2)
  • La largeur des colonnes est calculée automatiquement par rapport aux largeurs de colonne dans le tableur
  • Les en-têtes sont affichés automatiquement
Dim f, Rng, TblBD(), NbCol, colVisu()
Option Compare Text
Private Sub UserForm_Initialize()
  Set f = Sheets("feuil1")
  Set Rng = f.Range("A1").CurrentRegion.Offset(1)
  TblBD = Rng.Value
  NbCol = UBound(TblBD, 2)
  Me.ListBox1.List = TblBD
  Me.ListBox1.ColumnCount = 2 ' NbCol
  colVisu = Array(1, 2)
  EnteteListBox
  Me.TextBox1 = f.[F17]
End Sub

Private Sub TextBox1_Change()
  colRecherche = 15
  clé = "*" & Me.TextBox1 & "*"
  Dim Tbl()
  For i = 1 To UBound(TblBD)
    If TblBD(i, colRecherche) Like clé Then
        n = n + 1
        ReDim Preserve Tbl(1 To UBound(TblBD, 2), 1 To n)
        'For k = 1 To 2: Tbl(k, n) = TblBD(i, k): Next k
        j = 0
        For Each k In colVisu
          j = j + 1: Tbl(j, n) = TblBD(i, k)
        Next k
     End If
  Next i
  If n > 0 Then
     Me.ListBox1.Column = Tbl
   Else
     Me.ListBox1.List = TblBD
   End If
End Sub

Sub EnteteListBox()
    x = Me.ListBox1.Left + 8
    Y = Me.ListBox1.Top - 12
    For Each c In colVisu
      Set Lab = Me.Controls.Add("Forms.Label.1")
      Lab.Caption = f.Cells(1, c)
      Lab.Top = Y
      Lab.Left = x
      Lab.Height = 24
      Lab.Width = x + f.Columns(c).Width * 1#
      x = x + f.Columns(c).Width * 1#
      tempcol = tempcol & f.Columns(c).Width * 1# & ";"
    Next
    tempcol = Left(tempcol, Len(tempcol) - 1)
    Me.ListBox1.ColumnWidths = tempcol
End Sub

Boisgontier

Bonjour,

Merci de votre retour mais le résultat obtenu n'est pas celui souhaité.

Je vous joint un ficher avec la macro pour redimensionner la userform.

Dès que qu'on la redimensionne avec la souris, les entêtes ne sont plus en face des colonnes.

Merci d'avance,

CDT

39test2.xlsm (51.80 Ko)
Rechercher des sujets similaires à "ouverture userform filtre listbox biais textbox"