formateur informatique

Guider la saisie utilisateur sur un formulaire Excel

Accueil  >  Bureautique  >  Excel  >  Excel VBA  >  Guider la saisie utilisateur sur un formulaire Excel
Livres à télécharger


Pour partager cette vidéo sur les réseaux sociaux, voici son url absolue :

Pour l'intégrer sur votre site internet ou blog, vous pouvez l'embarquer :

Sujets et formations similaires :


Guider la saisie de l'utilisateur

Nous proposons ici de poursuivre le développement de l'application d'évaluation des candidats sous forme de QCM. Ce volet est le deuxième des six étapes à franchir. Dans la formation précédente, nous avons construit quelques légères animations. Leur objectif est d'attirer l'attention du candidat sur les informations requises avant de débuter.

Contrôles et guides à la saisie sur formulaire inscription VBA Excel



Avant de développer le formulaire d'identification interrogeant la base de données Access, encore faut-il qu'un candidat soit en mesure de s'inscrire. Nous allons donc focaliser notre attention sur le UserForm Inscription, le temps de deux petites formations. La première, celle-ci, consiste à guider le candidat dans le renseignement des données requises. Les zones de texte proposent des indications explicites qui doivent s'effacer lorsque l'utilisateur les active. Mais elles doivent aussitôt réapparaître s'il quitte la zone sans l'avoir renseignée.

Source et présentation du concept
Nous devons débuter la conception depuis un classeur source existant, restituant les travaux précédents sur les animations. Le formulaire d'identification s'affiche instantanément. Les petites animations se déclenchent pour sensibiliser le candidat sur les zones à renseigner. Sous la zone de texte de l'identifiant, vous notez la présence d'un lien : Jamais inscrit ?. Celui-ci s'est rendu disponible une fois les animations terminées. Mais à ce stade, si vous cliquez sur ce lien, rien ne se produit. Il doit permettre de basculer sur le formulaire d'inscription.

Basculer d'un formulaire à un autre
Un clic sur le lien doit permettre d'afficher le formulaire d'inscription aux dépens du formulaire d'identification. Inversement, un clic sur le bouton Annuler doit permettre d'afficher le formulaire d'identification aux dépens du formulaire d'inscription. Et nous le verrons dans la prochaine formation, une inscription validée doit réactiver le formulaire d'identification avec l'identifiant pré-saisi. Il est très simple de transmettre des données entre formulaires grâce au code VBA.
  • Fermer le formulaire en cliquant sur la croix de sa fenêtre,
  • Basculer dans l'éditeur de code VBA Excel avec le raccourci clavier ALT + F11,
  • Dans l'explorateur de projet, déployer l'affichage du dossier feuille,
  • Puis, double cliquer sur l'élément Connexion pour afficher son formulaire en conception,
  • Double cliquer sur le contrôle Label Jamais inscrit ?,
De la sorte, nous générons sa procédure évènementielle associée :

Private Sub Lien_Click()

End Sub


Lien est le nom d'objet de ce contrôle Label. Click est son évènement associé. Tout code placé entre ces bornes se déclenche donc au clic sur le lien.
  • Entre les bornes de cette procédure évènementielle, ajouter les instructions suivantes :
Connexion.Hide
Inscription.Show


Deux lignes suffisent pour réaliser la bascule. Les formulaires sont respectivement nommés Connexion et Inscription. La méthode Hide permet de masquer le formulaire sur lequel elle est appliquée. Inversement, la méthode Show permet d'afficher le formulaire désigné.
  • Enregistrer les modifications (CTRL + S) et revenir sur le formulaire connexion en conception,
  • Enfoncer la touche F5 du clavier pour l'exécuter,
  • Une fois les animations terminées, cliquer sur le lien Jamais inscrit, devenu actif,
Basculer affichage sur un autre formulaire Excel au clic par le code VBA

Comme vous le constatez, le formulaire Inscription apparaît en effet. Dans le même temps, le formulaire Connexion disparaît. Nous devons permettre la bascule inverse grâce au bouton Annuler. Le code est identique. Il s'agit simplement d'inverser les méthodes.
  • Fermer le formulaire en cliquant sur la croix de sa fenêtre,
  • Dans l'explorateur de projet, double cliquer sur le formulaire Inscription pour l'afficher,
  • Double cliquer alors sur le bouton Annuler pour créer sa procédure évènementielle :
Private Sub Annuler_Click()

End Sub
  • Entre les bornes de la procédure, ajouter les deux instructions VBA suivantes :
Inscription.Hide
Connexion.Show


Cette fois nous masquons le formulaire Inscription pour revenir sur le formulaire Connexion que nous affichons. Vous le constatez si vous exécutez le projet.



Guider et contrôler la saisie
Nous devons désormais gérer les évènements consistant à guider l'utilisateur dans le renseignement des informations requises sur le formulaire d'inscription.
  • Dans l'éditeur VBA Excel, afficher le formulaire Inscription en conception,
  • Double cliquer sur la première zone de texte, celle portant l'information : Votre nom,
Nous générons ainsi la procédure évènementielle Nom_Change :

Private Sub Nom_Change()

End Sub


Nom est effectivement le nom attribué à cette zone de texte. Change est l'un de ses évènements associés. Il déclenche un code VBA lorsqu'une modification de saisie est détectée. Ce n'est pas la procédure qui nous intéresse. Nous avons besoin d'un événement décelant que l'utilisateur active cette zone et d'un autre indiquant qu'il la quitte. Dans le premier cas, l'indication par défaut doit disparaître pour laisser place à la saisie. Dans le second, elle doit réapparaître si l'utilisateur a quitté la zone sans la renseigner. Ces deux évènements attachés aux contrôles TextBox se nomment respectivement Enter et Exit.
  • En haut de la feuille de code, déployer l'affichage de la seconde liste déroulante,
Comme l'illustre la capture ci-dessous, elle énumère tous les évènements disponibles pour le contrôle sélectionné. La première liste déroulante quant à elle, recense tous les contrôles présents sur le formulaire actif. Nous allons bientôt l'utiliser.
  • A l'aide de cette deuxième liste, choisir l'évènement Enter,
Nous créons ainsi la procédure évènementielle gérant l'activation de la zone de texte :

Private Sub Nom_Enter()

End Sub
  • Toujours avec la seconde liste, choisir maintenant l'évènement Exit,
Evènements attachés aux contrôles de formulaire Excel pour gérer la saisie par la code VBA

Nous créons ainsi la procédure évènementielle capable de détecter lorsque l'utilisateur quitte la zone d'influence du contrôle TextBox.

Private Sub Nom_Exit(ByVal Cancel As MSForms.ReturnBoolean)

End Sub
  • A l'aide de la première liste déroulante, choisir cette fois le contrôle Prenom,
Nous créons sa procédure évènementielle qui lui est attachée par défaut : Prenom_change. Comme précédemment, ce n'est pas celle qui nous intéresse.
  • Avec la seconde liste, choisir l'évènement Enter puis Exit pour créer ses deux procédures,
  • Réitérer ce processus pour les contrôles vid et mel afin que chacun dispose des deux évènements permettant de contrôler la saisie de l'utilisateur,
  • A l'issue, supprimer toutes les procédures associées à l'évènement Change,
Vous devez disposez de huit procédures évènementielles supplémentaires au total :

Private Sub mel_Enter()

End Sub

Private Sub mel_Exit(ByVal Cancel As MSForms.ReturnBoolean)

End Sub

Private Sub Nom_Enter()

End Sub

Private Sub Nom_Exit(ByVal Cancel As MSForms.ReturnBoolean)

End Sub

Private Sub Prenom_Enter()

End Sub

Private Sub Prenom_Exit(ByVal Cancel As MSForms.ReturnBoolean)

End Sub

Private Sub vid_Enter()

End Sub

Private Sub vid_Exit(ByVal Cancel As MSForms.ReturnBoolean)

End Sub


Nous devons désormais exploiter ces gestionnaires d'événements pour intercepter les actions de l'utilisateur. Lorsqu'il active une zone de saisie, l'information proposée par défaut doit disparaître.
  • Entre les bornes de la procédure Nom_Enter, ajouter le code VBA suivant :
If(Nom.Text = 'Votre nom') Then Nom.Text = ''

Le raisonnement est simple. Il consiste à réaliser une vérification grâce à l'instruction conditionnelle If. Si le contenu de la zone de texte (Nom.Text) est toujours l'indication par défaut (= 'Votre nom'), alors nous le supprimons (Then Nom.Text = ''). Ainsi, le candidat peut directement débuter sa saisie. Rappelez-vous que cette fantaisie d'écriture sur une seule ligne est permise avec l'instruction If, lorsqu'une seule action est à engager.
  • Selon le même raisonnement, ajouter l'instruction VBA suivante, entre les bornes de la procédure Prenom_Enter,
If(Prenom.Text = 'Votre prénom') Then Prenom.Text = ''
  • Entre les bornes de la procédure mel_Enter, ajouter la ligne suivante :
If(mel.Text = 'Votre adresse Mail') Then mel.Text = ''

La gestion de l'activation de la zone de texte pour l'identifiant présente une particularité. Le nom du contrôle est vid. Le raisonnement initial est conservé. La zone doit être vidée sur activation lorsqu'il s'agit de l'information proposée par défaut. Mais autant la saisie de l'identifiant doit être encryptée, autant l'indication par défaut doit apparaître en toutes lettres. C'est la propriété PasswordChar d'un contrôle TextBox qui permet d'encrypter lorsqu'elle est affectée à un caractère spécial. Si son affectation se résume à une chaîne vide, la saisie apparaît normalement.
  • Entre les bornes de la procédure vid_Enter, ajouter les instructions VBA suivantes :
If (vid.Text = 'Votre identifiant de connexion') Then
vid.Text = ''
vid.PasswordChar = '*'
End If


En affectant la propriété PasswordChar sur le symbole de l'étoile (*), nous encryptons la saisie de l'identifiant du candidat.

Il s'agit maintenant de gérer les évènements détectant que les zones de saisies ont été quittées. Elles ne peuvent rester vides. Dans ce cas, l'indication par défaut doit être restituée. Il s'agit donc du test et de l'affectation inverses. Dans le même temps, nous proposons d'appliquer une couleur de fond consistant à alerter l'utilisateur sur l'erreur. Mais nous devons penser à rétablir la couleur d'origine lorsque la correction est apportée.

Souvenez-vous, nous l'avons exploitée dans la formation précédente. C'est la propriété BackColor d'un contrôle TextBox qui permet de définir sa couleur de fond. Elle peut être affectée grâce à la fonction VBA RGB demandant en paramètres les trois composantes de couleurs : Rouge, Vert et Bleu.
  • Entre les bornes de la procédure Nom_Exit, ajouter l'instruction conditionnelle suivante :
If (Nom.Text = '') Then
Nom.Text = 'Votre nom'
Nom.BackColor = RGB(255, 255, 153)
Else
Nom.BackColor = RGB(248, 248, 248)
End If


Si le candidat quitte la zone de saisie sans l'avoir renseignée (If (Nom.Text = '') Then), l'indication par défaut est rétablie (Nom.Text = 'Votre nom'). Mais ce n'est pas tout. Nous l'alertons visuellement en appliquant une couleur de fond jaune au contrôle TextBox (Nom.BackColor = RGB(255, 255, 153)). Dans le cas contraire, la saisie est considérée comme valide. Nous rétablissons donc la couleur d'origine (Nom.BackColor = RGB(248,248, 248)). Le raisonnement est strictement identique pour la zone Prenom.
  • Entre les bornes de la procédure Prenom_Exit, ajouter l'instruction conditionnelle suivante :
If (Prenom.Text = '') Then
Prenom.Text = 'Votre prénom'
Prenom.BackColor = RGB(255, 255, 153)
Else
Prenom.BackColor = RGB(248, 248, 248)
End If


Concernant l'identifiant, nous ne souhaitons pas autoriser les codes dont la longueur est inférieure à quatre caractères. Le critère à vérifier est donc double.
  • Entre les bornes de la procédure vid_Exit, ajouter l'instruction conditionnelle suivante :
If (vid.Text = '' Or Len(vid.Text)<4) Then
vid.Text = 'Votre identifiant de connexion'
vid.PasswordChar = ''
vid.BackColor = RGB(255, 255, 153)
Else
vid.BackColor = RGB(248, 248, 248)
End If


C'est la fonction VBA Len qui indique le nombre de caractères contenus dans la chaîne qui lui est passée en paramètre, soit vid.Text. Il suffit que la longueur ne soit pas suffisante (<4) ou que (Or) la zone soit laissée vide pour considérer la saisie comme incorrecte. Dans ce cas, nous rétablissons l'indication par défaut et supprimons le caractère d'encodage (vid.PasswordChar = ''). Puis, nous alertons visuellement l'utilisateur (vid.BackColor = RGB(255, 255, 153)). Dans le cas contraire (Else), nous rendons les couleurs d'origine au contrôle (vid.BackColor= RGB(248, 248, 248)) pour confirmer que la saisie est considérée comme valide.

Enfin, concernant le mail, le contrôle doit être plus stricte. Non seulement il ne doit pas être vide mais il doit aussi comporter un point (.) ainsi que le symbole de l'arobase (@). C'est alors que la saisie de l'adresse pourra être considérée comme conforme. Il s'agit donc de vérifier trois conditions à la fois. Il suffit que l'une d'entre elles soit erronée (Or) pour que l'adresse ne soit pas validée.
  • Entre les bornes de la procédure mel_Exit, ajouter l'instruction conditionnelle suivante :
If (mel.Text = '' Or InStr(1,mel.Text, '.') = 0 Or InStr(1, mel.Text, '@') = 0) Then
mel.Text = 'Votre adresse Mail'
mel.BackColor = RGB(255, 255, 153)
Else
mel.BackColor = RGB(248, 248, 248)
End If


Nous avons déjà exploité la fonction VBA InStr à maintes reprises. Elle permet de retourner la position d'une occurrence cherchée (Le point ou l'arobase) dans une chaîne de texte (mel.Text), en commençant la recherche à partir d'une certaine position, depuis le début ici (1). Si cette fonction retourne la valeur 0, cela signifie que le caractère n'a pas été trouvé. Dans ce cas, l'indication par défaut doit être restituée (mel.Text = 'Votre adresse Mail'). De plus, le candidat doit en être alerté (mel.BackColor = RGB(255, 255, 153)). En revanche (Else), si la saisie n'est pas vide et qu'elle comporte bien un point et l'arobase, alors la saisie est acceptée. De fait, la couleur d'origine est restituée (mel.BackColor = RGB(248, 248, 248)). Il ne nous reste plus qu'à tester si ces aides à la saisie sont fonctionnelles.
  • Enregistrer les modifications et afficher le formulaire Connexion,
  • L'exécuter en enfonçant la touche F5 du clavier,
  • Après les animations, cliquer sur le lien Jamais inscrit ?,
  • Cliquer tour à tour dans les zones de texte sans ne rien saisir,
Contrôles de saisie et alertes dans formulaire inscription Excel par code VBA



Comme vous le constatez, dès qu'une zone de texte est abandonnée (Exit), l'information par défaut est restituée et le contrôle s'illumine. Le message est donc on ne peut plus explicite pour le candidat.

Si vous renseignez correctement les champs, l'alerte de couleur disparaît, confirmant que la saisie est jugée comme satisfaisante. En revanche, si l'identifiant n'atteint pas 4 caractères, l'alerte se déclenche et le message d'origine est reformé. Enfin, si l'adresse mail ne comporte pas au moins un point et l'arobase, elle est refusée de la même façon. Nous devrions d'ailleurs renforcer la vérification sur le nombre de caractères. Il ne s'agit pas d'accepter ce genre de saisie par exemple : .@. Mais ici, nous donnons les grandes lignes du développement pour que l'application puisse être améliorée à souhait.

Contrôle et validation de saisie au cours de la frappe sur formulaire Excel par code VBA

Lorsque toutes les informations sont considérées comme correctes, le candidat constate qu'il a rempli le formulaire d'inscription avec succès. Il ne lui reste plus qu'à valider en cliquant sur le bouton dédié. Il s'agit du développement que nous réaliserons dans la prochaine formation. Nous devrons être en mesure d'établir la connexion avec la base de données Access afin d'y ajouter les nouvelles informations. Dès lors, le nouveau candidat archivé sera reconnu et pourra s'identifier pour débuter un test.

Formulaire inscription en Visual Basic Excel

L'intégralité du code VBA contrôlant la saisie en temps réel sur le formulaire d'inscription est donnée ci-après :

Private Sub Annuler_Click()
Inscription.Hide
Connexion.Show
End Sub

Private Sub mel_Enter()
If (mel.Text = 'Votre adresse Mail') Then mel.Text =''
End Sub

Private Sub mel_Exit(ByVal Cancel As MSForms.ReturnBoolean)
If (mel.Text = '' Or InStr(1, mel.Text, '.') = 0 Or InStr(1, mel.Text, '@') = 0) Then
mel.Text = 'Votre adresse Mail'
mel.BackColor = RGB(255, 255, 153)
Else
mel.BackColor = RGB(248, 248, 248)
End If
End Sub

Private Sub Nom_Enter()
If (Nom.Text = 'Votre nom') Then Nom.Text = ''
End Sub

Private Sub Nom_Exit(ByVal Cancel As MSForms.ReturnBoolean)
If (Nom.Text = '') Then
Nom.Text = 'Votre nom'
Nom.BackColor = RGB(255, 255, 153)
Else
Nom.BackColor = RGB(248, 248, 248)
End If
End Sub

Private Sub Prenom_Enter()
If (Prenom.Text = 'Votre prénom') Then Prenom.Text =''
End Sub

Private Sub Prenom_Exit(ByVal Cancel As MSForms.ReturnBoolean)
If (Prenom.Text = '') Then
Prenom.Text = 'Votre prénom'
Prenom.BackColor = RGB(255, 255, 153)
Else
Prenom.BackColor = RGB(248, 248, 248)
End If
End Sub

Private Sub vid_Enter()
If (vid.Text = 'Votre identifiant de connexion') Then
vid.Text = ''
vid.PasswordChar = '*'
End If
End Sub

Private Sub vid_Exit(ByVal Cancel As MSForms.ReturnBoolean)
If (vid.Text = '' Or Len(vid.Text) < 4) Then
vid.Text = 'Votre identifiant de connexion'
vid.PasswordChar = ''
vid.BackColor = RGB(255, 255, 153)
Else
vid.BackColor = RGB(248, 248, 248)
End If
End Sub


 
Sur Facebook
Sur G+
Sur Youtube
Les livres
Contact
Mentions légales



Partager la formation
Partager sur Facebook
Partager sur Google+
Partager sur Twitter
Partager sur LinkedIn