Find dans listbox avec 3 variables Le sujet est résolu

Y compris Power BI, Power Query et toute autre question en lien avec Excel
Avatar du membre
ede95
Nouveau venu
Nouveau venu
Messages : 7
Appréciation reçue : 1
Inscrit le : 3 avril 2019
Version d'Excel : 2019 FR

Message par ede95 » 7 juin 2019, 19:34

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.
Classeur1.xlsm
(23.25 Kio) Téléchargé 5 fois
A
AlgoPlus
Membre fidèle
Membre fidèle
Messages : 468
Appréciations reçues : 36
Inscrit le : 27 février 2019
Version d'Excel : 2003

Message par AlgoPlus » 7 juin 2019, 20:06

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+
B
Boisgontierjacques
Membre fidèle
Membre fidèle
Messages : 182
Appréciations reçues : 40
Inscrit le : 5 octobre 2018
Version d'Excel : 2016

Message par Boisgontierjacques » 7 juin 2019, 20:26

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
FormIntuitif3TextBoxListBox-3.xls
(110.5 Kio) Téléchargé 3 fois
Copie de FormFiltreListBox6ComboBoxs.xls
(186 Kio) Téléchargé 5 fois
Avatar du membre
ede95
Nouveau venu
Nouveau venu
Messages : 7
Appréciation reçue : 1
Inscrit le : 3 avril 2019
Version d'Excel : 2019 FR

Message par ede95 » 7 juin 2019, 22:10

Merci Jacques pour votre solution.

Cordialement,
A
AlgoPlus
Membre fidèle
Membre fidèle
Messages : 468
Appréciations reçues : 36
Inscrit le : 27 février 2019
Version d'Excel : 2003

Message par AlgoPlus » 8 juin 2019, 10:30

Les autres peuvent se brosser ?
Répondre Sujet précédentSujet suivant
  • Sujets similaires
    Réponses
    Vues
    Dernier message