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
| Option Explicit 'oblige à déclarer toutes les variables
Private B As Object 'déclare la variable B (onglet Base)
Private L As Object 'déclare la variable L (onglet Liste)
Private Sub UserForm_Initialize()
Dim DL As Integer 'déclare la variable DL (Dernière Ligne)
Dim PL As Range 'déclare la variable PL (Plage)
Set B = Sheets("Base") 'définit l'onglet B
Set L = Sheets("Listes") 'définit l'onglet L
DL = L.Cells(Application.Rows.Count, 1).End(xlUp).Row 'définit la dernière ligne éditée DL de la colonne 1 (=A) de l'onglet L
Set PL = L.Range("A2: A" & DL) 'définit la plage PL
Me.ComboBox1.List = PL.Value 'alimente la ComboBox1
End Sub
Private Sub CommandButton1_Click() 'bouton "OK"
Dim CTRL As Control 'déclare la variable CTRL (ConTRôLe)
Dim LI As Integer 'déclare la variable LI (LIgne)
'***************************************************************
'code pour obliger l'utilisateur à renseigner toutes les données
'***************************************************************
For Each CTRL In Me.Controls 'boucle sur tous les contrôles de l'UserForm
'condition 1 : si le contrôle est une textbox ou une combobox
If TypeOf CTRL Is MSForms.TextBox Or TypeOf CTRL Is MSForms.ComboBox Then
If CTRL.Value = "" Then 'condition 2 : si le contrôle est vide
'message reprenant la caption de la label associée au contrôle (voir propriété [Name] de la label)
MsgBox "Vous devez renseigner le champ : " & Me.Controls("L" & CTRL.Name).Caption & " !"
CTRL.SetFocus 'place le curseur dans le contrôle vide
Exit Sub ' sort de la procédure
End If 'fin de la condition 2
End If 'fin de la condition 1
Next CTRL 'nouveau contrôle de la boucle
'*********************************************
'code pour envoyer les données dans le tableau
'*********************************************
'définit la dernière ligne édité LI de la colonne 2 (=B) de l'onglet B
LI = B.Cells(Application.Rows.Count, 2).End(xlUp).Row + 1
For Each CTRL In Me.Controls 'boucle sur tous les contrôles de l'UserForm
'condition : si le contrôle est une textbox ou une combobox
If TypeOf CTRL Is MSForms.TextBox Or TypeOf CTRL Is MSForms.ComboBox Then
'renvoie la valeur du contrôle dans la cellule ligne : Li, colonne : voir propriété [Tag] du contrôle de l'onglet B
B.Cells(LI, CInt(CTRL.Tag)).Value = CTRL.Value
End If 'fin de la condition
Next CTRL 'prochain contrôle de la boucle
Unload Me 'vide et ferme l'UserForm
End Sub
Private Sub CommandButton2_Click() 'bouton "Annuler"
Unload Me 'vide et ferme l'UserForm
End Sub |
Partager