Option Explicit 'oblige à déclarer toutes les variables
Private A As Worksheet 'déclare la variable A (onglet Acronymes)
Private Sub UserForm_Initialize() 'à l'initialisation de l'UserForm
Dim TV As Variant 'déclare la variable TV (Tableau des Valeurs)
Dim D As Object 'déclare la variable D (Dictionnaire)
Dim I As Long 'déclare la variable I (Incrément)
Set A = Sheets("Acronymes") 'définit l'onglet A
TV = A.Range("B4").CurrentRegion 'définit le tableau des valeurs TV
Set D = CreateObject("Scripting.Dictionary") 'définit le dictionnaire D
For I = 1 To UBound(TV, 1) 'boucle sur toutes les lignes I du tableau des valeurs TV
If TV(I, 3) <> "" Then D(TV(I, 3)) = "" 'si la donnée ligne I colonne 3 de TV n'est pas vide, alimente le dictionnaire D
Next I 'prochaine ligne de la boucle
Me.ComboBox1.List = D.keys 'alimente la ComboBox1 avec les éléments du dictionnaire D sans doublon
End Sub
Private Sub CommandButton1_Click() 'bouton "Valider"
Dim I As Byte 'déclare la variable I
Dim CTRL As Control 'déclare la variable CTRL (ConTRôLe)
Dim LI As Long 'déclare la variable LI (LIgne)
'********************************************
'oblige à renseigner les deux premiers champs
'********************************************
For I = 1 To 2 'boucle sur les deux TextBoxes
If Me.Controls("TextBox" & I).Value = "" Then 'condition si la TextBox est vide
MsgBox "Vous devez renseigner le champ " & Chr(34) & Me.Controls("L" & "TextBox" & I).Caption & Chr(34) & " !" 'message
Me.Controls("TextBox" & I).SetFocus 'place le curseur dans la TextBox
Exit Sub 'sort de la procédure
End If 'fin de la condition
Next I 'prochaine TextBox de la boucle
'************************
'message de non catégorie
'************************
If Me.ComboBox1.Value = "" Then 'condition : si la ComboBox1 est vide
'si "Non" au message, sort de la procédure, si "Oui" au message va à l'étiquette "suite"
If MsgBox("Cet acronyme n'aura pas de catégorie ! Voulez-vous continuer ?", vbYesNo, "ATTENTION") = vbNo Then Exit Sub Else GoTo suite
End If 'fin de la condition
'**************************************
'Autorisation de rajouter une catégorie
'**************************************
If Me.ComboBox1.ListIndex = -1 Then 'condition : si la valeur éditée dans la Combobox1 ne fait pas partie des éléments de cette Combobox1
'si "Non" au message, efface la valeur de la Combobox1, sort de la procédure
If MsgBox("Voulez-vous ajouter une catégorie ?", vbYesNo, "ATTENTION") = vbNo Then Me.ComboBox1.Value = "": Exit Sub
End If 'fin de la condition
suite: 'étiquette
'****************************************************************
'renvoie des données de l'userForm dans le tableau de l'onglet A
'****************************************************************
'définit la ligne de renvoie (4 si B4 est vide, sinon, la première ligne vide de la colonne 2 (=B))
LI = IIf(A.Range("B4").Value = "", 4, A.Cells(Application.Rows.Count, 2).End(xlUp).Row + 1)
For Each CTRL In Me.Controls 'boucle sur tous les contrôles
'si la propriété [Tag] du Contrôle n'est pas vide, renvoie dans la cellue ligne : LI,
'colonne : propriété {tag] du contrôle (convertie en byte), la valeur du contrôle
If CTRL.Tag <> "" Then A.Cells(LI, CByte(CTRL.Tag)).Value = CTRL.Value
Next CTRL 'prochain contrôle de la boucle
Unload Me 'vide et ferme l'UserForm
UserForm1.Show 'affiche l'userForm1 (vierge)
End Sub
Private Sub CommandButton2_Click() 'bouton "Annuler"
Unload Me 'vide et ferme l'UserFOrm
End Sub