fr fr fr fr fr fr fr fr fr fr fr fr fr fr fr en fr fr fr fr fr fr fr fr fr fr cs fr fr fr fr fr fr fr fr fr fr fr fr fr fr en en fr fr fr fr fr en fr nl fr fr fr fr fr fr fr fr en fr en fr fr fr fr fr fr fr fr fr fr fr fr en fr fr fr fr fr fr fr fr en fr fr fr fr fr fr cs fr fr en fr fr fr fr fr fr fr fr fr fr fr fr fr fr fr fr fr fr fr fr fr fr fr fr fr fr fr fr fr fr fr es fr es fr es fr lmo fr fr fr fr en fr fr fr en fr en fr en fr fr en en fr en fr fr en en nl fr
Les contrôles sont les éléments (boutons, intitulés, zone de texte, cases à cocher, etc.) qui peuvent être insérés sur un UserForm (ou sur une feuille Excel).
Les contrôles ont également toute une panoplie de propriétés et d'événements qui diffèrent d'un contrôle à l'autre.
Pour commencer, ajoutez un UserForm et insérez les 3 contrôles suivants : un intitulé Label, une zone de texte TextBox et un bouton CommandButton :
Modifiez les propriétés de l'UserForm et des contrôles (dont les propriétés (Name) pour le nom, Caption pour le texte et Font pour la taille du texte) pour obtenir ceci :
Pour positionner les contrôles de manière plus précise qu'avec un déplacement manuel, modifiez les propriétés Left et Top du contrôle. De même, pour redimensionner les contrôles de manière plus précise qu'avec un redimensionnement manuel, modifiez les propriétés Width et Height.
Pour le moment, lorsque l'on entre un nombre et que l'on clique sur le bouton, il ne se passe rien.
Pour y remédier, nous allons commencer par ajouter un événement pour entrer la valeur de la zone de texte dans la cellule A1 et fermer l'UserForm.
En double-cliquant sur le bouton, un événement par défaut est ajouté dans le code de l'UserForm. Dans ce cas, il s'agit de l'événement souhaité, mais en cas de besoin, vous pouvez sélectionner un autre événement dans la liste :
L'événement Click est déclenché au clic sur le bouton :
Private Sub CommandButton_valider_Click() 'La cellule A1 (de la feuille active) obtient la valeur de la zone de texte nommée "TextBox_nombre" Range("A1") = TextBox_nombre.Value 'Fermeture (Unload) de l'UserForm (Me) Unload Me End Sub
La valeur est alors entrée dans la cellule A1 avant de fermer l'UserForm.
Nous allons maintenant ajouter un événement qui s'active au changement de valeur de la zone de texte et qui va modifier la couleur de fond si la valeur n'est pas numérique :
Private Sub TextBox_nombre_Change() If IsNumeric(TextBox_nombre.Value) Then 'Si valeur numérique TextBox_nombre.BackColor = RGB(255, 255, 255) 'Blanc Else 'Sinon TextBox_nombre.BackColor = RGB(247, 205, 201) 'Rouge clair End If End Sub
L'événement est déclenché à chaque entrée ou suppression de caractère dans la zone de texte.
Il nous reste encore à empêcher la validation du formulaire si la valeur n'est pas numérique en ajoutant une instruction If :
Private Sub CommandButton_valider_Click() 'Si valeur numérique If IsNumeric(TextBox_nombre.Value) Then Range("A1") = TextBox_nombre.Value Unload Me End If End Sub
Le fichier : userform1.xlsm
Les cases à cocher (CheckBox)
Voici un exemple d'utilisation de cases à cocher dont l'objectif est de modifier les valeurs en colonne B en fonction des cases cochées dans l'UserForm :
L'événement Click du bouton enregistre ici les choix de l'utilisateur et ferme ensuite l'UserForm :
Private Sub CommandButton_valider_Click() 'Numéro 1 If CheckBox1.Value = True Then 'Si coché Range("B2") = "Oui" Else 'Si décoché Range("B2") = "Non" End If 'Numéro 2 If CheckBox2.Value = True Then 'Si coché Range("B3") = "Oui" Else 'Si décoché Range("B3") = "Non" End If 'Numéro 3 If CheckBox3.Value = True Then 'Si coché Range("B4") = "Oui" Else 'Si décoché Range("B4") = "Non" End If 'Fermeture Unload Me End Sub
Rappelez-vous qu'une condition cherche toujours à savoir si le résultat du test est True :
If CheckBox1.Value = True Then 'Si coché
Il n'est donc pas utile d'ajouter = True :
If CheckBox1.Value Then 'Si coché
Pour simplifier encore davantage l'écriture, la propriété Value est la propriété par défaut de la plupart des contrôles, il n'est donc pas nécessaire de l'ajouter (comme nous l'avions vu précédemment avec la propriété Value des cellules) :
If CheckBox1.Value Then 'Si coché
L'ajout de .Value est donc facultatif :
If CheckBox1 Then 'Si coché
Suite à ces simplifications, le code ressemble maintenant à ceci :
Private Sub CommandButton_valider_Click() 'Numéro 1 If CheckBox1 Then 'Si coché Range("B2") = "Oui" Else 'Si décoché Range("B2") = "Non" End If 'Numéro 2 If CheckBox2 Then 'Si coché Range("B3") = "Oui" Else 'Si décoché Range("B3") = "Non" End If 'Numéro 3 If CheckBox3 Then 'Si coché Range("B4") = "Oui" Else 'Si décoché Range("B4") = "Non" End If 'Fermeture Unload Me End Sub
Maintenant, imaginez que vous n'ayez pas 3 mais 30 cases à cocher ...
Dans ce cas, l'utilisation d'une boucle est plus que bienvenue :
Private Sub CommandButton_valider_Click() Dim i As Integer 'Boucle des cases à cocher For i = 1 To 3 If Controls("CheckBox" & i) Then 'Si coché Range("B" & i + 1) = "Oui" Else 'Si décoché Range("B" & i + 1) = "Non" End If Next 'Fermeture Unload Me End Sub
Controls("CheckBox1") est l'équivalent du contrôle CheckBox1 et permet d'accéder à un contrôle en fonction de son nom, ce qui peut être très pratique notamment dans une boucle.
Dans cet exemple, les cases sont toutes décochées à l'ouverture de l'UserForm.
Pour cocher les cases dont la valeur de la cellule correspondante est Oui au lancement de l'UserForm, ajoutez l'événement UserForm_Initialize et les tests suivants :
Private Sub UserForm_Initialize() If Range("A2") = "Oui" Then CheckBox1 = True End If If Range("B2") = "Oui" Then CheckBox2 = True End If If Range("C2") = "Oui" Then CheckBox3 = True End If End Sub
Pour simplifier ce code, vous avez la possibilité d'écrire l'instruction If sur une seule ligne et sans End If lorsqu'il n'y a qu'une seule action à effectuer :
Private Sub UserForm_Initialize() If Range("B2") = "Oui" Then CheckBox1 = True If Range("B3") = "Oui" Then CheckBox2 = True If Range("B4") = "Oui" Then CheckBox3 = True End Sub
L'utilisation d'une boucle est également possible :
Private Sub UserForm_Initialize() Dim i As Integer For i = 1 To 3 If Range("B" & i + 1) = "Oui" Then Controls("CheckBox" & i) = True Next End Sub