TOP

VBA-Leçon 12.4. Éléments de contrôle (exercices)

YouLibreCalc for Excel logo

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 :

  • La liste des pays est basée sur la liste de la deuxième feuille ;
  • Vérifier les valeurs des éléments de contrôle avant d'ajouter un nouveau contact ;
  • Après avoir saisi les valeurs, renvoyer les valeurs initiales des contrôles sans fermer le formulaire.
  • Une des façons de résoudre le problème

    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.

    Bouton Fermer

    Private Sub CommandButton_Close_Click()
         Unload Me
    End Sub
    

    Le contenu de la liste déroulante

    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
    

    Vérification des éléments de contrôle

    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
    

    Insertion de données

    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
    

    Apparence générale

    Ç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