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
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Voici une solution pour réaliser cet exercice
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é.
Le bouton "Fermer"
Private Sub CommandButton_Fermer_Click()
Unload Me
End Sub
Le contenu de la liste déroulante
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
Vérification des contrôles
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
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
Insertion des données
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
Vue d'ensemble
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
Aucun commentaire:
Enregistrer un commentaire