Find dans listbox avec 3 variables

Bonjour à tous,

Je bloque avec la fonction "find" pour faire une recherche avec 3 variables dans une boucle afin d'alimenter une listebox ?

Variable DCM_1 Ok

Variable DCM_2 ?

Variable DCM_3 ?

Merci pour votre aide.

10classeur1.xlsm (23.25 Ko)

Bonjour,

la fonction Find n'est pas la plus simple pour faire la rechercher envisagée (si j'ai bien compris)

une solution possible:

Private Sub UserForm_Initialize()

Dim DCM_1 As String, DCM_2 As String, DCM_3 As String
Dim i As Long, x As Long
    DCM_1 = 31
    DCM_2 = 32
    DCM_3 = 33

ListBox1.ColumnCount = 5
ListBox1.ColumnWidths = "80;80;80;80,100"
ListBox1.Clear

With Worksheets("Data")

For i = 2 To .Range("B" & Rows.Count).End(xlUp).Row
    If .Cells(i, 2) Like DCM_1 & "*" Or .Cells(i, 2) Like DCM_2 & "*" Or .Cells(i, 2) Like DCM_3 & "*" Then
        Me.ListBox1.AddItem
        Me.ListBox1.List(x, 0) = .Cells(i, 2)
        Me.ListBox1.List(x, 1) = .Cells(i, 1)
        Me.ListBox1.List(x, 2) =. Cells(i, 4)
        Me.ListBox1.List(x, 3) = .Cells(i, 3)   ' pas sûr que les valeurs soient dans le bon ordre
        x = x + 1
    End If
Next
End With
End Sub

A+

Bonsoir,

Le plus rapide en utilisant des Arrays()

Option Compare Text
Dim f, Rng, TblBD(), NbCol

Private Sub UserForm_Initialize()
  Set f = Sheets("BD")
  Set Rng = f.Range("A2:E" & f.[A65000].End(xlUp).Row)
  NbCol = Rng.Columns.Count - 1
  TblBD = Rng.Value
  For i = 1 To UBound(TblBD): TblBD(i, NbCol + 1) = i: Next i
  Me.ListBox1.List = TblBD
  Me.ListBox1.ColumnCount = NbCol
End Sub

Private Sub TextBox1_Change()
  Affiche
End Sub

Private Sub TextBox2_Change()
  Affiche
End Sub

Private Sub TextBox3_Change()
  Affiche
End Sub

Sub Affiche()
   Dim b()
   tmp1 = Me.TextBox1 & "*": tmp2 = Me.TextBox2 & "*": tmp3 = Me.TextBox3 & "*"
   n = 0
   For i = LBound(TblBD) To UBound(TblBD)
    If TblBD(i, 1) Like tmp1 And TblBD(i, 3) Like tmp2 And TblBD(i, 5) Like tmp3 Then
      n = n + 1: ReDim Preserve b(1 To NbCol + 1, 1 To n)
      For k = 1 To NbCol + 1: b(k, n) = TblBD(i, k): Next k
    End If
   Next i
   If n > 0 Then Me.ListBox1.Column = b Else Me.ListBox1.Clear
End Sub

Exemple en PJ (fait en 3 mn avec un programme générique)

Boisgontier

Merci Jacques pour votre solution.

Cordialement,

Les autres peuvent se brosser ?

Rechercher des sujets similaires à "find listbox variables"