Voyons maintenant un petit exercice pour s'entraîner à utiliser les contrôles (Controls).
Il existe un fichier avec un formulaire prêt à l'emploi et des éléments de contrôle. Nous devons écrire du code qui ferait fonctionner tous les éléments afin que l'utilisateur puisse remplir notre base de données improvisée grâce à l'interaction avec le formulaire.
Voici le fichier Excel à télécharger : controls_exercise.xls
Il devrait maintenant être clair que le but ici est de remplir le tableau à l'aide du formulaire.
Quelques points à considérer :
Tout d'abord, nous devons augmenter la propriété Zoom de notre formulaire à 120 pour le rendre plus facile à utiliser :
Nous avons déjà abordé la vérification des boutons d'option (dans la première leçon sur les contrôles), nous utilisons donc ici une solution simple.
"Mme" est sélectionnée par défaut (propriété Value : True), c'est-à-dire que nous ne vérifierons pas l'adresse lors de sa sélection.
Private Sub CommandButton_Close_Click()
Unload Me
End Sub
Private Sub UserForm_Initialize() 'Chargement de la liste lorsque le formulaire est ouvert
For i = 1 To 252 'Générer une liste de 252 pays à partir de la feuille de calcul Pays
ComboBox_Country.AddItem Sheets("Country").Cells(i, 1)
Next
End Sub
Une solution simple serait d'afficher une boîte de dialogue si l'un des contrôles est vide.
Private Sub CommandButton_Add_Click()
If TextBox_Last_Name.Value = "" Or TextBox_First_Name.Value = "" Or TextBox_Address.Value = "" Or TextBox_Place.Value = "" Or ComboBox_Country.Value = "" Then
MsgBox "Form incomplete"
Else
'Instructions pour saisir un contact ici...
End If
End Sub
Mais pour compliquer un peu les choses, chaque élément doit être vérifié séparément, et si l'un d'entre eux est vide, la couleur de son nom () doit changer en rouge :
Private Sub CommandButton_Add_Click()
'Définir la couleur du titre sur noir
Label_Last_Name.ForeColor = RGB(0, 0, 0)
Label_First_Name.ForeColor = RGB(0, 0, 0)
Label_Address.ForeColor = RGB(0, 0, 0)
Label_Place.ForeColor = RGB(0, 0, 0)
Label_Country.ForeColor = RGB(0, 0, 0)
'Contrôles de contenu
If TextBox_Last_Name.Value = "" Then 'SI rien n'est précisé...
Label_Last_Name.ForeColor = RGB(255, 0, 0) 'Définir la couleur du titre sur rouge
ElseIf TextBox_First_Name.Value = "" Then
Label_First_Name.ForeColor = RGB(255, 0, 0)
ElseIf TextBox_Address.Value = "" Then
Label_Address.ForeColor = RGB(255, 0, 0)
ElseIf TextBox_Place.Value = "" Then
Label_Place.ForeColor = RGB(255, 0, 0)
ElseIf ComboBox_Country.Value = "" Then
Label_Country.ForeColor = RGB(255, 0, 0)
Else
'Instructions pour saisir un contact ici...
End If
End Sub
Le code suivant est à insérer à l'endroit indiqué dans le code ci-dessus (voir commentaires) :
Dim row_number As Integer, salutation As String
'Sélection du recours
For Each salutation_button In Frame_Salutation.Controls
If salutation_button.Value Then
salutation = salutation_button.Caption 'Appel sélectionné
End If
Next
'row_number = numéro de ligne de la dernière cellule non vide de la colonne +1
row_number = Range("A65536").End(xlUp).Row + 1
'Insérer des valeurs dans une feuille de calcul
Cells(row_number, 1) = salutation
Cells(row_number, 2) = TextBox_Last_Name.Value
Cells(row_number, 3) = TextBox_First_Name.Value
Cells(row_number, 4) = TextBox_Address.Value
Cells(row_number, 5) = TextBox_Place.Value
Cells(row_number, 6) = ComboBox_Country.Value
'Après collage, les valeurs d'origine sont renvoyées
OptionButton1.Value = True
TextBox_Last_Name.Value = ""
TextBox_First_Name.Value = ""
TextBox_Address.Value = ""
TextBox_Place.Value = ""
ComboBox_Country.ListIndex = -1
Ça y est, vous avez ici le code complété de l'exercice et le fichier à télécharger :
Private Sub CommandButton_Close_Click()
Unload Me
End Sub
Private Sub UserForm_Initialize() 'Liste des 252 pays sur la fiche "Pays"
For i = 1 To 252
ComboBox_Country.AddItem Sheets("Country").Cells(i, 1)
Next
End Sub
Private Sub CommandButton_Add_Click()
'Définir la couleur du nom sur noir
Label_Last_Name.ForeColor = RGB(0, 0, 0)
Label_First_Name.ForeColor = RGB(0, 0, 0)
Label_Address.ForeColor = RGB(0, 0, 0)
Label_Place.ForeColor = RGB(0, 0, 0)
Label_Country.ForeColor = RGB(0, 0, 0)
'Contrôles de contenu
If TextBox_Last_Name.Value = "" Then 'SI rien n'est précisé...
Label_Last_Name.ForeColor = RGB(255, 0, 0) 'Définir la couleur du titre sur rouge
ElseIf TextBox_First_Name.Value = "" Then
Label_First_Name.ForeColor = RGB(255, 0, 0)
ElseIf TextBox_Address.Value = "" Then
Label_Address.ForeColor = RGB(255, 0, 0)
ElseIf TextBox_Place.Value = "" Then
Label_Place.ForeColor = RGB(255, 0, 0)
ElseIf ComboBox_Country.Value = "" Then
Label_Country.ForeColor = RGB(255, 0, 0)
Else
'Si le formulaire est rempli, les valeurs seront collées dans la feuille de calcul
Dim row_number As Integer, salutation As String
'Sélection du recours
For Each salutation_button In Frame_Salutation.Controls
If salutation_button.Value Then
salutation = salutation_button.Caption
End If
Next
'row_number = numéro de ligne de la dernière cellule non vide de la colonne +1
row_number = Range("A65536").End(xlUp).Row + 1
'Insérer des valeurs dans une feuille de calcul
Cells(row_number, 1) = salutation
Cells(row_number, 2) = TextBox_Last_Name.Value
Cells(row_number, 3) = TextBox_First_Name.Value
Cells(row_number, 4) = TextBox_Address.Value
Cells(row_number, 5) = TextBox_Place.Value
Cells(row_number, 6) = ComboBox_Country.Value
'Après avoir inséré les données, nous renvoyons les valeurs initiales
OptionButton1.Value = True
TextBox_Last_Name.Value = ""
TextBox_First_Name.Value = ""
TextBox_Address.Value = ""
TextBox_Place.Value = ""
ComboBox_Country.ListIndex = -1
End If
End Sub
Voici le fichier Excel à télécharger : controls_exercise2.xls