Accueil VBA5 plus loin avec Userforms Communiquer avec un port série (RS232)
auteur: Christian
Herbé
date: mai 2000
MAJ: juin 2001
Si vous maîtrisez les bases de VBA et que vous êtes pressé, allez voir le résumé à la fin de cette page !
vous pouvez être amené à créer des boîtes
de dialogue pour rendre vos programmes plus conviviaux ou pour faciliter
le dialogue avec l'utilisateur notamment dans le cas de choix multiples.
Les boîtes sont crées à partir d'un "USERFORM"
. Comme pour les modules, VBA ne les crée pas automatiquement; il
faut les insérer dans le projet:
La boîte à outils contient les éléments que
vous pouvez utiliser depuis le userform. Nous allons décrire brièvement
les principaux; il suffit de passer avec le curseur de la souris sur chaque
icône pour que le nom s'affiche.
Intitulés | Vous permettent d'afficher un texte (ex: un titre pour un objet) | |
Zone de texte | Peuvent recevoir un texte entré par l'utilisateur | |
Zone de liste modifiable | Permettent à l'utilisateur de choisir un ou plusieurs éléments dans une liste | |
Case à cocher | Pour faire un choix de type "oui ou non" | |
Cadre | Pour encadrer un ou plusieurs objets | |
Bouton de commande | On les utilise généralement pour lancer une procédure | |
Si vous souhaitez plus d'informations, cliquez sur l'outil et glissez
le sur le userform puis appuyez sur la touche F1 du clavier pour obtenir
de l'aide.
Vous pouvez ajouter d'autres objets à la boîte à
outils par un clic droit sur celle-ci et sélectionner "Contrôles
supplémentaires. Je vous conseille d'ajouter tout de suite l'objet
"RefEdit.Ctrl"; il permet à l'utilisateur de sélectionner
une plage de cellules dans la feuille Excel et au programme d'utiliser
ultérieurement les références de cette plage.
Pour qu'un programme contenant une boîte de dialogue personnalisée
fonctionne, il doit contenir un module et un userform. Si votre projet
ne contient pas encore de module, insérez le maintenant. Le rôle
du module peut être limité à lancer le userform mais
ce rôle est obligatoire dans la plupart des cas.
Nous allons commencer par écrire un programme très sommaire, le but étant de décrire l'enchaînement des opérations. On va donc se limiter à afficher un message personnalisé de bienvenue.
la commande "userform1.show" sert à afficher le userform; notre
module peut ne contenir que ce programme. Le reste du code sera écrit
dans le userform ou dans les objets.
Vous êtes dans le code lié au bouton; à chaque fois
que l'utilisateur cliquera sur le bouton, c'est ce code qui sera exécuté.
En haut à gauche, vous avez le nom de l'objet: "CommandButton1";
en haut à droite, le type d'événement géré
par cette sub. Remarquez aussi le nom de la sub.
Le but du programme étant d'afficher une message de bienvenue,
entrez le code suivant :
Private Sub CommandButton1_Click()
dim utilisateur, bonjour as string
utilisateur = environ("username")
bonjour = msgbox(prompt:="Bonjour M ou Mme ou
Mlle " & utilisateur, title:="Ma 1ere boite de dialogue")
'décommenter la ligne suivante pour
que le programme se termine après l'affichage du message
'unload me
End Sub
(pour afficher le nom d'utilisateur, il faut
que vous ayez entré un nom d'utilisateur au démarrage de
Windows)
Il manque quelque chose sur notre grille non ? Bien que l'on puisse
arrêter le programme en cliquant sur la croix en haut à droite
de la boite de dialogue, il serait plus élégant de mettre
un bouton pour quitter le programme:
Vous l'avez sans doute remarqué, vous pouvez placer les objets n'importe où sur la grille et vous pouvez les redimensionner à l'aide de la souris. Pour des réglages plus fins:
Tout dépend de ce que vous souhaitez.
Cas des messages d'attente pendant le déroulement d'un
programme assez long:
placez le code dans dans le userform en double-cliquant sur la grille.
Dans la liste des événements (en haut à droite) sélectionnez "Activate"; une nouvelle Sub est crée. Effacer les 2 lignes:
Private Sub UserForm_Click()
End Sub
et placez le code de votre programme entre les lignes:
Private Sub UserForm_Activate()
End Sub
(n'oubliez pas de mettre l'instruction "unload me" avant "End
sub" si vous voulez que le userform disparaisse de l'écran à
la fin du programme)
placer un objet "intitulé" sur le userform; cet intitulé
pourrait contenir le texte suivant:
"Veuillez patientez pendant l'exécution du programme!"
Chaque fois que l'instruction "Userform.show" sera exécutée,
votre grille s'affichera à l'écran
Cas où l'utilisateur peut faire différents choix
ou bien donner des renseignements au programme:
placez sur la grille les objets nécessaires (liste de choix,
case à cocher ...) plus un "CommandButton" que vous intitulez "Démarrer"
ou "Exécuter" ou comme vous voulez ! Dans ce cas de figure, l'essentiel
du code sera dans la Sub:
Private Sub CommandButton_Click()
End Sub
Pour fonctionner, le document doit contenir:
- un module avec le code suivant
sub bonjour_toi()
userform1.show
end sub
(si vous définissez une variable dans ce module et que souhaitez
l'utiliser depuis une Sub du userform, n'oubliez pas de la rendre "PUBLIC"
!)
- un userform nommé "userform1" ressemblant à ceci:
Le code du bouton "Quitter" doit contenir ceci (double cliquer le bouton pour entrer le code):
Private Sub CommandButton2_Click()
unload me
End Sub
Le code du bouton "Démarrer" doit contenir ceci:
Private Sub CommandButton1_Click()
dim utilisateur, bonjour as string
utilisateur = environ("username")
bonjour = msgbox(prompt:="Bonjour M ou Mme ou
Mlle " & utilisateur, title:="Ma 1ere boite de dialogue")
End Sub
Pour qu'un objet réagisse comme on le souhaite, il suffit de le double cliquer et d' y insérer le code nécessaire.