- Katılım
- 7 Eylül 2007
- Mesajlar
- 3
- Excel Vers. ve Dili
- mo 2016
- Altın Üyelik Bitiş Tarihi
- 12/02/2023
Merhaba,
Oluşturmuş olduğum userform içerisinde 3 adet listbox ile kriterlere göre filtreleme yapmaktayım. Ancak bunu daha fazla kritere göre yapmak için kodlarda nasıl bir değişiklik yapmam gerekiyor anlayamadım.
yardımlarınızı rica ederim.
Dim f, NbCol, NomTableau, TblBD()
Private Sub UserForm_Initialize()
NomTableau = "Tableau1"
TblBD = Range(NomTableau).Value
NbCol = UBound(TblBD, 2)
Set d = CreateObject("scripting.dictionary")
For i = LBound(TblBD) To UBound(TblBD)
d(TblBD(i, 3)) = ""
Next i
Me.ChoixListBox1.List = d.keys
Set d = CreateObject("scripting.dictionary")
For i = LBound(TblBD) To UBound(TblBD)
d(TblBD(i, 5)) = ""
Next i
Me.ChoixListBox2.List = d.keys
Set d = CreateObject("scripting.dictionary")
For i = LBound(TblBD) To UBound(TblBD)
d(TblBD(i, 6)) = ""
Next i
Me.ChoixListBox3.List = d.keys
Me.ListBox1.ColumnCount = NbCol
Affiche
EnteteListBox
End Sub
Sub EnteteListBox()
X = Me.ListBox1.Left + 8
Y = Me.ListBox1.Top - 20
For c = 1 To NbCol
Set Lab = Me.Controls.Add("Forms.Label.1")
Lab.Caption = Range(NomTableau).Offset(-1).Item(1, c)
Lab.ForeColor = vbBlack
Lab.Top = Y
Lab.Left = X
Lab.Height = 24
Lab.Width = Range(NomTableau).Columns(c).Width * 1#
X = X + Range(NomTableau).Columns(c).Width * 1
tempcol = tempcol & Range(NomTableau).Columns(c).Width * 1# & ";"
Next c
tempcol = tempcol
On Error Resume Next
Me.ListBox1.ColumnWidths = tempcol
On Error GoTo 0
End Sub
Private Sub ChoixListBox1_change()
Affiche
End Sub
Private Sub ChoixListBox2_change()
Affiche
End Sub
Private Sub ChoixListBox3_change()
Affiche
End Sub
Sub Affiche()
Dim Liste(), ok(1 To 20)
n = 0
For i = LBound(TblBD) To UBound(TblBD)
For o = 1 To 20: ok(o) = False: Next o
p = 0
For Each c In Array(3, 5, 6)
p = p + 1
s = 0
For j = 0 To Me("ChoixListBox" & p).ListCount - 1
If Me("ChoixListBox" & p).Selected(j) Then s = s + 1
Next j
If s = 0 Then
ok(p) = True
Else
For j = 0 To Me("ChoixListBox" & p).ListCount - 1
If Me("ChoixListBox" & p).Selected(j) Then
If TblBD(i, c) = Me("ChoixListBox" & p).List(j) Then ok(p) = True
End If
Next j
End If
Next c
If ok(1) And ok(2) And ok(3) Then
n = n + 1
ReDim Preserve Liste(1 To NbCol, 1 To n)
For k = 1 To NbCol
Liste(k, n) = TblBD(i, k)
Next k
End If
Next i
If n > 0 Then Me.ListBox1.Column = Liste Else Me.ListBox1.Clear
End Sub
Oluşturmuş olduğum userform içerisinde 3 adet listbox ile kriterlere göre filtreleme yapmaktayım. Ancak bunu daha fazla kritere göre yapmak için kodlarda nasıl bir değişiklik yapmam gerekiyor anlayamadım.
yardımlarınızı rica ederim.
Dim f, NbCol, NomTableau, TblBD()
Private Sub UserForm_Initialize()
NomTableau = "Tableau1"
TblBD = Range(NomTableau).Value
NbCol = UBound(TblBD, 2)
Set d = CreateObject("scripting.dictionary")
For i = LBound(TblBD) To UBound(TblBD)
d(TblBD(i, 3)) = ""
Next i
Me.ChoixListBox1.List = d.keys
Set d = CreateObject("scripting.dictionary")
For i = LBound(TblBD) To UBound(TblBD)
d(TblBD(i, 5)) = ""
Next i
Me.ChoixListBox2.List = d.keys
Set d = CreateObject("scripting.dictionary")
For i = LBound(TblBD) To UBound(TblBD)
d(TblBD(i, 6)) = ""
Next i
Me.ChoixListBox3.List = d.keys
Me.ListBox1.ColumnCount = NbCol
Affiche
EnteteListBox
End Sub
Sub EnteteListBox()
X = Me.ListBox1.Left + 8
Y = Me.ListBox1.Top - 20
For c = 1 To NbCol
Set Lab = Me.Controls.Add("Forms.Label.1")
Lab.Caption = Range(NomTableau).Offset(-1).Item(1, c)
Lab.ForeColor = vbBlack
Lab.Top = Y
Lab.Left = X
Lab.Height = 24
Lab.Width = Range(NomTableau).Columns(c).Width * 1#
X = X + Range(NomTableau).Columns(c).Width * 1
tempcol = tempcol & Range(NomTableau).Columns(c).Width * 1# & ";"
Next c
tempcol = tempcol
On Error Resume Next
Me.ListBox1.ColumnWidths = tempcol
On Error GoTo 0
End Sub
Private Sub ChoixListBox1_change()
Affiche
End Sub
Private Sub ChoixListBox2_change()
Affiche
End Sub
Private Sub ChoixListBox3_change()
Affiche
End Sub
Sub Affiche()
Dim Liste(), ok(1 To 20)
n = 0
For i = LBound(TblBD) To UBound(TblBD)
For o = 1 To 20: ok(o) = False: Next o
p = 0
For Each c In Array(3, 5, 6)
p = p + 1
s = 0
For j = 0 To Me("ChoixListBox" & p).ListCount - 1
If Me("ChoixListBox" & p).Selected(j) Then s = s + 1
Next j
If s = 0 Then
ok(p) = True
Else
For j = 0 To Me("ChoixListBox" & p).ListCount - 1
If Me("ChoixListBox" & p).Selected(j) Then
If TblBD(i, c) = Me("ChoixListBox" & p).List(j) Then ok(p) = True
End If
Next j
End If
Next c
If ok(1) And ok(2) And ok(3) Then
n = n + 1
ReDim Preserve Liste(1 To NbCol, 1 To n)
For k = 1 To NbCol
Liste(k, n) = TblBD(i, k)
Next k
End If
Next i
If n > 0 Then Me.ListBox1.Column = Liste Else Me.ListBox1.Clear
End Sub
Ekli dosyalar
-
94.5 KB Görüntüleme: 8