Cours VBA : les contrôles (exercice) Pour mettre en pratique l'utilisation des

Cours VBA : les contrôles (exercice) 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 ... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 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 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) Achetez les autos d'USA 200,000 véhicules à choisir Livraison en grands ports Africains auctionexport.com 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 Le fichier : controles_exercice2.xls uploads/Geographie/ cours-vba-19-les-controles-exercice.pdf

  • 22
  • 0
  • 0
Afficher les détails des licences
Licence et utilisation
Gratuit pour un usage personnel Attribution requise
Partager