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