Visual Basic for Applications - (sous Excel) Frédéric Cadier

 
CONTINUER À LIRE
Visual Basic for Applications - (sous Excel) Frédéric Cadier
Visual Basic for Applications
                                         (sous Excel)

                                       Frédéric Cadier

                                ENST Bretagne - Département LUSSI

                                frederic.cadier@enst-bretagne.fr

Cadier F. (ENST Bretagne)                      VBA                  1 / 62
Visual Basic for Applications - (sous Excel) Frédéric Cadier
Plan de la présentation

1 Excel et VBA

2 Bases et Concepts

3 Le langage VBA

4 UserForm

    Cadier F. (ENST Bretagne)   VBA   2 / 62
Excel et VBA

Plan de la présentation

1 Excel et VBA

2 Bases et Concepts

3 Le langage VBA

4 UserForm

    Cadier F. (ENST Bretagne)                  VBA   3 / 62
Excel et VBA         Bref Historique des Tableurs...

   VisiCalc Créé par D.Bricklin et B.Frankston, en 1978, pour Apple II
 SuperCalc Créé par Sorcim, pour CP/M, puis pour PC (1981)
Lotus 1-2-3 Créé par Lotus, en 1983, pour PC, puis pour DOS et OS/2 (1989)
            et Windows (1991)
   Quattro Créé par Borland, en 1987 (version Pro en 1989), pour PC, puis
            pour Windows (1992)
  Multiplan Créé par Microsoft, en 1982, pour CP/M, puis Apple II, Apple III,
            XENIX et MS-DOS
      Excel Créé par Microsoft, en 1985, pour Macintosh !!

  Cadier F. (ENST Bretagne)                  VBA                                     4 / 62
Excel et VBA         Bref Historique des Tableurs...

Version Windows :
 • Excel 2 en 1987 : langage de macro XLM
 • Excel 3 en 1990 : ajout de fonctionnalités (dessin, support OLE, travail en
     groupe, BDD externes...)
 • Excel 4 en 1992 : Excel prend la tête du marché...
 • Excel 5 en 1994 : langage de macro VBA !!
 • Excel 95 (Windows 95) : application réécrite...
 • Excel 97 en 1997 : mise en place de VBA au niveau d’Office
 • 2000 en 1999, 2002 en 2001 et 2003 en... 2003 ! : mises à jour et évolutions
     mineures

    Cadier F. (ENST Bretagne)                  VBA                                     5 / 62
Excel et VBA         Excel

Vue d’ensemble :
 • Interface...
 • Saisie des données :
       • Valeur numérique
       • Texte
       • Valeur booléenne (true ou false)
 • Saisie des formules (simples et matricielles)...

    Cadier F. (ENST Bretagne)                  VBA           6 / 62
Excel et VBA         Excel

Utilisation des noms...

Cette fonctionnalité est essentielle pour le développeur VBA :
 • aucune mise à jour du code en cas de déplacement d’une cellule, mais le nom
    reste valide !
 • lisibilité du code

Exemple :
Déplacement de cellules nommées :
 • le code Range(”D1 : D10”) n’est pas mis à jour et n’est plus valide.
 • tandis que Range(”DataClient”) est toujours valide.

    Cadier F. (ENST Bretagne)                  VBA                        7 / 62
Excel et VBA         Excel

Les applications Office sont hautement programmables, notamment grâce à VBA,
qui permet de manipuler leurs modèles d’objets.
Exemple : Excel
Les objets d’Excel comprennent entre autres :
  • l’application elle-même,
  • les classeurs d’Excel,
  • les feuilles de calcul et de graphique dans un classeur,
  • les lignes ou les colonnes dans une feuille de calcul,
  • les graphiques dans une feuille de graphique,
  • les différents graphismes d’un graphique...

    Cadier F. (ENST Bretagne)                  VBA                      8 / 62
Excel et VBA         Les fichiers d’Excel

     .xls       Fichier classeur : ses feuilles, le code VBA...
    .xlw        Environnement : informations sur l’espace de travail
     .xlt       Fichier modèle de classeur
     .xlb       Fichier de configuration des barres d’outils et des menus
     .xla       Macro complémentaire : fonctions, barre d’outils...
   HTML         Peut servir de format natif depuis Excel 2000
    XML         Importation des données XML depuis Excel 2003

Cadier F. (ENST Bretagne)                    VBA                            9 / 62
Excel et VBA         Un Peu de Méthode...

Quelques bonnes questions, avant la conception :
 • Utilisateur cible : plus ou expérimentés et/ou intéressés.
 • Type d’application tableur :
       Personnelle Développée par et pour le développeur ;
         Utilitaire Ensemble de fonctions généralistes ;
       Mono-Bloc Ne contient qu’un seul tableau de données ;
    Modélisation d’Hypothèses :
                    Application complexe, faisant intervenir des calculs « lourds » ;
    Interface BDD :
                    La convivialité d’un tableau allié à la puissance d’une base de
                    données ;
    « Clé en main » :
                    L’utilisateur est entièrement guidé dans son utilisation de
                    l’application.

    Cadier F. (ENST Bretagne)                  VBA                               10 / 62
Excel et VBA         Un Peu de Méthode...

Cycle de conception :
 1. Déterminer les besoins des utilisateurs,
 2. Planification du développement :
         •    Structure du ou des fichier(s)
         •    Structure des données
         •    Type de l’interface utilisateur
         •    Formules vs. code VBA
         •    Macro complémentaire ou fichier XLS
         •    Gestion des erreurs, des version d’Excel, des problèmes de performance, du
              niveau de sécurité...
 3.   Développement
 4.   Test de l’application
 5.   Protéger l’application et masquer les éléments inutiles
 6.   Distribuer l’application
 7.   Mises à jour...

      Cadier F. (ENST Bretagne)                   VBA                                  11 / 62
Bases et Concepts

Plan de la présentation

1 Excel et VBA

2 Bases et Concepts

3 Le langage VBA

4 UserForm

    Cadier F. (ENST Bretagne)                       VBA   12 / 62
Bases et Concepts         D’où vient le VBA?

Au début était le BASIC (Beginner’s All-purpose Symbolic Instruction Code),
apparu dans les années 1960 dans les universités pour l’apprentissage de la
programmation.

D’abord uniquement interprété, ce langage évolue, s’améliore et devient
compilable.

En 1990, Microsoft introduit Visual Basic, puis le VBA en 1994 avec Office 95,
qui reprend les mêmes bases conceptuelles.

    Cadier F. (ENST Bretagne)                       VBA                        13 / 62
Bases et Concepts         Notions fondamentales du VBA

    Code Une action en VBA est inscrite dans du code.
Procédure Au sein du code, les procédures effectuent des actions.
  Module Les modules VBA sont stockés dans les classeurs, et contiennent
          le code, et les procédures.

    Objet Ce sont les entités manipulées par le langage. Les objets sont
           organisés sous forme de hiérarchies, possèdent des propriétés et
           des méthodes.
Collection Objet particulier contenant un ensemble d’autres objets, tous
           identiques.
 Variable Entité portant un nom, et dans laquelle on stocke une valeur.

Cadier F. (ENST Bretagne)                       VBA                                  14 / 62
Bases et Concepts         Retour sur le Modèle d’Objets d’Excel

Cadier F. (ENST Bretagne)                       VBA                                           15 / 62
Bases et Concepts         Retour sur le Modèle d’Objets d’Excel

Cadier F. (ENST Bretagne)                       VBA                                           16 / 62
Bases et Concepts         Le VBE (Visual Basic Editor)

Explorateur de projets :
               Liste les classeurs ouverts et leurs modules.
Explorateur d’Objets :
               Affiche l’ensemble des objets, de leurs méthodes et propriétés.
   Propriétés Contient l’ensemble des propriétés statiques de l’objet en cours
               d’édition.
    Exécution Exécute des procédures et/ou du code VBA.
Variables Locales :
               En cours de déboguage, liste l’ensemble des variables locales à la
               procédure en cours.
      Espions En cours de déboguage, permet de suivre l’évolution d’une
               sélection de variables.
Fenêtres de code :
               Permettent l’édition du code.

    Cadier F. (ENST Bretagne)                       VBA                                  17 / 62
Bases et Concepts         Écrire du code

Il existe deux moyens d’écrire du code :
Saisie manuelle Le VBE contient des outils d’aide à la saisie (auto-complétion,
                Info express, Info paramètres...)
Enregistreur de macro Très utile pour construire rapidement une macro,
                enregistrée en VBA.

Exemple :
Sub DisBonjour()
    Msg = "Vous appelez-vous " & Application.UserName & "?"
    Ans = MsgBox (Msg, vbYesNo)
    If Ans = vbNo Then
        MsgBox "Dommage, j’ai tenté ma chance."
    Else
        MsgBox "Je le savais !!"
    End If
End Sub

    Cadier F. (ENST Bretagne)                       VBA                       18 / 62
Le langage VBA

Plan de la présentation

1 Excel et VBA

2 Bases et Concepts

3 Le langage VBA

4 UserForm

    Cadier F. (ENST Bretagne)                    VBA   19 / 62
Le langage VBA         Commentaires

Commentaires

Élément descriptif, i.e. non interprété, du code.
Il peut être inséré à n’importe quel endroit dans une ligne, et tout ce qui le suit
est ignoré.

On le signale à l’aide d’un apostrophe ’

Exemple :
Sub Test()
    ’ La méthode ClearContents vide les cellules,
    ’ mais ne supprime pas la mise en page
    ActiveCell.ClearContents ’ Pas besoin de paramètre...
    ActiveCell.Value = "L’apostrophe est entre guillemets"
End Sub

    Cadier F. (ENST Bretagne)                    VBA                             20 / 62
Le langage VBA         Variables

Variables

Emplacements de stockage nommés en mémoire.
Règles de nommage :
 • caractères alphanumériques ou "_" uniquement
 • le 1er caractère doit être alphabétique
 • la casse n’est pas prise en compte
 • 254 caractères maximum
Attention aux mots-clés réservés du langage
Exemple :
Je_Suis_1_Variable = "hihi" ’ est valide
je_suis_1_variable ’ est la même variable
Next = 132 ’ n’est pas valide

    Cadier F. (ENST Bretagne)                    VBA               21 / 62
Le langage VBA         Variables

Déclaration
On distingue 3 « niveaux » de déclaration :
        local : → mot-clé Dim
                 • déclaration au sein d’une procédure
                 • accessible uniquement dans cette procédure
     module : → mot-clé Dim
                 • déclaration en dehors de toute procédure
                 • accessible dans toutes les procédures du module
   publique : → mot-clé Public
                 • déclaration de niveau module
                 • accessible dans toutes les procédures de tous les modules
De plus, on peut déclarer une variable comme étant ;
    statique : → mot-clé Static
                 • déclaration de niveau local
                 • conservation de la valeur à la fin de la procédure
  constante : → mot-clé Const
                 • déclaration de n’importe quel niveau
                 • ne peut être modifiée
    Cadier F. (ENST Bretagne)                    VBA                           22 / 62
Le langage VBA         Variables

Type de donnée

Dans la déclaration, on peut préciser le type de donnée :
Exemple :
Dim iVal As Integer

Si le type n’est pas précisé, VBA utilise le type variant. Très souple à l’utilisation,
il pénalise néanmoins l’application sur la vitesse d’exécution.

Note : Pour se forcer à déclarer toutes les variables, on peut utiliser
Option Explicit en début de module.

Types de base : Byte, Boolean, Integer, Long, Single, Double, Currency,
Decimal, Date, Object, String et Variant

    Cadier F. (ENST Bretagne)                    VBA                               23 / 62
Le langage VBA         Variables

Exemples : Les chaînes et les dates

Lorsqu’elle est déclarée avec le mot-clé Dim, on peut préciser la taille d’une chaîne
de caractère au sein même de sa déclaration :
Exemple :
Dim strText As String * 25

Une variable de type Date contient des dates allant du 1er janvier 100 au 31
décembre 9999.
Une valeur de type Date est spécifiée à l’aide du caractère #.
Exemple :
Const dtDate As Date = #1/1/2005#
Const dtMidi = #12:00:00#

    Cadier F. (ENST Bretagne)                    VBA                            24 / 62
Le langage VBA         Variables

Tableaux (1/2)

Un tableau se déclare en faisant suivre le nom de la variable de parenthèses, dans
lesquelles on spécifie ses dimensions.
Exemple :
Dim iTab() As Integer ’ Tableau dynamique
Dim vTab(1 To 100) ’ Tableau de variant
Dim strTab(12, 12) As String ’ Tableau à 2 dimensions

Par défaut, l’index de base est 0. Pour le forcer à 1, on peut utiliser
Option Base 1 en début de module.
Pour l’accès aux éléments du tableau, on spécifie l’indice de l’élément entre
parenthèses.
Exemple :
strTab(3, 4) = "toto"

    Cadier F. (ENST Bretagne)                    VBA                            25 / 62
Le langage VBA         Variables

Tableaux (2/2)

Les tableaux dynamiques doivent être dimensionnés avant toute utilisation avec
l’instruction ReDim. Les tableaux sont alors réinitialisés.

Pour conserver les éléments précédents, on utilise ReDim Preserve.
Exemple :
Dim iTab() As Integer
...
ReDim iTab(150) ’ Le tableau est redimensionner
...
ReDim Preserve iTab(50) ’ On > des éléments

    Cadier F. (ENST Bretagne)                    VBA                        26 / 62
Le langage VBA         Variables

Type de donnée personnalisé

On peut définir ses propres types de données complexes (structures) à l’aide du
mot-clé Type.
Exemple :
Type InfoClient
    Entreprise As String * 25
    Contact As String * 15
    CodeRegion As Integer
    Ventes As Long
End Type
...
Dim BDDClient() As InfoClient

    Cadier F. (ENST Bretagne)                    VBA                          27 / 62
Le langage VBA         Manipulation d’objets et de collections

Manipulation d’objets

La structure With − End With permet de simplifier l’écriture lors de la
manipulation de variables d’objets.
Exemple :
’ Ceci...
Selection.Font.Name = "Times New Roman"
Selection.Font.FontStyle = "Bold Italic"
Selection.Font.Size = 12
Selection.Font.Underline = xlUnderlineStyleSingle
’ ... est équivalent à cela
With Selection.Font
    .Name = "Times New Roman"
    .FontStyle = "Bold Italic"
    .Size = 12
    .Underline = xlUnderlineStyleSingle
End With

    Cadier F. (ENST Bretagne)                    VBA                                             28 / 62
Le langage VBA         Manipulation d’objets et de collections

Manipulation de collections (1/2)

La structure For Each − Next permet d’exécuter une même tâche sur tous les
éléments d’une collection.
Syntaxe :
For Each item In collection
    [instructions]
    [Exit For]
    [instructions]
Next [item]
Notes :
 • item doit être préalablement déclaré si c’est une variable d’objet.
 • l’indication de item après Next permet une relecture plus aisée du code.

    Cadier F. (ENST Bretagne)                    VBA                                             29 / 62
Le langage VBA         Manipulation d’objets et de collections

Manipulation de collections (2/2)

Exemple :
Dim wb As Workbook
Dim ws As Worksheet

’ Parcours toutes les feuilles de tous les classeurs
For Each wb In Application.Workbooks
    For Each ws In wb.Worksheets
        ...
    Next ws
Next wb

    Cadier F. (ENST Bretagne)                    VBA                                             30 / 62
Le langage VBA         Contrôle de flux

Contrôle de flux (1/6)

L’instruction GoTo permet de transférer l’exécution du programme vers une
etiquette (i.e. un nom suivi de ":").
Exemple :
Sub DisBonjour()
    Msg = "Vous appelez-vous " & Application.UserName & "?"
    Ans = MsgBox (Msg, vbYesNo)
    If Ans = vbNo Then Goto mauvaiseReponse End If
    MsgBox "Je le savais !!"
mauvaiseReponse:
End Sub

    Cadier F. (ENST Bretagne)                    VBA                        31 / 62
Le langage VBA         Contrôle de flux

Contrôle de flux (2/6)

La construction If − Then permet l’exécution conditionnelle d’une partie de code.
Syntaxe :
If condition Then
    instructions-vrai
[ElseIf condition-n Then
    [instructions-alternatives-n]]
[...]
[Else instructions-par-defaut]
End If
Note : Il existe aussi la fonction IIf :
Exemple :
MsgBox IIf(bCondition, "vrai", "faux")

    Cadier F. (ENST Bretagne)                    VBA                         32 / 62
Le langage VBA         Contrôle de flux

Contrôle de flux (3/6)

La structure Select Case permet de choisir entre 2 conditions ou plus.
Syntaxe :
Select Case expressionTest
    [Case liste-valeurs-test-n
        [instructions-n]]
    [...]
    [Case Else
        [instructions-par-defaut]]
End Select

    Cadier F. (ENST Bretagne)                    VBA                      33 / 62
Le langage VBA         Contrôle de flux

Contrôle de flux (4/6)

La boucle For − Next exécute une série d’instructions sur une plage de valeurs
entières.
Syntaxe :
For Compteur = start To end [Step valeur-pas]
    [instructions]
    [Exit For]
    [instructions]
Next [Compteur]

    Cadier F. (ENST Bretagne)                    VBA                         34 / 62
Le langage VBA         Contrôle de flux

Contrôle de flux (5/6)

La boucle Do − While exécute une série d’instructions tant qu’une condition est
vérifiée.
Syntaxes :
Do [While condition]
     [instructions]
     [Exit Do]
     [instructions]
Loop
ou
Do
     [instructions]
     [Exit Do]
     [instructions]
Loop [While condition]

    Cadier F. (ENST Bretagne)                    VBA                         35 / 62
Le langage VBA         Contrôle de flux

Contrôle de flux (6/6)

La boucle Do − Until exécute une série d’instructions tant qu’une condition n’est
pas vérifiée.
Syntaxes :
Do [Until condition]
     [instructions]
     [Exit Do]
     [instructions]
Loop
ou
Do
     [instructions]
     [Exit Do]
     [instructions]
Loop [Until condition]

    Cadier F. (ENST Bretagne)                    VBA                         36 / 62
Le langage VBA         Écrire des procédures

Les procédures Sub

Les procédures Sub s’assimilent à des commandes exécutées par l’utilisateur.

Elles n’ont pas vocation à réaliser des calculs, mais permettent en revanche
d’interagir avec le modèle d’objets (Excel, Word...).

    Cadier F. (ENST Bretagne)                    VBA                           37 / 62
Le langage VBA         Écrire des procédures

Déclaration

[Private|Public] [Static] Sub nom([listeargs])
    [instructions]
    [Exit Sub]
    [instructions]
End Sub
       Private      Visible uniquement dans le module de déclaration.
        Public      (par défaut) Visible dans l’intégralité du classeur.
        Static      Toutes les variables de la procédure seront Static
          nom       cf. règles de nommage des variables.
     listeargs      Liste des paramètres passés à la procédure.
Note : Option Private Module rend toutes les procédures privées.

    Cadier F. (ENST Bretagne)                     VBA                           38 / 62
Le langage VBA         Écrire des procédures

Exécution (1/2)

... à partir du VBE :
             F5 Exécute la procédure ayant le focus.
Fenêtre Exécution Permet l’exécution de commandes VBA...
Procédures événementielles Associées à des... événements.

... à partir d’une autre procédure :
  Appel direct
  • [[projet.]module.]proc (listeargs)
 Mot-clé Call

  • Call [[projet.]module.]proc (listeargs)
Méthode Application.Run

  • Run "[[projet.]module.]proc", listeargs
  • Run "[’classeur.xls’!]proc", listeargs

    Cadier F. (ENST Bretagne)                    VBA                           39 / 62
Le langage VBA         Écrire des procédures

Exécution... (2/2)

... à partir d’Excel :
       Alt+F8 Attention : seules les procédures Sub publiques sans arguments y
                 sont visibles.
Touche de raccourci Une touche de raccourci peut être définié à partir de la boîte
                 de dialogue Macro (Alt+F8).
Bouton/Menu On peut affecter une macro à un élément de menu, ou un bouton
                 de barre d’outils.
Click sur un objet On peut associer une macro à un click sur n’importe quel objet
                 de ’Formulaires’.

    Cadier F. (ENST Bretagne)                    VBA                           40 / 62
Le langage VBA         Écrire des procédures

Passage d’arguments (1/2)

Certains des arguments peuvent être facultatifs, à l’aide de la syntaxe suivante :
Optional nom_var [As type] [= val_defaut]

Il est également possible de spécifier une liste de paramètres de longueur non
prédéterminé, à l’aide de la syntaxe suivante :
ParamArray nom_liste_var() As Variant

Note :
 • La liste est toujours un argument facultatif ;
 • Un ordre dans la liste des arguments doit être respecté : obligatoires, puis
   facultatifs, puis l’éventuelle liste

    Cadier F. (ENST Bretagne)                    VBA                              41 / 62
Le langage VBA         Écrire des procédures

Passage d’arguments (2/2)

Passage par référence (par défaut) Seule l’adresse de la donnée est passée en
              argument.
Passage par valeur Une copie de la donnée est passée en argument : l’argument
              doit être déclaré avec le mot clé ByVal.
Note : Une variable définie à l’aide d’un type personnalisé ne peut pas être passée
par valeur.

    Cadier F. (ENST Bretagne)                    VBA                           42 / 62
Le langage VBA         Écrire des procédures

Gestion des erreurs

Le principe est d’intercepter les erreurs d’exécution pour que l’utilisateur ne se
retrouve pas devant une situation de bug.
Syntaxe :
On Error {Resume Next|Goto etiquette}

Resume Next L’exécution n’est pas stoppée (attention aux erreurs en cascade).
Goto etiquette L’exécution est transférée vers une section de gestion des erreurs.
Notes :
 • Dans les deux situations, l’objet Err contient les caractéristiques de l’erreur.
 • On Error Goto 0 restaure la gestion standard des erreurs.

    Cadier F. (ENST Bretagne)                    VBA                            43 / 62
Le langage VBA         Écrire des procédures

Les procédures Function

Les procédures Function s’apparentent aux fonctions de feuille de calcul d’Excel,
ou aux fonctions intégrées de VBA.

Elles sont habituellement utilisées comme élément d’une expression VBA, ou dans
des formules de feuille de calcul.

Elles ne peuvent pas interagir avec les objets (Excel, Word...)

    Cadier F. (ENST Bretagne)                    VBA                           44 / 62
Le langage VBA         Écrire des procédures

Déclaration et portée

[Private|Public] [Static] Function nom([listeargs])
                                           [As type]
    [instructions][nom = expression]
    [Exit Function]
    [instructions][nom = expression]
End Function
       Private      Visible uniquement dans le module de déclaration.
        Public      (par défaut) Visible dans l’intégralité du classeur.
        Static      Toutes les variables de la procédure seront Static
          nom       Cf. règles de nommage des variables.
     listeargs      Liste des paramètres passés à la procédure.
          type      Précise le type de la donnée retournée.

    Cadier F. (ENST Bretagne)                     VBA                           45 / 62
Le langage VBA         Écrire des procédures

Exécution (1/2)

... à partir du VBE :
Fenêtre Exécution Permet l’exécution de commandes VBA...

... à partir d’une autre procédure :
  Appel direct
  • [variable =] [[projet.]module.]proc (listeargs)
Méthode Application.Run

  • [variable =] Run("[[projet.]module.]proc", listeargs)
  • [variable =] Run("[’classeur.xls’!]proc", listeargs)

    Cadier F. (ENST Bretagne)                    VBA                           46 / 62
Le langage VBA         Écrire des procédures

Exécution... (2/2)

... à partir d’une formule dans Excel :
   • =’mes_fonctions.xls’!nom_proc(listeargs)
   • =nom_proc(listeargs) si le classeur est "référencé" ou si il a été enregistré
      en tant que macro complémentaire.
Notes : Pour trouver une fonction, on peut utiliser Insertion>Fonctions...

    Cadier F. (ENST Bretagne)                    VBA                           47 / 62
Le langage VBA         Écrire des procédures

Valeur de retour

Une seul donnée peut être retournée par une fonction : variable locale portant le
nom de la fonction

Néanmoins, celle-ci peut être un tableau. Pour cela, la fonction doit renvoyé un
type variant, et construire sa valeur de retour à l’aide de la fonction Array.
Exemple :
Function NomsMois()
    NomsMois = Array("Janvier", "Février", "Mars", _
        "Avril", "Mai", "Juin", "Juillet", "Août", _
        "Septembre", "Octobre", "Novembre", "Décembre")
End Function

    Cadier F. (ENST Bretagne)                    VBA                           48 / 62
UserForm

Plan de la présentation

1 Excel et VBA

2 Bases et Concepts

3 Le langage VBA

4 UserForm

    Cadier F. (ENST Bretagne)              VBA   49 / 62
UserForm         Création

Création d’un User Form

Depuis le VBE : insérer un module de type UserForm...

Puis insérer des contrôles...

    Cadier F. (ENST Bretagne)              VBA              50 / 62
UserForm         Contrôles

Contrôles d’un User Form 1/3

       Label Intitulé :
             Pour l’insertion de texte dans la boîte de dialogue.
    TextBox Zone de texte :
             Permet à l’utilisateur de saisir des données.
   CheckBox Case à cocher :
             Permet un choix binaire.
     ListBox Zone de liste :
             Affiche une liste d’éléments dans laquelle l’utilisateur peut opérer
             des sélections.
  ComboBox Liste déroulante :
             Semblable à une ListBox, mais n’affiche qu’un seul élément, et
             permet à l’utilisateur de saisir de nouvelles données.

   Cadier F. (ENST Bretagne)               VBA                                 51 / 62
UserForm         Contrôles

Contrôles d’un User Form 2/3

CommandButton Bouton de commande :
              Permet l’exécution de... commandes.
ToggleButton Bouton bascule :
              Un bouton de ce type a deux états : activé (aspect enfoncé) et
              désactivé.
OptionButton Bouton d’option :
              Une fois groupé avec d’autres boutons d’options, il est utile pour
              sélectionner une option parmi plusieurs.
  SpinButton Toupie :
              Permet de sélectionner une valeur à l’aide de 2 flèches : une pour
              l’augmenter, l’autre pour la diminuer.
    ScrollBar Barre de défilement :
              Semblable à un SpinButton, mais l’utilisateur peut déplacer le
              bouton de défilement afin de modifier la valeur.

    Cadier F. (ENST Bretagne)              VBA                                52 / 62
UserForm         Contrôles

Contrôles d’un User Form 3/3

      Frame Cadre :
              Permet le regroupement d’autres contrôles.
     Image : Ces images seront intégrées au fichier Excel.
  Multipage : Crée une série d’onglets pouvant intégrer d’autres contrôles.
   TabStrip Contrôle onglet :
              Semblable à Multipage... en moins utilisable !!
   RefEdit : Offre à l’utilisateur la possibilité de sélectionner une plage de
              cellule.

    Cadier F. (ENST Bretagne)               VBA                                  53 / 62
UserForm         Cycle de vie

Gestion d’un User Form

 1.   Charger le UserForm en mémoire (facultatif) :
      Load nom_user_form
 2.   Afficher le UserForm :
      nom_user_form.Show [0]
      0 : affichage non modal
 3.   Masquer le UserForm (facultatif) :
      nom_user_form.Hide
 4.   Décharger le UserForm de la mémoire :
      Unload nom_user_form

      Cadier F. (ENST Bretagne)              VBA                  54 / 62
UserForm         Événements

Les événements d’un User Form

    Initialize      Survient    avant que le User Form ne soit chargé ou affiché.
    Activate        Survient    lorsque le User Form est activé.
  Deactivate        Survient    lorsque le User Form est désactivé.
  QueryClose        Survient    avant que le User Form soit déchargé.
   Terminate        Survient    après que le User Form a été déchargé.
Notes :
 • Load déclenche Initialize
 • Show déclenche Initialize et Activate (dans cet ordre)
 • Hide ne déclenche aucun événement
 • Unload déclenche QueryClose et Terminate (dans cet ordre)

    Cadier F. (ENST Bretagne)                      VBA                              55 / 62
UserForm         Solutions alternatives

InputBox 1/2

InputBox (du VBA) :
InputBox(prompt[,title][,default] _
       [,xpos][,ypos][,helpfile,context])

       prompt Le texte de la boîte de dialogue.
           title Le titre de la boîte de dialogue.
        default Chaîne de caractères contenant la valeur par défaut.
   xpos, ypos Les coordonnées du coin supérieur gauche.
helpfile, context Le fichier d’aide et le sujet associé.

    Cadier F. (ENST Bretagne)               VBA                            56 / 62
UserForm         Solutions alternatives

InputBox 2/2

InputBox (d’Excel) :
Application.InputBox(prompt[,title][,default] _
       [,left][,top][,helpfile,helpContextID][,type])

       prompt Le texte de la boîte de dialogue.
           title Le titre de la boîte de dialogue.
        default Chaîne de caractères contenant la valeur par défaut.
      left, top Les coordonnées du coin supérieur gauche.
helpfile, helpContextID Le fichier d’aide et le sujet associé.
          type Le type de la donnée attendue.

    Cadier F. (ENST Bretagne)               VBA                            57 / 62
UserForm         Solutions alternatives

MsgBox

MsgBox (du VBA) :
MsgBox(prompt[,buttons][,title][,helpfile,context])

       prompt Le texte de la boîte de dialogue.
       buttons Ensemble de boutons et d’icônes de la boîte de dialogue.
           title Le titre de la boîte de dialogue.
helpfile, helpContextID Le fichier d’aide et le sujet associé.

    Cadier F. (ENST Bretagne)              VBA                            58 / 62
UserForm         Solutions alternatives

GetOpenFilename 1/2

GetOpenFilename (d’Excel) :
Application.GetOpenFilename([FileFilter] _
  [,FilterIndex][,title][,ButtonText][,MultiSelect])

     FileFilter     Chaîne spécifiant les critères de filtrage.
   FilterIndex      Index du critère de filtrage par défaut.
           title    Le titre de la boîte de dialogue (« Ouvrir » par défaut).
  ButtonText        Pour Macintosh uniquement !
  MultiSelect       Booléen spécifiant si plusieurs fichiers peuvent être sélectionnés.

    Cadier F. (ENST Bretagne)                    VBA                                  59 / 62
UserForm         Solutions alternatives

GetOpenFilename 2/2

Exemple :
Sub openFileSrc()
    Dim Filt As String
    Dim IndexFiltre As Integer
    Dim NomFichier As Variant

    Filt = "Fichiers C (*.c),*.c," & _
        "Tous les fichiers (*.*),*.*"

    NomFichier = Application.GetOpenFilename( _
        FileFilter:=Filt, FilterIndex:=2, _
        Title:="Sélectionner un fichier source")

    If NomFichier  False Then MsgBox NomFichier
End Sub

    Cadier F. (ENST Bretagne)               VBA                            60 / 62
UserForm         Solutions alternatives

GetSaveAsFilename

GetSaveAsFilename (d’Excel) :
Application.GetSaveAsFilename([InitialFilename] _
  [,FileFilter][,FilterIndex][,title][,ButtonText])

InitialFilename Le nom de fichier suggéré (le nom du classeur par défaut).
      FileFilter Chaîne spécifiant les critères de filtrage.
    FilterIndex Index du critère de filtrage par défaut.
            title Le titre de la boîte de dialogue (« Sauvegarder sous » par défaut).
  ButtonText Pour Macintosh uniquement !

    Cadier F. (ENST Bretagne)               VBA                                  61 / 62
UserForm         Solutions alternatives

L’objet FileDialog

Introduit dans la version 2002 d’Excel, il permet au choix de :
  • sélectionner un fichier,
  • sélectionner un dossier,
  • d’ouvrir un fichier,
  • ou d’enregistrer un fichier.

Exemple :
Sub selectionnerDossier()
   With Application.FileDialog(msoFileDialogFolderPicker)
      .InitialFileName = Application.DefaultFilePath & "\"
      .Title = "Sélectionnez un emplacement"
      .Show
      If .SelectedItems.Count  0 Then _
         MsgBox .SelectedItems(1)
   End With
End Sub

    Cadier F. (ENST Bretagne)               VBA                            62 / 62
Vous pouvez aussi lire