1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92
| Option Explicit
Dim Lig As Long
Private Sub UserForm_Initialize()
Dim T As Object
Dim Temp
Dim c As Range
Set T = CreateObject("Scripting.Dictionary")
'Remplissage de la Box2 sans doublons
With Sheets("Feuil1")
For Each c In .Range("A6", .Cells(Rows.Count, 1).End(xlUp)) 'Ligne 6 ligne réservée aux titres
T.Item(c.Value) = c.Value
Next c
End With
Temp = T.items
Tri Temp, LBound(Temp), UBound(Temp)
Me.Box2.List = Temp
Set T = Nothing
'Définition de la Box3 à 2 colonnes
With Me.Box3
.ColumnCount = 2
.ColumnWidths = .Width - 2 & ";0"
End With
End Sub
Private Sub Box2_AfterUpdate()
Dim c As Range
Me.Box3.Clear
If Me.Box2.ListIndex > -1 Then
Application.ScreenUpdating = False
'filtrage de la feuille de donnée sur la vaaleur de combo et remplissage
'de combo2 par les valeurs des cellules filtées et le numéro de ligne
With Sheets("Feuil1")
.Range("A5", .Cells(Rows.Count, 1).End(xlUp)).AutoFilter field:=1, Criteria1:=Me.Box2.Value 'Ligne 5: ligne des titres
For Each c In .Range("B6:B" & .Cells(Rows.Count, 1).End(xlUp).Row).SpecialCells(xlCellTypeVisible) 'Données à partir de la ligne 6
With Me.Box3
.AddItem c.Value
.List(.ListCount - 1, 1) = c.Row
End With
Next c
.Range("A5", .Cells(Rows.Count, 1).End(xlUp)).AutoFilter
End With
End If
End Sub
Private Sub Box3_AfterUpdate()
'Récupération du n° de la ligne contenant les données
If Me.Box3.ListIndex > -1 Then Lig = Me.Box3.List(Me.Box3.ListIndex, 1)
End Sub
Private Sub CommandButton1_Click()
If Lig > 5 Then
With Sheets("Feuil1")
.Range("C" & Lig) = Me.TextBox1
.Range("D" & Lig) = Me.TextBox2
.Range("E" & Lig) = Me.TextBox3
End With
Lig = 0 'Réinitialisation de Lig
End If
Unload Me
End Sub
Sub Tri(Tableau, L As Integer, R As Integer)
Dim G As Integer, D As Integer
Dim Ref, Temp
Ref = Tableau((L + R) \ 2)
G = L
D = R
Do
Do While Tableau(G) < Ref
G = G + 1
Loop
Do While Ref < Tableau(D)
D = D - 1
Loop
If G <= D Then
Temp = Tableau(G)
Tableau(G) = Tableau(D)
Tableau(D) = Temp
G = G + 1
D = D - 1
End If
Loop While G <= D
If G < R Then Tri Tableau, G, R
If L < D Then Tri Tableau, L, D
End Sub |
Partager