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 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114
| Option Explicit
Dim NbLignes As Long
Dim TabDonnées() As Variant
'-------------------------------------------------------------------------------
Private Sub UserForm_Initialize()
'-------------------------------------------------------------------------------
' Recherche le nombre de lignes:
Call vbo.TableauCoordonnées("A1", , , NbLignes)
' Suppression des filtres:
Range("A1").AutoFilter
' Charge les données de la colonne 1 utilisées pour le ComboBox1:
Call ChargementDonnéesColonne(1)
' Mise à jour des valeurs de ComboBox1:
Call MAJ_ComboBox(1)
End Sub
'-------------------------------------------------------------------------------
Sub ChargementDonnéesColonne(Col As Long)
'-------------------------------------------------------------------------------
Dim N As Long, i As Long
' Efface les anciennes données mémorisées:
ReDim TabDonnées(0)
' Boucle sur les lignes sans l'entête et récupère les données non filtrée:
For N = 2 To NbLignes
If ThisWorkbook.Worksheets("Feuil1").Rows(N).Hidden = False Then
ReDim Preserve TabDonnées(i)
TabDonnées(i) = ThisWorkbook.Worksheets("Feuil1").Cells(N, Col)
i = i + 1
End If
Next N
' Trie les données par ordre croissant et supprime les doublons:
Call vbo.QuickRanking(TabDonnées(), True, 4)
End Sub
'-------------------------------------------------------------------------------
Private Sub MAJ_ComboBox(NumCombo)
'-------------------------------------------------------------------------------
' Création d'une nouvelle liste dans une ComboBox:
Dim CB As ComboBox
Dim i As Integer
' CB représentera la ComboBox voulue d'après le numéro passé dans NumCombo:
If NumCombo = 1 Then Set CB = ComboBox1
If NumCombo = 2 Then Set CB = ComboBox2
If NumCombo = 3 Then Set CB = ComboBox3
If NumCombo = 4 Then Set CB = ComboBox4
' Efface les anciennes valeurs de la ComboBox:
CB.Clear
' Charge les nouvelles valeurs dans la ComboBox:
For i = 0 To UBound(TabDonnées())
CB.AddItem TabDonnées(i)
Next i
' Libère l'objet de la mémoire:
Set CB = Nothing
End Sub
'-------------------------------------------------------------------------------
Private Sub ComboBox1_Change()
'-------------------------------------------------------------------------------
' Sur changement de ComboBox1:
Call PoseLesFiltres
ComboBox2.Clear
ComboBox3.Clear
ComboBox4.Clear
Call ChargementDonnéesColonne(2)
Call MAJ_ComboBox(2)
End Sub
'-------------------------------------------------------------------------------
Private Sub ComboBox2_Change()
'-------------------------------------------------------------------------------
' Sur changement de ComboBox2:
Call PoseLesFiltres
ComboBox3.Clear
ComboBox4.Clear
Call ChargementDonnéesColonne(3)
Call MAJ_ComboBox(3)
End Sub
'-------------------------------------------------------------------------------
Private Sub ComboBox3_Change()
'-------------------------------------------------------------------------------
' Sur changement de ComboBox3:
Call PoseLesFiltres
ComboBox4.Clear
Call ChargementDonnéesColonne(4)
Call MAJ_ComboBox(4)
End Sub
'-------------------------------------------------------------------------------
Private Sub ComboBox4_Change()
'-------------------------------------------------------------------------------
' Sur changement de ComboBox4:
Call PoseLesFiltres
End Sub
'-------------------------------------------------------------------------------
Sub PoseLesFiltres()
'-------------------------------------------------------------------------------
' Efface les éventuels filtres existants:
Range("A1").AutoFilter
' Pose les filtres des colonnes 1 à 4 suivant les valeurs des combobox1 à 4:
If ComboBox1.Value > "" Then Range("A1").AutoFilter Field:=1, Criteria1:=ComboBox1.Value
If ComboBox2.Value > "" Then Range("A1").AutoFilter Field:=2, Criteria1:=ComboBox2.Value
If ComboBox3.Value > "" Then Range("A1").AutoFilter Field:=3, Criteria1:=ComboBox3.Value
If ComboBox4.Value > "" Then Range("A1").AutoFilter Field:=4, Criteria1:=ComboBox4.Value
End Sub
'------------------------------------------------------------------------------- |
Partager