Pour mettre en pratique l'utilisation des contrôles, rien de tel qu'un petit exercice ...
Voici le point de départ de l'exercice :
Le fichier : controles_exercice.xls
Vous l'aurez compris, l'objectif est de remplir le tableau via le formulaire.
Quelques points à prendre en compte :
Lister les pays en fonction de la liste de la seconde feuille
Vérifier le contenu des contrôles avant d'ajouter un nouveau contact
Après insertion, réinitialiser les valeurs des contrôles sans fermer le formulaire
Prenez un moment pour réaliser cet exercice avant de passer à la solution ...
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
La première action effectuée a été d'augmenter la propriété Zoom de l'UserForm à 120 pour plus de confort à l'utilisation du formulaire :
Les tests des boutons d'option ont déjà été vus à la première page des contrôles, c'est pour cela qu'une solution plus simple a été utilisée ici.
Le bouton "Mme" a été choisi par défaut (propriété Value : True), cela implique qu'il ne sera pas nécessaire de vérifier si le choix de la civilité a été effectué.
Private
Sub
CommandButton_Fermer_Click()
Unload Me
End
Sub
Private
Sub
UserForm_Initialize()
'Chargement
de la liste au lancement de l'UserForm
For
i = 1
To
231
'Liste des
231 pays de la feuille "Pays"
ComboBox_Pays.AddItem Sheets(
"Pays"
).Cells(i,
1)
Next
End
Sub
Une solution simple consiste à afficher une boîte de dialogue si l'un des contrôles est vide :
Private
Sub
CommandButton_Ajouter_Click()
If
TextBox_Nom.Value =
""
Or
TextBox_Prenom.Value =
""
Or
TextBox_Adresse.Value =
""
Or
TextBox_Lieu.Value =
""
Or
ComboBox_Pays.Value =
""
Then
MsgBox "Formulaire
incomplet"
Else
'Instructions
pour insérer le contact ici ...
End
If
End
Sub
Mais pour compliquer un peu les choses, chaque contrôle sera testé individuellement, et si l'un d'eux n'est pas rempli, son intitulé (Label) sera coloré en rouge :
Private
Sub
CommandButton_Ajouter_Click()
'Coloration
des Labels en noir
Label_Nom.ForeColor = RGB(0, 0, 0)
Label_Prenom.ForeColor = RGB(0, 0, 0)
Label_Adresse.ForeColor = RGB(0, 0, 0)
Label_Lieu.ForeColor = RGB(0, 0, 0)
Label_Pays.ForeColor = RGB(0, 0, 0)
'Contrôles
de contenu
If
TextBox_Nom.Value =
""
Then
'SI pas de "nom"
...
Label_Nom.ForeColor = RGB(255, 0, 0)
'Label
"nom" en rouge
ElseIf
TextBox_Prenom.Value =
""
Then
Label_Prenom.ForeColor = RGB(255, 0, 0)
ElseIf
TextBox_Adresse.Value =
""
Then
Label_Adresse.ForeColor = RGB(255, 0, 0)
ElseIf
TextBox_Lieu.Value =
""
Then
Label_Lieu.ForeColor = RGB(255, 0, 0)
ElseIf
ComboBox_Pays.Value =
""
Then
Label_Pays.ForeColor = RGB(255, 0, 0)
Else
'Instructions
pour insérer le contact ici ...
End
If
End
Sub
Le code suivant a été inséré à l'emplacement indiqué sur la code précédent (sous forme de commentaire) :
Dim
no_ligne
As
Integer
,
civilite
As
String
'Choix
de civilité
For
Each
bouton_civilite
In
Frame_Civilite.Controls
If
bouton_civilite.Value
Then
civilite = bouton_civilite.Caption 'Civilité
choisie
End
If
Next
'no_ligne
= N° de ligne de la dernière cellule non vide de la
colonne +1
no_ligne =
Range(
"A65536"
).
End
(xlUp).Row
+ 1
'Insertion
des valeurs sur la feuille
Cells(no_ligne,
1) = civilite
Cells(no_ligne, 2) =
TextBox_Nom.Value
Cells(no_ligne, 3) =
TextBox_Prenom.Value
Cells(no_ligne, 4) =
TextBox_Adresse.Value
Cells(no_ligne, 5) =
TextBox_Lieu.Value
Cells(no_ligne, 6) =
ComboBox_Pays.Value
'Après
insertion, on remet les valeurs initiales
OptionButton1.Value
=
True
TextBox_Nom.Value
= ""
TextBox_Prenom.Value
= ""
TextBox_Adresse.Value
= ""
TextBox_Lieu.Value
= ""
ComboBox_Pays.ListIndex
= -1
Pour terminer, voici le code complet ainsi que le fichier :
Private
Sub
CommandButton_Fermer_Click()
Unload Me
End
Sub
Private
Sub
UserForm_Initialize()
'Liste
des 231 pays de la feuille "Pays"
For
i = 1
To
231
ComboBox_Pays.AddItem
Sheets("Pays"
).Cells(i,
1)
Next
End
Sub
Private
Sub
CommandButton_Ajouter_Click()
'Coloration
des Labels en noir
Label_Nom.ForeColor = RGB(0, 0, 0)
Label_Prenom.ForeColor = RGB(0, 0, 0)
Label_Adresse.ForeColor = RGB(0, 0, 0)
Label_Lieu.ForeColor = RGB(0, 0, 0)
Label_Pays.ForeColor = RGB(0, 0, 0)
'Contrôles
de contenu
If
TextBox_Nom.Value =
""
Then
'SI pas de "nom"
...
Label_Nom.ForeColor = RGB(255, 0, 0)
'Label
"nom" en rouge
ElseIf
TextBox_Prenom.Value =
""
Then
Label_Prenom.ForeColor = RGB(255, 0, 0)
ElseIf
TextBox_Adresse.Value =
""
Then
Label_Adresse.ForeColor = RGB(255, 0, 0)
ElseIf
TextBox_Lieu.Value =
""
Then
Label_Lieu.ForeColor = RGB(255, 0, 0)
ElseIf
ComboBox_Pays.Value =
""
Then
Label_Pays.ForeColor = RGB(255, 0, 0)
Else
'Si
le formulaire est complet, on insère les valeurs sur la
feuille
Dim
no_ligne
As
Integer
,
civilite
As
String
'Choix
de civilité
For
Each
bouton_civilite
In
Frame_Civilite.Controls
If
bouton_civilite.Value
Then
civilite =
bouton_civilite.Caption
End
If
Next
'no_ligne
= N° de ligne de la dernière cellule non vide de la
colonne +1
no_ligne = Range(
"A65536"
).
End
(xlUp).Row
+ 1
'Insertion
des valeurs sur la feuille
Cells(no_ligne, 1) = civilite
Cells(no_ligne, 2) = TextBox_Nom.Value
Cells(no_ligne, 3) = TextBox_Prenom.Value
Cells(no_ligne, 4) = TextBox_Adresse.Value
Cells(no_ligne, 5) = TextBox_Lieu.Value
Cells(no_ligne, 6) = ComboBox_Pays.Value
'Après
insertion, on remet les valeurs initiales
OptionButton1.Value =
True
TextBox_Nom.Value = ""
TextBox_Prenom.Value = ""
TextBox_Adresse.Value = ""
TextBox_Lieu.Value = ""
ComboBox_Pays.ListIndex = -1
End
If
End
Sub
Le fichier : controles_exercice2.xls