For i = .ListCount - 1 To Application.Max(.ListCount - 3, 0) Step -1
En effet ce serait bien de mieux comprendre ce que tu veux faire.Je voudrai appliquer son code à plusieurs ComboBox
Bonjour,Bonjour la liste,
En effet ce serait bien de mieux comprendre ce que tu veux faire.
Combien de ComboBoxes concernées ?
Car ce n'est pas parce que tu utilises le code de la ressource qu'il te faudrait le répliquer autant de fois qu'il y a de ComboBoxes. Ce code est indépendant et peut s'appliquer à plusieurs ComboBoxes.
'---------
'ComboBox1
'---------
Private Sub ComboBox1_Enter()
Call SaisieFiltréeComboBoxEnter(Me.ComboBox1, ThisWorkbook.Worksheets("Listes").ListObjects("Tableau1").DataBodyRange)
End Sub
Private Sub ComboBox1_Change()
Call SaisieFiltréeComboBoxChange(Me.ComboBox1)
End Sub
'---------
'ComboBox2
'---------
Private Sub ComboBox2_Enter()
Call SaisieFiltréeComboBoxEnter(Me.ComboBox2, ThisWorkbook.Worksheets("Listes").ListObjects("Tableau2").DataBodyRange)
End Sub
Private Sub ComboBox2_Change()
Call SaisieFiltréeComboBoxChange(Me.ComboBox2)
End Sub
'---------
'ComboBox3
'---------
Private Sub ComboBox3_Enter()
Call SaisieFiltréeComboBoxEnter(Me.ComboBox3, ThisWorkbook.Worksheets("Listes").ListObjects("Tableau3").DataBodyRange)
End Sub
Private Sub ComboBox3_Change()
Call SaisieFiltréeComboBoxChange(Me.ComboBox3)
End Sub
Bonjour,Bonjour la liste,
En effet ce serait bien de mieux comprendre ce que tu veux faire.
Combien de ComboBoxes concernées ?
Car ce n'est pas parce que tu utilises le code de la ressource qu'il te faudrait le répliquer autant de fois qu'il y a de ComboBoxes. Ce code est indépendant et peut s'appliquer à plusieurs ComboBoxes.
Oui, je suis d'accord avec toi.Si tu as 3 ComboBoxes, sur chacun des évènements propre à chaque ComboBox tu fais ce qui est décris en ressource. Faire une classe se justifierait si tu en avait 10 ou 100, mais là...
VB:'--------- 'ComboBox1 '--------- Private Sub ComboBox1_Enter() Call SaisieFiltréeComboBoxEnter(Me.ComboBox1, ThisWorkbook.Worksheets("Listes").ListObjects("Tableau1").DataBodyRange) End Sub Private Sub ComboBox1_Change() Call SaisieFiltréeComboBoxChange(Me.ComboBox1) End Sub '--------- 'ComboBox2 '--------- Private Sub ComboBox2_Enter() Call SaisieFiltréeComboBoxEnter(Me.ComboBox2, ThisWorkbook.Worksheets("Listes").ListObjects("Tableau2").DataBodyRange) End Sub Private Sub ComboBox2_Change() Call SaisieFiltréeComboBoxChange(Me.ComboBox2) End Sub '--------- 'ComboBox3 '--------- Private Sub ComboBox3_Enter() Call SaisieFiltréeComboBoxEnter(Me.ComboBox3, ThisWorkbook.Worksheets("Listes").ListObjects("Tableau3").DataBodyRange) End Sub Private Sub ComboBox3_Change() Call SaisieFiltréeComboBoxChange(Me.ComboBox3) End Sub
Parce que tu crois que ces trucs là ça infuse tout seul dans le cerveau des génies que nous sommes ?Hélas, je fais partie de ceux qui n'ont cette facilité de compréhension et d'assimilation.
Tu vas t'emméler les crayons avec un module de classe
Private Sub ComboBox1_Change()
If ComboBoxChange(Me.ComboBox1) Then
'MsgBox "Valeur choisie = <" & Me.CobAutre.List(Me.ComboBox1.ListIndex) & ">"
End If
End Sub
'*****************************************************************************************************
' ___ _ _______ __ _ ____ _ _ _______ ___ _ _ _ ___ _ _.
' // \\ /\\ // // \\ // // // // // // \\ // // // // \\ //| //
' //___// //__\ // //__// // // //__// // // // // // // // // // | //
' // // \\ // // \\ // // // \\ // // // // // // // // // | //
'// // // // // // // //___ // \\ // \\__// //__// //___ \\__// // |//
'****************************************************************************************************
Option Explicit
Dim tablo
Private Sub UserForm_Activate()
Dim LiG&
With Range("tableaulivres")
tablo = .Resize(, .Columns.Count + 1).Value
For LiG = 1 To UBound(tablo): tablo(LiG, UBound(tablo, 2)) = LiG: Next
ComboBox1.List = tablo
ComboBox1.ColumnWidths = .Columns(1).Width & ";" & .Columns(2).Width
End With
End Sub
Private Sub ComboBox1_DropButtonClick()
ComboBox1.List = tablo
End Sub
Private Sub ComboBox1_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
ListeFiltree ComboBox1, tablo ' si pas d'argument colonne la recherche se fait dans toute les colonnes
End Sub
Function ListeFiltree(combo As Object, tablo, Optional col As Long = -1)
Dim A&, LiG, C, tbl(), ok As Boolean, ArgmT$, CoL1&, CoL2&, Cx&
ArgmT = combo.Value: If combo.Value = "" Then ArgmT = "*"
If col = -1 Then CoL1 = LBound(tablo): CoL2 = UBound(tablo, 2) Else CoL1 = LBound(tablo): CoL2 = LBound(tablo)
If combo.Value = "" Then combo.Clear: Exit Function
For LiG = 1 To UBound(tablo)
ok = False
For C = CoL1 To CoL2
If UCase(tablo(LiG, C)) Like "*" & UCase(ComboBox1.Value) & "*" Then ok = True
Next
If ok Then
A = A + 1: ReDim Preserve tbl(1 To 3, 1 To A)
For Cx = 1 To UBound(tbl): tbl(Cx, A) = tablo(LiG, Cx): Next
End If
Next
If A > 0 Then
If A > 1 Then combo.List = Application.Transpose(tbl) Else combo.Column = tbl
Else
combo.Clear
End If
combo.DropDown
End Function
Je te remercie beaucoup. J'espère m'en sortir.re
perso je ne m'ennuie pas avec tout ça
j'ai ma toute petite fonction applicable a toute mes combo
si je clique sur le dropbutton j'ai ma liste complète
si je tape ben j'ai la liste filtrée
exemple avec un userform et une combobox "ComboBox1"
VB:'***************************************************************************************************** ' ___ _ _______ __ _ ____ _ _ _______ ___ _ _ _ ___ _ _. ' // \\ /\\ // // \\ // // // // // // \\ // // // // \\ //| // ' //___// //__\ // //__// // // //__// // // // // // // // // // | // ' // // \\ // // \\ // // // \\ // // // // // // // // // | // '// // // // // // // //___ // \\ // \\__// //__// //___ \\__// // |// '**************************************************************************************************** Option Explicit Dim tablo Private Sub UserForm_Activate() Dim LiG& With Range("tableaulivres") tablo = .Resize(, .Columns.Count + 1).Value For LiG = 1 To UBound(tablo): tablo(LiG, UBound(tablo, 2)) = LiG: Next ComboBox1.List = tablo ComboBox1.ColumnWidths = .Columns(1).Width & ";" & .Columns(2).Width End With End Sub Private Sub ComboBox1_DropButtonClick() ComboBox1.List = tablo End Sub Private Sub ComboBox1_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer) ListeFiltree ComboBox1, tablo ' si pas d'argument colonne la recherche se fait dans toute les colonnes End Sub Function ListeFiltree(combo As Object, tablo, Optional col As Long = -1) Dim A&, LiG, C, tbl(), ok As Boolean, ArgmT$, CoL1&, CoL2&, Cx& ArgmT = combo.Value: If combo.Value = "" Then ArgmT = "*" If col = -1 Then CoL1 = LBound(tablo): CoL2 = UBound(tablo, 2) Else CoL1 = LBound(tablo): CoL2 = LBound(tablo) If combo.Value = "" Then combo.Clear: Exit Function For LiG = 1 To UBound(tablo) ok = False For C = CoL1 To CoL2 If UCase(tablo(LiG, C)) Like "*" & UCase(ComboBox1.Value) & "*" Then ok = True Next If ok Then A = A + 1: ReDim Preserve tbl(1 To 3, 1 To A) For Cx = 1 To UBound(tbl): tbl(Cx, A) = tablo(LiG, Cx): Next End If Next If A > 0 Then If A > 1 Then combo.List = Application.Transpose(tbl) Else combo.Column = tbl Else combo.Clear End If combo.DropDown End Function
et je fait la même opération pour les autres combobox
terminé
la sub peut rester dans le userform ou un module on s'en fou
'--------------------------------------------------------------
'Placement de toutes les TextBoxes en Classe_ContrôleTVATextBox
'--------------------------------------------------------------
'-----------------------
'Initialisation UserForm
'-----------------------
Private Sub UserForm_Initialisation()
Dim Control As Control
Dim k As Integer
'--------------------------------------------------------------
'Placement de toutes les TextBoxes en Classe_ContrôleTVATextBox
'--------------------------------------------------------------
k = 0
For Each Control In Me.Controls
If TypeOf Control Is msforms.TextBox Then
k = k + 1
ReDim Preserve TabTextBoxes(1 To k)
Set TabTextBoxes(k).TextBox = Control
End If
Next Control
End Sub
pourquoi dans ta classe ça se passe différemment ??C'est un Classe indépendante (ma préférence) mais @patricktoulon pourrait te faire un exemple avec la classe du UserForm lui-même instanciée autant de fois que nécessaire.