Private O As Worksheet 'déclare la variable O (Onglet)
Private TV As Variant 'déclare la variable TV (Tableau des Valeurs)
Private LI As Integer 'déclare la variable LI (LIgne)
Private Sub UserForm_Initialize() 'à l'initialisation de l'UserForm
Dim D As Object 'déclare la variable D (Dictionnaire)
Dim I As Integer 'déclare la variable I (Incrément)
'DTPicker1.Value = Now
'DTPicker2.Value = Now
'DTPicker3.Value = Now
'DTPicker4.Value = Now
'DTPicker5.Value = Now
'DTPicker6.Value = Now
'DTPicker7.Value = Now
'DTPicker8.Value = Now
Set O = Worksheets("Feuil1") 'définit l'onglet O
TV = O.Range("A7").CurrentRegion 'définit le tableau des valeurs TV (attention, il commence à la ligne 6 !)
Set D = CreateObject("Scripting.Dictionary") 'définit le dictionnaire D
'Remarque, les données commencent à la troisième ligne du tableau des valeurs TV qui correspond à la ligne 8 de l'onglet !
'boucle sur toutes les lignes I du tableau des valeurs TV (en partant de la troisième)
For I = 3 To UBound(TV, 1)
D(TV(I, 1)) = "" 'alimente le dictionnaire D avec les données en colonne 1 du tableau des valeurs TV
Next I 'procaine ligne de la boucle
Me.ComboBox1.List = D.keys 'alimente la ComboBox1 avec la liste des éléments du dictionaire D sans doublons
End Sub
Private Sub ComboBox1_Change() 'au changement dans la ComboBox1
Dim D As Object 'déclare la variable D (Dictionnaire)
Dim I As Integer 'déclare la variable I (Incrément)
Me.ComboBox2.Clear 'vide la ComboBox2
Me.ComboBox3.Clear 'vide la ComboBox3
If Me.ComboBox1.Value = "" Then Exit Sub 'si la ComboBox1 est effacée, sort de la procédure
Set D = CreateObject("Scripting.Dictionary") 'définit le dictionnaire D
For I = 3 To UBound(TV, 1) 'boucle sur toutes les lignes I du tableau des valeurs TV (en partant de la troisième)
If TV(I, 1) = Me.ComboBox1.Value Then 'condition si la donnée ligne I, colonne 1 du tableau des valeurs TV est égale à la valeur de la ComboBox1
D(TV(I, 2)) = "" 'alimente le dictionnaire D avec les données en colonne 2 du tableau des valeurs TV
End If 'fin de la condition
Next I 'procaine ligne de la boucle
Me.ComboBox2.List = D.keys 'alimente la ComboBox2 avec la liste des éléments du dictionaire D sans doublons
End Sub
Private Sub ComboBox2_Change() 'au changement dans la ComboBox1
Dim D As Object 'déclare la variable D (Dictionnaire)
Dim I As Integer 'déclare la variable I (Incrément)
Me.ComboBox3.Clear 'vide la ComboBox3
If Me.ComboBox2.Value = "" Then Exit Sub 'si la ComboBox2 est effacée, sort de la procédure
Set D = CreateObject("Scripting.Dictionary") 'définit le dictionnaire D
For I = 3 To UBound(TV, 1) 'boucle sur toutes les lignes I du tableau des valeurs TV (en partant de la troisième)
'condition si la donnée ligne I, colonne 1 du tableau des valeurs TV est égale à la valeur de la ComboBox1
'et la donnée ligne I colonne 2 du tableau des valeurs TV est égale à la valeur de la ComBobox2
If TV(I, 1) = Me.ComboBox1.Value And TV(I, 2) = Me.ComboBox2.Value Then
D(TV(I, 3)) = "" 'alimente le dictionnaire D avec les données en colonne 3 du tableau des valeurs TV
End If 'fin de la condition
Next I 'prochaine ligne de la boucle
Me.ComboBox3.List = D.keys 'alimente la ComboBox2 avec la liste des éléments du dictionaire D sans doublons
End Sub
Private Sub CommandButton1_Click() 'bouton "Rechercher"
Dim CTRL As Control 'déclare la variable CTRL (ConTRôLe)
For I = 3 To UBound(TV, 1) 'boucle sur toutes les lignes I du tableau des valeurs TV (en partant de la troisième)
'condition si la donnée ligne I, colonne 1 du tableau des valeurs TV est égale à la valeur de la ComboBox1
'et la donnée ligne I colonne 2 du tableau des valeurs TV est égale à la valeur de la ComBobox2
'et la donnée ligne I colonne 3 du tableau des valeurs TV est égale à la valeur de la ComBobox3
If TV(I, 1) = Me.ComboBox1.Value And TV(I, 2) = Me.ComboBox2.Value And TV(I, 3) = Me.ComboBox3.Value Then
LI = I + 5 'définit la ligne LI (I + 5 : voir remarque dans l'initialisation de l'UserForm)
Exit For 'sort de la boucle
Next I 'prochaine ligne de la boucle
For Each CTRL In Me.Controls 'boucle sur tous les contrôle de l'userForm
'si la propriété [Tag] du contrôle n'est pas vide, récupère dans le contrôle la valeur de la cellule ligne = LI, colonne = propriété [tag] du contrôle convertie en Byte, de l'onglet O
If CTRL.Tag <> "" Then CTRL.Value = O.Cells(LI, CByte(CTRL.Tag)).Value
Next CTRL 'prochaine contrôle de la boucle
End Sub
Private Sub CommandButton2_Click() 'bouton "Modifier"
Dim CTRL As Control 'déclare la variable CTRL (ConTRôLe)
For Each CTRL In Me.Controls 'boucle sur tous les contrôle de l'userForm
'si la propriété [Tag] du contrôle n'est pas vide, renvoie la valeur du contrôle dans la cellule ligne = LI, colonne = propriété [tag] du contrôle convertie en Byte, de l'onglet O
If CTRL.Tag <> "" Then O.Cells(LI, CByte(CTRL.Tag)).Value = CTRL.Value
Next CTRL 'prochaine contrôle de la boucle
End Sub
Private Sub CommandButton4_Click() 'bouton "Nouvelle Recherche"
Unload Me 'vide et ferme l'UserForm en cours
RECHERCHE.Showáffiche l 'UserForm RECHERCHE
End Sub
Private Sub CommandButton3_Click() 'bouton "Annuler"
Unload Me 'vide et ferme l'UserForm en cours
End Sub