Zone de texte (TextBox) dans un formulaire personnalié Userform, Excel VBA

Le contrôle zone de texte ou TextBox , est principalement utilisé pour saisir du texte par l’utilisateur, qui est ensuite utilisé dans le programme, ou pour y sortir les résultats des calculs du programme.

Le texte saisi dans la zone de texte du code peut être converti en nombres ou en formules. L’événement principal associé à la zone de texte est l’événement Change. Le tableau 1 répertorie les principales propriétés de la zone de texte.
Tableau 1: Propriétés de base de la zone de texte

Propriété La description
Name Définie le nom de la zone de texte
Text Renvoie le texte contenu dans la zone de texte
Multiline Paramètre booléen qui définit la zone de texte sur une entrée de texte multiligne
ScrollBars Définit le mode d’affichage du champ des barres de défilement.
SelLenght, SelStart, SelText Ces propriétés caractérisent le fragment de texte sélectionné dans la zone de texte.
MaxLength Définit le nombre maximum de caractères autorisés dans la zone de texte.
PasswordChar Définit le caractère affiché lors de la saisie d’un mot de passe.

1 Additionner deux nombres
À titre d’exemple avec les zones de texte, créons un projet dans lequel la somme des deux nombres saisis dans deux zones de texte est trouvée, et le résultat est affiché dans la troisième zone de texte, comme le montre la figure suivante.

Figure1:Ajouter deux nombres 

Donc, créez un formulaire sur lequel placer trois Intitulé (Label), trois zones de texte et deux boutons de commande et, à l’aide de la fenêtre Propriétés, définissez leurs valeurs de propriété, comme indiqué dans le tableau 2.
Tableau 2. Valeurs de propriété définies dans la fenêtre Propriétés

Objet Propriété Valeur
UserForm Caption c = a + b
Intitulé ou Label Caption A
Zone de texte ou TextBox Name txtA
Intitulé ou Label Caption B
Zone de texte ou TextBox Name txtB
Intitulé ou Label Caption C
Zone de texte ou TextBox Name txtC               
Bouton de commande ou CommandButon Name cmdOK
Caption OK
Bouton de commande ou CommandButon Name cmdANNULER
Caption ANNULER

Dans le module formulaire, saisissez le code suivant :

Private Sub cmdOK_Click()

Dim a As Double, b As Double, c As Double

   a = txtA.Text

   b = txtB.Text

   c = a + b

   txtC.Text = c

End Sub

Private Sub cmdANNULER_Click()

   Unload Me

End Sub

Commentaires :

■ Les deux nombres sont entrés dans les zones de texte a et b et la somme est calculer dans la zone de texte c lorsque vous cliquez sur OK.

■ La syntaxe Unload Me permet de fermer la fenêtre en appuyant sur le bouton ANNULER.

2 Bouton de raccourci clavier
La propriété Accelerator d’un contrôle désigne une touche alphabétique ou numérique qui, lorsqu’elle est enfoncée, simultanément avec la touche <Alt>, exécute la gestion des événements en cliquant sur le contrôle. Dans ce cas, la lettre ou le nombre de cette clé doit être inclus dans la chaîne qui spécifie la valeur de la propriété Caption du contrôle, et cette lettre ou ce nombre sera affiché souligné. Par exemple, si vous ajoutez la procédure d’initialisation de formulaire suivante au code de la section précédente, les boutons OK et ANNULER sont équivalents aux combinaisons de touches <Alt> + <O> et <Alt> + <A>.

Private Sub UserForm_Initialize()

    cmdOK.Accelerator = "O"

    cmdANNULER.Accelerator = "A"

End Sub

3 Touches <Entrée> et <Echap>
La propriété Default, lorsqu’elle est définie sur True, désigne le bouton pour lequel l’événement Click est déclenché si l’utilisateur appuie sur la touche <Entrée>. La propriété Cancel, lorsqu’elle est définie sur True, désigne le bouton pour lequel l’événement Click est déclenché si l’utilisateur appuie sur la touche <Echap>. Ainsi, les touches <Entrée> et <Echap> se voient attribuer les fonctions des boutons OK et ANNULER, c’est-à-dire qu’une pression sur la touche <Entrée> trouvera la somme requise et les touches <Échap> fermeront la fenêtre.

Private Sub UserForm_Initialize()

    cmdOK.Default = True

    cmdCancel.Cancel = True

End Sub

4 Somme avec résultat de verrouillage pour l’utilisateur
La propriété Enabled, lorsqu’elle est définie sur False, verrouille complètement le contrôle pour l’utilisateur, de sorte que le contrôle ne peut même pas recevoir le focus. La propriété Lock, lorsqu’elle est définie sur True, empêche l’utilisateur d’apporter des modifications dans la zone de texte. Le code suivant bloque complètement la zone de texte c pour l’utilisateur :

Private Sub UserForm_Initialize()
    txtC.Enabled = False
End Sub

5 Comment empêcher un bouton de recevoir le focus lorsque je clique dessus?
Lorsque le bouton est enfoncé, il reçoit le focus, et par conséquent, pour ressaisir la valeur dans le champ de saisie, il doit d’abord recevoir ce focus. Vous pouvez faire en sorte que lorsque l’utilisateur clique sur le bouton, il ne reçoive pas le focus, c’est-à-dire que le focus reste sur le même élément qu’il avait avant le clic. La propriété TakeFocusOnClick, lorsqu’elle est définie sur False, bloque le transfert de focus.

Private Sub UserForm_Initialize()

    cmdOK.TakeFocusOnClick = False

End Sub

6 Déplacer le focus entre les champs en appuyant sur <Entrée>

Pour déplacer le focus entre les champs lorsque la touche <Entrée> est enfoncée, l’événement KeyDown doit être géré dans les zones de texte afin d’identifier la touche enfoncée, et s’il s’agit de la touche <Entrée>, la méthode SetFocus doit définir le focus sur le champ de saisie requis. Dans l’exemple initial, appuyer sur la touche <Entrée> pendant que le champ a a le focus qui se déplace sur le champ b. Lorsque vous appuyez sur la touche <Entrée> lorsque le champ b a le focus, le focus se déplace vers le champ a et, en outre, la procédure de gestion de l’événement Click du bouton OK est exécutée, c’est-à-dire que la somme requis est trouvé. Le champ c est verrouillé sur l’utilisateur, mais il peut recevoir le focus.

Private Sub txtA_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, _

    ByVal Shift As Integer)

        If KeyCode = vbKeyReturn Then

            txtB.SetFocus

        End If

End Sub

Private Sub txtB_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, _

ByVal Shift As Integer)

    If KeyCode = vbKeyReturn Then

        cmdOK_Click

        txtA.SetFocus

    End If

End Sub

Private Sub UserForm_Initialize()

    txtC.Locked = True

End Sub

Commentaires

■ Les évenements KeyDown et KeyUp se produisent successivement quand vous appuyez puis relâchez une touche. L’événement KeyDown se produit quand vous appuyez sur une touche. L’événement KeyUp se produit quand vous relâchez une touche. Les Syntaxes sont :

– Private Sub Object_KeyDown (ByVal keycode As MSForms.ReturnInteger, ByVal Shift As fmShiftState)
– Private Sub Object_KeyUp (ByVal keycode As MSForms.ReturnInteger, ByVal Shift As fmShiftState)

La syntaxe des événements KeyDown et KeyUp comprend les éléments suivants :

Élément Description
Object Obligatoire. Nom d’un objet valide.
KeyCode Obligatoire. Entier représentant le code de la touche enfoncée ou relâchée.
Shift Obligatoire. État des touches Maj, Ctrl et Alt.

Les paramètres de Shift sont représentés dans le tableau 4 suivants :

Tableau 4: Les paramètres de Shift

Constante Valeur Description
fmShiftMask 1 La touche Maj a été enfoncée.
fmCtrlMask 2 La touche Ctrl a été enfoncée.
fmAltMask 4 La touche Alt a été enfoncée.

■ Vous pouvez utiliser les constantes Keycode suivantes n’importe où dans votre code à la place des valeurs réelles.

Constante Valeur Description
VbKeyLButton 0x1 Bouton gauche de la souris
VbKeyRButton 0x2 Bouton droit de la souris
VbKeyCancel 0x3 Touche Annuler
VbKeyMButton 0x4 Bouton central de la souris
VbKeyBack 0x8 Touche Retour arrière
VbKeyTab 0x9 Touche de tabulation
VbKeyClear 0XC Touche Effacer
VbKeyReturn 0XD Touche Entrée
VbKeyShift 0x10 Touche Maj
VbKeyControl 0x11 Touche Ctrl
VbKeyMenu 0x12 Touche Menu
VbKeyPause 0x13 Touche Pause
VbKeyCapital 0x14 Touche Verr. Maj
VbKeyEscape 0x1B Touche Échap
VbKeySpace 0x20 Touche Espace
VbKeyPageUp 0x21 Touche Pg. Préc
vbKeyPageDown 0x22 Touche Pg. Suiv
VbKeyEnd 0x23 Touche Fin
VbKeyHome 0x24 Touche Début
VbKeyLeft 0x25 Touche Gauche
VbKeyUp 0x26 Touche Haut
VbKeyRight 0x27 Touche Droite
VbKeyDown 0x28 Touche Bas
VbKeySelect 0x29 Touche de sélection
VbKeyPrint 0x2A Touche Impr. Écran
VbKeyExecute 0x2B Touche d’exécution
VbKeySnapshot 0x2C Touche Instantané
VbKeyInsert 0x2D Touche Inser
VbKeyDelete 0x2E Touche Suppr
VbKeyHelp 0x2F Touche Aide
VbKeyNumlock 0x90 Touche Verr. Num

■ La méthode SetFocus déplace le focus vers la fenêtre spécifiée. Sa syntaxe est objet.SetFocus.

7 Info-bulle
Les contrôles peuvent être définis sur une info-bulle à l’aide de la propriété ControlTipText, qui apparaît sous la forme d’une zone avec un texte explicatif affiché en regard du contrôle sur lequel pointe la souris. Dans l’exemple suivant, les info-bulles sont attribuées à trois zone de texte et à deux boutons.

Private Sub cmdOK_Click()

   Dim a As Double, b As Double, c As Double

   a = txtA.Text

   b = txtB.Text

   c = a + b

   txtC.Text = c

End Sub

Private Sub cmdANNULER_Click()

   Unload Me

End Sub

Private Sub UserForm_Initialize()

   txtA.ControlTipText = "Valeur de a"

   txtB.ControlTipText = "Valeur de b"

   txtC.ControlTipText = "Valeur de c"

   cmdOK.ControlTipText = "Somme de a + b"

   cmdANNULER.ControlTipText = "Annuler l’opération"

End Sub

Figure: 3.Info-bulle

S’abonner
Notifier de
0 Commentaires
Inline Feedbacks
Voir tous les commentaires

Initiation à Excel

Fonctions Excel

Excel VBA

Macros VBA Utiles

Plus d'outils

Sur Facebook

Sur YouTube

0
Nous aimerions avoir votre avis, veuillez laisser un commentaire.x