LeCompagnon.info en reconstruction

VBA pour Excel

VBA pour Excel

VBA pour Excel - Dialogues et formulaires

Sur cette page

Dialogues, formulaires et alternatives
L'éditeur
Les contrôles
Ouvrir et fermer un formulaire
Exemple 1: Écran d'accueil
Exemple 2: Sélectionner un dossier
Exemple 3: Barre de progression
Exemple 4: Saisir et valider des données

Dialogues, formulaires et alternatives

Les programmes utilisent les dialogues et les formulaires pour obtenir des données ou des instructions de l'utilisateur, pendant l'exécution du programme.

Certains formulaires offrent des menus, permettant à l'utilisateur de choisir entre différentes actions possibles.
En VBA Excel, vous pouvez utiliser une feuille Excel (de préférence la première) à la place de formulaires VBA pour construire des menus.
Cela se fait simplement en insérant des objets (boutons de formulaire par exemple) sur la feuille Excel et en y assignant une macro VBA ou un hyperlien.

Par ailleurs, il se peut que votre programme VBA doive obtenir des instructions ou des données de l'utilisateur.

Si les choix sont simples (continuer ou arrêter, par exemple), il est recommandé d'utiliser la fonction:

Accueil
Concepts de programmation
VBE l'éditeur VBA
Déclarations, types, références, expressions et assignations
Tests et branchements
Les boucles
Gestion d'erreur
Collections et tableaux
Dialogues et formulaires
Objets et événements Excel
Conseils de programmation
Liste d'instructions
Autres formations

Word 2003
Word 2007
Excel
Excel
PowerPoint 2003
PowerPoint 2007
Access
Access 2010
Internet
Général
Intelligence financière
Vidéos

Navigation
Précédent
Suivant
Page Principale
FAQ
Nouveautés
Plan du site
Références
Motivations
Manuels de formation
Fichiers de démonstration
Nous joindre
Par courriel

Abonnez-vous à
l'infolettre LCI
Partager


Abonnez-vous à l'infolettre LeCompagnon.info


 

MsgBox(message[, boutons] [, titre])

Où:

- message est le message affiché par la fonction. On peut utiliser la constante VBA vbCrLf pour insérer des changements de lignes dans un message long.

-boutons Expression numérique indiquant les boutons disponibles dans la boîte de dialogue. Par défaut, il n'y a que le bouton OK.

Valeurs possibles:
0 (vbOKOnly) Affiche le bouton OK uniquement.
1 (vbOKCancel) Affiche les boutons OK et Annuler.
2 (vbAbortRetryIgnore) Affiche les boutons Abandonner, Réessayer et Ignorer.
3 (vbYesNoCancel) Affiche les boutons Oui, Non et Annuler.
4 (vbYesNo) Affiche les boutons Oui et Non.
5 (vbRetryCancel) Affiche les boutons Réessayer et Annuler.
16 (vbCritical) Affiche l'icône Message critique.
32 (vbQuestion) Affiche l'icône Requête d'avertissement.
48 (vbExclamation) Affiche l'icône Message d'avertissement.
64 (vbInformation) Affiche l'icône Message d'information.
256 (vbDefaultButton2) Le deuxième bouton est le bouton par défaut.
512 (vbDefaultButton3) Le troisième bouton est le bouton par défaut.
768 (vbDefaultButton4) Le quatrième bouton est le bouton par défaut.
524288 (vbMsgBoxRight) Le teste est aligné à droite.
(certaines valeur exotiques sont omises)

Le premier groupe de valeurs (0 à 5) décrit le nombre et le type de boutons affichés dans la boîte de dialogue. Le deuxième groupe (16, 32, 48 et 64) décrit le style d'icône. Le troisième groupe (256 et 512) définit le bouton par défaut. Au moment d'additionner ces nombres pour obtenir la valeur finale de l'argument buttons, ne sélectionnez qu'un seul nombre dans chaque groupe.
Les constantes entre parenthèses peuvent être utilisées à la place des valeurs correspondantes et sont plus explicites.

-titre titre affiché en haut de la boîte de dialogue.

La fonction MsgBox() retourne une valeur différente selon le bouton cliqué pour fermer la boîte de dialogue:

1 (vbOK) OK

2 (vbCancel) Annuler

3 (vbAbort) Abandonner

4 (vbRetry) Réessayer

5 (vbIgnore) Ignorer

6 (vbYes) Oui

7 (vbNo) Non

La boîte de dialogue ouverte par l'instruction MsgBox() est toujours modale, c'est à dire que l'exécution du programme VBA est interrompu et que le classeur Excel n'est pas accessible tante que la boîte de dialogue ne sera pas fermée par l'utilisateur.

MsgBox() permet au programme d'offrir jusqu'à 3 choix (3 boutons) à l'utilisateur.

Si la boîte de dialogue doit permettre à l'utilisateur de fournir une valeur (et une seule), il est possible d'utiliser l'instruction:

InputBox(message[, titre] [, défaut])

Où:

-message est le message affiché par la fonction. On peut utiliser la constante VBA vbCrLf pour insérer des changements de lignes dans un message long.

-titre titre affiché en haut de la boîte de dialogue.

-defaut valeur qui sera utilisée si l'utilisateur clique sur Ok sans fournir de valeur.

La boîte de dialogue ouverte par l'instruction InputBox() est toujours modale, c'est à dire que l'exécution du programme VBA est interrompu et que le classeur Excel n'est pas accessible tante que la boîte de dialogue ne sera pas fermée par l'utilisateur.

InputBox() offre à l'utilisateur une zone de texte et 2 boutons: Ok et Annuler.

Si Excel dispose d'une boîte de dialogue qui convient au besoin, il est possible de les utiliser à partir d'un programme VBA:

Collection Dialogs
d'objets Dialog

Chaque objet Dialog correspond à une boîte de dialogue Excel.
La méthode Show affiche la boîte de dialogue et retourne la réponse fournie par l'utilisateur.
On peut utiliser une constante VBA pour identifier la boîte de dialogue voulue:

Dialogs(xlDialogOpen).Show Ouvrir fichier
Dialogs(xlDialogSaveAs).Show Enregistrer sous
Il y a plus de 250 autres boîtes de dialogues disponibles dans Excel. Voir l'aide VBA, ou utiliser l'enregistreuse de macro-commande pour identifier le nom de la boîte de dialogue que vous voulez utiliser.

Il y a aussi l'objet FileDialog:

Objet FileDialog

Cet objet permet d'utiliser les boîte de dialogues de fichier standard Ouvrir et Enregistrer de Microsoft Office.

Utilisez la propriété DialogType pour spécifier quelle boîte de dialogue ouvrir:

msoFileDialogFilePicker Choisir un ou plusieurs fichiers, dont les chemins d'accès sont dans la collection FileDialogSelectedItems
msoFileDialogFolderPicker Choisir un dossier,  dont le chemins d'accès est dans la collection FileDialogSelectedItems
msoFileDialogOpen Choisir un ou plusieurs fichiers qui peuvent être ouverts avec la méthode Execute
msoFileDialogSaveAs Choisir un nom de fichier et un chemin d'accès, et d'enregistrer le classeur Excel sous ce nom avec la méthode Execute
Plusieurs autres propriétés de cet objet permettent de spécifier le titre, des valeurs par défaut, des filtres, etc.

L'objet FileDialog a 2 méthodes:

-Show qui affiche la boîte de dialogue spécifiée par la propriété DialgType.
-Execute qui exécute l'action appropriée pour les dialogues de type msoFileDialogOpen et msoFileDialogSaveAs.

Pour les besoins plus complexes, comme la saisie de plusieurs valeurs avec une validation importante, vous pouvez utiliser un formulaire VBA.

Finalement, pour une saisie vraiment efficace de données vous devriez utiliser Access, dont les formulaires sont beaucoup plus puissants que ceux que vous pouvez programmer en VBA Excel.

L'éditeur de formulaires VBA (MS Forms)

L'éditeur VBA comporte une fenêtre spécifique pour créer ou modifier un formulaire.

Créez un formulaire:

*Du menu Insertion, sélectionnez UserForm.

L'explorateur de projet ouvre une branche Feuilles qui ne contient pas des feuilles Excel, mais des formulaires VBA.

La fenêtre principale affiche le cadre d'un formulaire.

 

C'est l'entête de l'explorateur de projet qui contrôle l'affichage de la fenêtre principale:

Affichage du code VBA associé au formulaire (une sorte de module incorporé).

Alternatives: Menu Affichage/Code ou F7.

Affichage du formulaire.

Alternatives: Menu Affichage/Objet ou Maj+F7 .

Modifie le mode d'affichage de l'explorateur de projets. Inutile.

La boîte à outils devrait aussi apparaître.

Sinon, du menu Affichage, sélectionnez Boîte à outils.

Finalement, remarquez sous l'explorateur de projet, la feuille de propriétés du formulaire. C'est là que seront affichées les propriétés de l'objet sélectionné dans le formulaire (ou celles du formulaire lui-même).

Empressez-vous de changer le nom du formulaire que VBA a nommé UserForm1 (ou n).

Il est important de choisir le nom définitif du formulaire AVANT de commencer à lui ajouter du code VBA.

Événements

On attache des procédures sub aux événements que subit le formulaire.

Par exemple, une procédure sub nommée Sub UserForm_Initialize() est exécutée à chaque fois que le formulaire est ouvert (initialisé).

Pour écrire une procédure événementielle, afficher la fenêtre code du formulaire (F7), sélectionner l'objet qui subit l'événement (le formulaire ou un contrôle du formulaire), dans la liste déroulante de gauche, et l'événement voulu dans la liste de droite. L'éditeur VBA crée alors une procédure Sub vide correspondant à l'événement.


Il est aussi possible de créer une procédure Sub événementielle d'un contrôle en double-cliquant dessus.
C'est alors l'événement par défaut du contrôle qui est choisi.

Contrôles disponibles

On appelle contrôle les classes d'objet qu'on peut insérer dans un formulaire. La description détaillée de chacun
de ceux qui sont disponibles en VBA dépasse le cadre du présent texte, mais voici une présentation sommaire de chacun d'entre eux:

outil de sélection n'est pas un contrôle, mais l'outil à utiliser pour sélectionner un ou plusieurs contrôles.

 

 
libellé (intitulé ou label) sert à ajouter du texte explicatif dans le formulaire, comme des instructions à l'utilisateur ou des étiquettes pour les zones de texte.

 

Propriétés intéressantes:
  • Caption
  • Value
  • TextAlign

 


 

zone de texte (textbox) sert à inclure dans le formulaire une zone dans laquelle l'utilisateur sera invité à entrer des valeurs. La valeur entrée est TOUJOURS enregistrées en format texte, et le programme VBA devra identifier et faire les conversions appropriées.

 

Propriétés intéressantes:
  • Name
  • Enabled
  • Value
  • Text
  • ControlSource
  • TabIndex
  • TextAlign

Événements intéressants:

  • Change
  • Enter
  • Exit
  • BeforeUpdate
  • AfterUpdate
Zone de liste modifiable (déroulante ou ComboBox) Sert à inclure dans le formulaire une zone de texte offrant aussi une liste de choix possibles. Propriétés intéressantes:
  • Name
  • Enabled
  • Visible
  • Value
  • TabIndex
  • Text
  • TextAlign
  • BoundColumn
  • ColumnCount
  • ControlSource
  • RowSource

Événements intéressants:

  • Change
  • Enter
  • Exit
  • BeforeUpdate
  • AfterUpdate

 

Zone de liste (ListBox) Sert à inclure dans le formulaire une zone de liste de choix possibles. Propriétés intéressantes:
  • Name
  • Enabled
  • Visible
  • Value
  • TabIndex
  • Text
  • TextAlign
  • BoundColumn
  • ColumnCount
  • ControlSource
  • RowSource

Événements intéressants:

  • Change
  • Enter
  • Exit
  • BeforeUpdate
  • AfterUpdate

 

Case à cocher (CheckBox) Sert à inclure dans le formulaire une (souvent plusieurs) case(s) à cocher Propriétés intéressantes:
  • Name
  • Caption
  • Enabled
  • Visible
  • Value
  • TabIndex
  • TextAlign
  • ControlSource

Événements intéressants:

  • Change
  • Enter
  • Exit
  • BeforeUpdate
  • AfterUpdate
Bouton d'option (OptionButton) Sert à inclure dans le formulaire un (souvent plusieurs) boutons d'option Propriétés intéressantes:
  • Name
  • Caption
  • Enabled
  • Visible
  • Value
  • TextAlign
  • ControlSource

Événements intéressants:

  • Change
  • Enter
  • Exit
  • BeforeUpdate
  • AfterUpdate
Bouton Bascule (ToggleButton) Désuet: utiliser une case à cocher
Cadre (Frame) Sert à regrouper plusieurs contrôles d'un formulaire Propriétés intéressantes:
  • Name
  • Caption
  • Enabled
  • Visible

Événements intéressants:

  • Enter
  • Exit
Bouton de commande (CommandButton) Sert à inclure dans le formulaire un (souvent plusieurs) bouton(s) Propriétés intéressantes:
  • Name
  • Caption
  • Default
  • Enabled
  • TabIndex
  • Visible

Événements intéressants:

  • Click
Contrôle d'onglet (TabStrip) Sert à inclure des onglets dans le formulaire Propriétés intéressantes:
  • Name
  • Enabled
  • Value

Événements intéressants:

  • Change
Multi Page (Page) Sert à inclure des pages dans le formulaire Propriétés intéressantes:
  • Name
  • Enabled
  • Value

Événements intéressants:

  • Change
Barre de défilement (ScrollBar) Sert à inclure une barre de défilement dans le formulaire. Propriétés intéressantes:
  • Name
  • Enabled
  • Min
  • Max
  • Value
  • ControlSource
  • Orientation

Événements intéressants:

  • Change
  • Enter
  • Exit
  • BeforeUpdate
  • AfterUpdate
Toupie (SpinButton) Sert à inclure des flèches de défilement Propriétés intéressantes:
  • Name
  • Enabled
  • Min
  • Max
  • Value
  • ControlSource
  • Orientation

Événements intéressants:

  • Change
  • Enter
  • Exit
  • BeforeUpdate
  • AfterUpdate
Image Sert à inclure une image dans le formulaire Propriétés intéressantes:
  • Name
  • Enabled
  • Picture

Événements intéressants:

  • Click
RefEdit Sert à inclure une zone de sélection de plage Excel dans le formulaire

Remarque : si il y n'a aucun bouton RefEdit dans la boîte à outils, procédez comme suit :
Dans le menu Outils , cliquez sur Autres contrôles .
Dans la boîte de dialogue Contrôles supplémentaires , activez la case à cocher RefEdit.ctrl et puis cliquez sur OK.

Propriétés intéressantes:
  • Name
  • Enabled
  • Value
  • Text

Événements intéressants:

  • Change
  • Enter
  • Exit
  • BeforeDragOver
  • BeforeUpdate
  • AfterUpdate
 

Ouvrir et fermer un formulaire

Pour ouvrir un formulaire, il n'y a pas d'instruction VBA. On utiliser plutôt la méthode Show (voir exemples).

Pour réafficher un formulaire déjà ouvert, parce qu'un contrôle a pu changer, ou utilise la méthode RePaint.

Pour fermer un formulaire, on peut utiliser la méthode Close (ou même Hide), mais celle-ci ne libère pas l'espace mémoire occupée par le formulaire.

On utilise plus souvent l'instruction VBA:

Unload objet

Où:

- objet est le nom du formulaire à supprimer.

Lorsque l'instruction est utilisée dans le module VBA appartenant au formulaire, on préfère  utiliser:
Unload Me
L'objet Me étant le formulaire en cours.

Exemples

Il est fortement déconseillé d'utiliser quelque forme de dialogue que ce soit dans une fonction (Function) VBA.
Une fonction ne devrait communiquer avec l'environnement et l'utilisateur que par ses paramètres (en entrée) et sa valeur (en sortie).

Les exemples ci-dessous ne sont donc que des procédures Sub.

Exemple 1: Écran d'accueil

Technique 1: utilisant une feuille Excel

Cet exemple requiert:

Une feuille Excel nommée Accueil contenant le texte à afficher:


 

La procédure événementielle Sub Workbook_Open(), créée  en