Cours de VBA pour Excel 2007 by 398oj5

VIEWS: 382 PAGES: 93

									Cours de VBA pour
   Excel 2007
                           Cours de VBA pour Excel 2007

Index                                                                              Page

  I     Introduction à VBA …………………………………………………………………………………………………                     6

           1    Introduction à l'éditeur Visual Basic (VBE) ……………………………………………….      6
           2    Les fenêtres du VBE ………………………………………………………………………………….                 7

                    2.1 – La fenêtre Explorateur de projets ………………………………………………       7
                    2.2 – La fenêtre de code …………………………………………………………………….             7
                    2.3 – La fenêtre Exécution ………………………………………………………………….            7
                    2.4 – L'explorateur d'objets ………………………………………………………………..          7

           3    Personnaliser l'environnement de l'éditeur VBE ………………………………………       8

  II    Principes fondamentaux de la programmation VBA ………………………………………………           10

           1    Commentaires ………………………………………………………………………………………….                    10
           2    Variables, types de données et constantes ………………………………………………        10
           3    Déclarer des variables ………………………………………………………………………………               11

                    3.1 – Variables locales ………………………………………………………………………..           11
                    3.2 – Variables de niveau module ………………………………………………………          11
                    3.3 – Variables publiques ……………………………………………………………………            12
                    3.4 – Variables statiques …………………………………………………………………….           12
                    3.5 – Constantes …………………………………………………………………………………                12
                    3.6 – Constantes prédéfinies ………………………………………………………………           12

          4     Travailler avec les chaînes de caractères ………………………………………………….      13
          5     Travailler avec les dates ……………………………………………………………………………             13
          6     Tableaux …………………………………………………………………………………………………..                    14
          7     Les variables objet ……………………………………………………………………………………                14
          8     Les types de données personnalisés …………………………………………………………           15
          9     Les fonctions prédéfinies ………………………………………………………………………….             16
          10    La structure With – End With ……………………………………………………………………             16
          11    La structure For Each – Next …………………………………………………………………….            17
          12    L'instruction GoTo ……………………………………………………………………………………                 17
          13    La structure If – Then ……………………………………………………………………………….              18
          14    La fonction VBA IIF …………………………………………………………………………………..               18
          15    La structure Select Case ……………………………………………………………………………              19
          16    La boucle For – Next …………………………………………………………………………………                19
          17    La boucle Do While ………………………………………………………………………………….                 20
          18    La boucle Do Until ……………………………………………………………………………………                 20
          19    Les opérateurs …………………………………………………………………………………………                   21




Edited By Depret Grégory                                                          Page 2
                           Cours de VBA pour Excel 2007

  III   Les procédures ……………………………………………………………………………………………………….                 22

           1    Les procédures Sub ………………………………………………………………………………….             22
           2    Les procédures Function ………………………………………………………………………….           22
           3    Déclarer des procédures ………………………………………………………………………….           23
           4    Portée des procédures …………………………………………………………………………….            23
           5    Arguments des procédures ………………………………………………………………………            24
           6    Les arguments nommés ……………………………………………………………………………              24
           7    Appel d'une procédure …………………………………………………………………………….            25

  IV    Le modèle objet d'Excel ………………………………………………………………………………………….             26

           1    L'objet Application ……………………………………………………………………………………            27

                    Les propriétés …………………………………………………………………………………….            27
                    Les méthodes …………………………………………………………………………………….              29

           2    La collection Workbooks ………………………………………………………………………….           30

                    Les propriétés …………………………………………………………………………………….            30
                    Les méthodes …………………………………………………………………………………….              30

           3    L'objet Workbook …………………………………………………………………………………….              31

                    Les propriétés …………………………………………………………………………………….            31
                    Les méthodes …………………………………………………………………………………….              31
                    Les événements …………………………………………………………………………………              32

           4    La collection Worksheets …………………………………………………………………………           34

                    Les propriétés …………………………………………………………………………………….            34
                    Les méthodes …………………………………………………………………………………….              35

           5    L'objet Worksheet ……………………………………………………………………………………              36

                    Les propriétés …………………………………………………………………………………….            36
                    Les méthodes …………………………………………………………………………………….              37
                    Les événements …………………………………………………………………………………              38

           6    L'objet Range ……………………………………………………………………………………………               39

                    Les propriétés …………………………………………………………………………………….            39
                    Les méthodes …………………………………………………………………………………….              40

                    6.1 –La propriété Range ……………………………………………………………………..        41
                    6.2 – La propriété Cells ………………………………………………………………………        41
                    6.3 – La propriété Offset ……………………………………………………………………        42

           7    Exemples d'utilisation des objets ……………………………………………………………..     43




Edited By Depret Grégory                                                      Page 3
                           Cours de VBA pour Excel 2007

  V     Les UserForm ………………………………………………………………………………………………………….                      45

           1    Utiliser une boîte de dialogue InputBox ……………………………………………………        45

                    1.1 – La fonction InputBox de VBA ……………………………………………………..        45
                    1.2 – La méthode InputBox d'Excel …………………………………………………….         46

           2    La fonction MsgBox ………………………………………………………………………………….                 47
           3    La méthode GetOpenFilename d'Excel …………………………………………………….            49
           4    La méthode GetSaveAsFilename d'Excel ………………………………………………….           51
           5    Afficher et fermer des UserForm ……………………………………………………………..           52
           6    La fenêtre UserForm principale ………………………………………………………………..           53
           7    Liste des propriétés standard des contrôles ……………………………………………..     54
           8    Liste des événements standards des contrôles …………………………………………       55

                    BeforeDragOver …………………………………………………………………………………                  55
                    BeforeDropOrPaste ……………………………………………………………………………                 56
                    Click ……………………………………………………………………………………………………                    57
                    DblClick ………………………………………………………………………………………………                   58
                    Enter ………………………………………………………………………………………………….                    58
                    Exit …………………………………………………………………………………………………….                    58
                    KeyDown ……………………………………………………………………………………………                     59
                    KeyPress …………………………………………………………………………………………….                   59
                    KeyUp ………………………………………………………………………………………………..                    60
                    MouseDown ………………………………………………………………………………………                     60
                    MouseUp ……………………………………………………………………………………………                     61
                    MouseMove ……………………………………………………………………………………….                    61

          9     Le contrôle Label ……………………………………………………………………………………..                62
          10    Le contrôle TextBox ………………………………………………………………………………….                62
          11    Le contrôle CkeckBox ……………………………………………………………………………….                63
          12    Le contrôle OptionButton …………………………………………………………………………               63
          13    Le contrôle CommandButton ……………………………………………………………………                64
          14    Le contrôle ListBox …………………………………………………………………………………..               64
          15    Le contrôle ComboBox …………………………………………………………………………….                 67
          16    Le contrôle ScrollBar ………………………………………………………………………………..              67
          17    Le contrôle SpinButton …………………………………………………………………………….               67
          18    Le contrôle MultiPage ………………………………………………………………………………                68
          19    Le contrôle TabStrip …………………………………………………………………………………                68
          20    Le contrôle Image …………………………………………………………………………………….                 69
          21    Le contrôle Frame …………………………………………………………………………………….                 69
          22    Le contrôle RefEdit …………………………………………………………………………………..               70
          23    Le contrôle ToggleButton …………………………………………………………………………               70
          24    Le contrôle ProgressBar ……………………………………………………………………………               71
          25    Le contrôle Calendar ………………………………………………………………………………..               72
          26    Le contrôle MonthView ……………………………………………………………………………                 73
          27    Le contrôle DatePicker ……………………………………………………………………………..              73
          28    Le contrôle StatusBar ……………………………………………………………………………….               74
          29    Le contrôle Slider ……………………………………………………………………………………..               74
          30    Le contrôle UpDown ………………………………………………………………………………..                 75



Edited By Depret Grégory                                                          Page 4
                           Cours de VBA pour Excel 2007

  VI    Les barres d'outils personnalisées ………………………………………………………………………….          76

          1     Créer une barre de commandes ………………………………………………………………             76
          2     Les propriétés d'une barre de commandes ……………………………………………..       77
          3     Supprimer une barre de commandes ………………………………………………………            78
          4     Les contrôles ……………………………………………………………………………………………                 78
          5     Ajouter un contrôle à une barre de commandes …………………………………….      79
          6     Supprimer un contrôle dans une barre de commandes ………………………….     79
          7     Le bouton de commandes et ses propriétés ……………………………………………        80
          8     La zone de texte et ses propriétés …………………………………………………………..       81
          9     La zone de liste et ses propriétés …………………………………………………………….       82
          10    Le Sous-Menu et ses propriétés ………………………………………………………………           83
          11    Exercice récapitulatif ……………………………………………………………………………….            84
          12    Le menu Popup ……………………………………………………………………………………….                  88

 VII    Les Techniques de Gestion des Erreurs ………………………………………………………………….          89




Edited By Depret Grégory                                                        Page 5
                           Cours de VBA pour Excel 2007

I - Introduction à VBA

   1 - Introduction à l'éditeur Visual Basic (VBE)

      Tout le travail VBA s'opère dans l'éditeur VBE.
      Le VBE est une application séparée qui opère de manière transparente avec Excel. Vous ne
      pouvez pas exécuter VBE séparément : Excel doit être lancé pour pouvoir y accéder.

      Vous pouvez utiliser l'une des techniques suivantes pour basculer dans le VBE :

         o   Appuyer sur ALT+F11
         o   Choisissez Outils > Macros > Visual Basic Editor
         o   Cliquez sur le bouton Visual Basic Editor situé dans la barre d'outils Visual Basic

      Vous pouvez également accéder à 1 module spécial de la manière suivante :

          Cliquez du bouton droit sur un onglet de feuille et choisissez "Visualiser le code" pour
          accéder au module de code de la feuille active




Edited By Depret Grégory                                                                           Page 6
                           Cours de VBA pour Excel 2007

   2 - Les fenêtres du VBE

      2.1 - La fenêtre Explorateur de projets

          La fenêtre Explorateur de projets affiche un arbre hiérarchique composé des classeurs
          ouverts dans Excel (y compris les compléments et les classeurs cachés).
          Chaque classeur est considéré comme un projet.

          Si la fenêtre n'est pas visible, appuyer sur CTRL+R

          Chaque projet contient au moins un nœud appelé "Microsoft Excel Objets". Ce nœud se
          déroule et fait apparaître un élément par feuille de calcul et par feuille graphique.
          Il affiche également un objet appelé "ThisWorkbook".

             Si le projet contient des modules VBA, la liste affiche un nœud "Modules"
             Si le projet contient des UserForm, la liste affiche un nœud "Feuilles"
             Si le projet contient des modules de classes, la liste affiche un nœud "Modules de
             classes"

          Pour ajouter un nouveau module VBA, sélectionnez le nom du projet dans la fenêtre
          Explorateur de projets et choisissez Insertion > Module dans le menu contextuel.

      2.2 - La fenêtre de code

          La fenêtre de code (ou fenêtre de module) contient le code VBA. Chaque élément d'un
          projet possède une fenêtre de code associée.

          Pour examiner la fenêtre de code d'un objet, double-cliquez sur l'objet dans la fenêtre
          Explorateur de projets.

      2.3 - La fenêtre Exécution

          La fenêtre Exécution est la plus utile pour exécuter des instructions VBA, les tester et les
          corriger.

          Pour afficher la fenêtre Exécution, appuyer sur CTRL+G

      2.4 - L'explorateur d'objets

          L'explorateur d'objets répertorie les propriétés et méthodes des objets disponibles.
          Lorsque VBE est actif, appuyer sur F2 pour l'obtenir.




Edited By Depret Grégory                                                                        Page 7
                            Cours de VBA pour Excel 2007

   3 - Personnaliser l'environnement de l'éditeur VBE

      Lorsque le VBE est actif, choisissez Outils > Options. Une boîte de dialogue apparaît qui
      contient 4 ongles : Editeur, Format de l'éditeur, Général et Ancrage.

      Voici les options les plus utiles :

          o   Vérification automatique de la syntaxe

                  Désactivez ce paramètre : les erreurs de syntaxes apparaissent ainsi dans une
                  couleur différente du code.

          o   Déclaration des variables obligatoires

                  Activez cette option : VBE insère automatiquement l'instruction suivante au début
                  de chaque module :

                      Option Explicit

                  Lorsque cette instruction figure dans votre module, vous devez explicitement
                  définir chaque variable utilisée.

          o   Complément automatique des instructions

                  Activez cette option : le VBE fournit une aide à l'écriture du code VBA en faisant
                  apparaître une liste d'instructions relatives à l'objet concerné.

          o   Info Express automatique

                  Activez cette option : le VBE affiche des informations concernant les fonctions
                  comme la syntaxe.

          o   Info bulle automatique

                  Activez cette option : le VBE affiche la valeur de la variable sur laquelle se trouve
                  positionné le pointeur lorsque vous déboguez votre code.

          o   Retrait automatique

                  Activez cette option : VBE passe automatiquement en retrait chaque nouvelle
                  ligne de code.




Edited By Depret Grégory                                                                          Page 8
                           Cours de VBA pour Excel 2007

         o   Affichage du module complet par défaut

                Activez cette option : VBE affiche un module complètement et non procédure par
                procédure

         o   Séparation des procédures

                Activez cette option : VBA insère une ligne de séparation à la fin de chaque
                procédure.




Edited By Depret Grégory                                                                       Page 9
                              Cours de VBA pour Excel 2007

II - Principes fondamentaux de la programmation VBA

   1 - Commentaires

      Un commentaire est un texte descriptif inclus dans le code. Les commentaires sont ignorés
      par VBA.

      Les commentaires peuvent occuper une ligne entière ou être insérés après une instruction,
      sur la même ligne.

      Les commentaires sont signalés par une apostrophe.

      VBA ignore tout texte qui suit une apostrophe à moins que cette apostrophe ne se trouve
      contenue dans un texte entre guillemets.

          'Ceci est un commentaire

      Info

          La barre d'outils VBE contient deux boutons très utiles : Commenter bloc et Ne pas
          commenter bloc

   2 - Variables, types de données et constantes

      Le tableau suivant liste les différents types de données prédéfinis de VBA

       Type de données          Taille                         Plage de valeurs
               Byte               1                                 0 à 255
            Boolean               2                             True OU False
             Integer              2                            -32 768 à 32 767
               Long               4                     -2 147 483 648 à 2 147 483 647
              Single              4
             Double               8
            Currency              8        -922 337 203 685 477.5808 à 922 337 203 685 477.5807
               Date               8                         01/01/100 à 31/12/9999
              Object              4                   N'importe quelle référence d'objet
       String (lg variable)      10+                  0 à approximativement 2 milliards
         String (lg fixe)                                1 à approximativement 65400
           Variant (nb)          16         N'importe quelle valeur numérique jusque type double
         Variant (string)        22+                  0 à approximativement 2 milliards
          User-defined                      Varie selon l'élément : variable définie par l'utilisateur

      Info

          Pour les calculs de feuilles de calcul, Excel utilise le type de données Double.


Edited By Depret Grégory                                                                       Page 10
                            Cours de VBA pour Excel 2007

   3 - Déclarer des variables

      Pour vous forcer à déclarer toutes les variables utilisées, incluez la ligne suivante comme
      première instruction dans vos modules :

          Option Explicit

      Afin de vous assurer que cette instruction se trouve automatiquement insérée, cochez
      l'option 'Déclaration des variables obligatoire' dans l'onglet Editeur de la boîte de dialogue
      Options du VBE.

      3.1 - Variables locales

          Les variables locales sont déclarées dans une procédure et ne peuvent être utilisées que
          dans la procédure où elles sont déclarées.

          Pour déclarer une variable locale, il suffit de placer une instruction Dim au début d'une
          procédure :

             Dim nom-variable As type-variable

          Exemple :

             Dim Taille As Integer

          On peut déclarer plusieurs variables sur une même ligne en les séparant par une virgule
          et en précisant pour chacune le type de données :

             Dim Taille As Integer, Age As Integer, Poids As Double

      3.2 - Variables de niveau module

          Parfois, vous souhaiterez qu'une variable soit disponible à toutes les procédures qui se
          trouvent dans un module.
          Dans ce cas, déclarez tout simplement la variable avant la première procédure du
          module.

          La valeur d'une variable de niveau module ne change pas lorsqu'une procédure se
          termine. La seule exception à cette règle intervient lorsque la procédure est interrompue
          par une instruction End.




Edited By Depret Grégory                                                                       Page 11
                           Cours de VBA pour Excel 2007

      3.3 - Variables publiques

          Pour qu'une variable soit disponible dans chaque procédure de chaque module d'un
          projet, vous devez la déclarer au niveau module en utilisant le mot clé Public au lieu de
          Dim.

              Public Taille As Integer

          Ce type de déclaration doit apparaître dans un module standard VBA et non dans le
          module de code d'une feuille ou d'un UserForm.

      3.4 - Variables statiques

          Les variables statiques sont déclarées au niveau procédure et conservent leur valeur
          lorsque la procédure se termine (à moins que la procédure ne soit interrompue par
          l'instruction End).

          Déclarez les variables statiques en utilisant le mot clé Static

              Static Taille As Integer

      3.5 - Constantes

          Pour déclarer des constantes, utilisez le mot clé Const

              Const NbMois As Integer = 12

          Les constantes possèdent une portée tout comme les variables (locales, niveau module et
          publiques). Pour la rendre publique, utilisez les 2 mots clé comme suit :

              Public Const NbMois As Integer = 12

      3.6 - Constantes prédéfinies

          Excel et VBA possèdent un grand nombre de constantes prédéfinies que vous pouvez
          utiliser sans les déclarer.

          L'explorateur d'objets contient une liste de toutes les constantes d'Excel et de VBA :

         o    Les constantes d'Excel commencent par Xl comme XlLandscape ou XlPortrait
         o    Les constantes de VBA commencent par Vb comme VbOK ou VbCancel




Edited By Depret Grégory                                                                      Page 12
                           Cours de VBA pour Excel 2007

   4 - Travailler avec les chaînes de caractères

      Il existe deux types de chaînes dans VBA :

          o   Les chaînes de longueur constantes déclarées avec un nombre indiqué de caractères.
              La longueur maximale est de 65 535 caractères.

                 Dim MaChaine As String * 50

          o   Les chaînes de longueur variable qui peuvent théoriquement compter jusqu'à 2
              milliards de caractères

                 Dim MaChaine

   5 - Travailler avec les dates

      Les variables de type Date utilisent 8 octets de mémoire et peuvent contenir des dates allant
      du 01/01/100 au 31/12/9999.
      Le type de donnée Date est également utile pour enregistrer des données relatives au temps.

      En VBA, les dates et les variables temporelles sont spécifiées en étant entourées par deux
      signes dièse (#)

          Dim Aujourdhui As Date
          Dim Temps As Date
          Const PremierJour As Date = #1/1/2000#
          Const Midi As Date = #12:00:00#

      Info

          Les constantes date sont toujours définies selon le format Mois / Jour / Année, même si
          votre système est réglé pour afficher les dates dans un autre format.
          Si vous utilisez une boîte de message pour afficher vos dates et heures, elles seront
          affichées selon le format de votre système.




Edited By Depret Grégory                                                                    Page 13
                           Cours de VBA pour Excel 2007

   6 - Tableaux

      Les tableaux sont des groupes d'éléments de même type qui possèdent un nom commun.

      Pour référencer un élément spécifique d'un tableau, on utilise le nom du tableau et un
      numéro d'index.
      Cet index commence à 0, mais vous pouvez le forcer à 1 en incluant au début du module
      l'instruction suivante :

          Option Base 1

      Les tableaux se déclarent comme une variable normale

          Dim Tab (0 To 100) As Integer
          Dim Tab (1 To 100) As Integer

      On peut également créer des tableaux pouvant avoir jusqu'à 60 dimensions

          Dim Tab (1 To 12, 1 To 366, 1 To 24, 1 To 60, 1 To 60)

      Pour attribuer une valeur à un élément de tableau, il suffit de mentionner son index entre
      parenthèses

          Tab(5) = 250
          Tab (5,2,20,50,45) = 587

      Un tableau est dit dynamique lorsqu'il ne contient pas un nombre précis d'éléments. Ce type
      de tableau se déclare comme ceci :

          Dim Tab( ) As Integer

   7 - Les variables objet

      On appelle variable objet une variable qui représente un objet entier, comme une plage de
      cellule ou une feuille de calcul.

      Les variables objet sont déclarées comme les variables normales

          Dim Zone As Range

      Une fois la variable déclarée, l'instruction Set lui attribue un objet

          Set Zone = Range("A1:A10")




Edited By Depret Grégory                                                                   Page 14
                           Cours de VBA pour Excel 2007

   8 - Les types de données personnalisés

      Un type de données personnalisé correspond à une structure en C.

      Le type se définit avec le mot-clé Type.
      Exemple :

          Type Client
             Entreprise As String * 25
             Nom As String * 25
             Prenom AS String * 25
             Clinum As Integer
          End Type

      Les types de données personnalisés se définissent en haut d'un module, avant les
      procédures.
      Une fois que vous avez créé un type personnalisé, utilisez l'instruction Dim pour déclarer une
      variable de ce type. En général, ce sera un tableau.

          Dim Clients(1 To 100) As Client

      Chacun des 100 éléments de ce tableau est constitué de 4 composants. Vous pouvez vous
      référer à un composant particulier avec l'opérateur point (.)

          Clients(5).Entreprise = "Akzo"

      Il est également possible de travailler avec les éléments de tableau comme un tout

          Clients(6) = Clients(5)




Edited By Depret Grégory                                                                    Page 15
                           Cours de VBA pour Excel 2007

   9 - Les fonctions prédéfinies

      VBA possède une variété de fonctions prédéfinies qui simplifient les calculs et les opérations.
      Plusieurs fonctions VBA sont semblables (ou identiques) aux fonctions de feuille de calcul
      d'Excel (Voir Annexe A : Les fonctions prédéfinies).

          Pour obtenir une liste des fonctions VBA lorsque vous tapez votre code, tapez VBA suivi
          d'un point, le VBE affiche une liste de tous ses membres, en incluant les fonctions
          (précédées par une icône verte).

      Vous pouvez également utiliser les fonctions de feuille de calcul d'Excel dans votre code VBA.
      L'objet WorksheetFunction contenu dans l'objet Application contient toutes les fonctions de
      feuille de calcul que vous pouvez appeler.

          Application.WorksheetFunction.NomdeFonction

      Vous ne pouvez pas utiliser les fonctions de feuille de calcul qui ont un équivalent en VBA.
      Par exemple, VBA ne peut pas accéder à la fonction Racine d'Excel car VBA a sa propre
      version de cette fonction (Sqr).

   10 - La structure With – End With

      Cette structure permet d'exécuter des opérations multiples sur un unique objet.
      Voici sa syntaxe :

          With Objet
             .propriété1 = valeur 1
             .propriété2 = valeur2
             …..
          End With

      Exemple

          With Selection.Font
             .Name = "Times New Roman"
             .FontStyle = "Bold Italic"
             .Size = 12
             .Underline = XlUnderlineStyleSingle
             .ColorIndex = 5
          End With




Edited By Depret Grégory                                                                     Page 16
                           Cours de VBA pour Excel 2007

   11 - La structure For Each – Next

      Les collections sont des groupes d'objets en relation. Par exemple, la collection Workbooks
      est une collection de tous les classeurs ouverts Workbook.

      Il n'est pas nécessaire de connaître le nombre d'éléments que contient une collection pour
      utiliser la structure For Each – Next.

      La syntaxe est :

          For Each élément In Collection
              Instructions
              [Exit For]
          Next élément

   12 – L'instruction GoTo

      Pour modifier le déroulement d'un programme, il suffit d'utiliser une instruction GoTo.
      Cette instruction transfère l'exécution du programme vers une nouvelle instruction qui doit
      être précédé d'une étiquette (une chaîne de caractère suivie de 2 points).

      Les instructions GoTo ne peuvent pas sauter vers un emplacement situé hors de la procédure
      où elles se trouvent.

      Exemple

          La procédure suivante emploie la fonction VBA InputBox pour obtenir le nom de
          l'utilisateur. Si le nom n'est pas Howard, la procédure se branche sur l'étiquette
          MauvaisNom et s'interrompt.

              Sub Demo
                 NomUtil = InputBox("Entrez votre Nom : ")
                 If NomUtil <> "Howard" Then GoTo MauvaisNom
                 MsgBox ("Bonjour Howard")
                 Exit Sub

                 MauvaisNom:
                 MsgBox("Désolé : Seul Howard est autorisé")
              End Sub

          Cette procédure fonctionne, mais en règle générale, l'instruction GoTo ne doit être
          utilisée qu'en dernier recours.
          En fait, le seul cas où vous avez réellement besoin de l'utiliser concerne le cas de la
          capture d'erreurs.


Edited By Depret Grégory                                                                       Page 17
                           Cours de VBA pour Excel 2007

   13 - La structure If – Then

      La syntaxe est :

          If condition Then instructions [Else instructions]

          La clause Else est facultative. Elle permet d'exécuter une ou plusieurs instructions quand
          la condition testée est fausse.

      Il existe une syntaxe plus complète qui permet d'exécuter uniquement certaines instructions
      et puis de sortir de la structure If

          If condition Then
               Instructions
               [Else If condition Then Instructions]
               [Else Instructions]
          End If

      Il est également possible d'imbriquer plusieurs structures If – Then – Else

          If condition Then
               Instructions
          Else
               If condition Then
                    Instructions
               Else
                    Instructions
               End If
          End If

      Les structures If – Then peuvent être assez lourdes. En général, il paraît préférable de ne les
      utiliser que pour des cas simples.
      Lorsqu'il s'agit de choisir entre plusieurs solutions, la structure Select Case est souvent
      préférable.

   14 - La fonction VBA IIF

      VBA propose une solution alternative à la structure If – Then : la fonction IIF.
      Cette fonction contient 3 arguments obligatoires et fonctionne de manière semblable à la
      fonction SI d' Excel.
      Sa syntaxe est :

          IIF(condition, valeur vraie, valeur fausse)




Edited By Depret Grégory                                                                      Page 18
                           Cours de VBA pour Excel 2007

   15 - La structure Select Case

      La structure Select Case permet de choisir parmi 2 conditions ou plus.
      Sa syntaxe est :

          Select Case Expression
              [Case condition]
                  Instructions
              [Case Else]
                  Instructions
          End Select

      L'instruction Case peut utiliser plusieurs syntaxes pour comparer des valeurs

          Case Is < Valeur
          Case " "
          Case Valeur1 To Valeur2
          Case Valeur3, Valeur4, Valeur5

      VBA quitte la structure dès qu'un cas vrai est trouvé.
      Si aucune correspondance n'est trouvée et que la clause [Case Else] existe, VBA exécute ses
      instructions.

      Les instructions Select Case peuvent également être imbriquées.

   16 - La boucle For – Next

      Sa syntaxe est :

          For compteur = Début To Fin [Step incrément]
              Instructions
              [Exit For]
          Next [compteur]

      L'argument facultatif [Step incrément] permet une valeur d'incrément différente de 1 (valeur
      par défaut).




Edited By Depret Grégory                                                                   Page 19
                           Cours de VBA pour Excel 2007

   17 - La boucle Do While

      La boucle Do While représente un autre type de structure de boucle VBA.
      A la différence de la boucle For – Next, la boucle Do While continue de s'exécuter tant qu'une
      condition donnée est vérifiée.

      Elle possède 2 syntaxes :

          Do [While condition]
              Instructions
              [Exit Do]
          Loop

          Do
             Instructions
             [Exit Do]
          Loop [While condition]

      La différence entre ces 2 syntaxes concerne le moment où la condition est évaluée.

   18 - La boucle Do Until

      Cette structure est très semblable à la structure Do While.
      La différence ne se remarque qu'au niveau du test de la condition. La boucle Do While
      s'exécute lorsque la condition est vraie. La boucle Do Until s'exécute jusqu'à ce que la
      condition soit vraie.

      Elle possède 2 syntaxes :

          Do [Until condition]
              Instructions
              [Exit Do]
          Loop

          Do
             Instructions
             [Exit Do]
          Loop [Until condition]




Edited By Depret Grégory                                                                     Page 20
                           Cours de VBA pour Excel 2007

   19 – Les opérateurs

      Les opérateurs permettent d'effectuer des opérations arithmétiques, de comparer des
      variables entre elles, de tester plusieurs conditions …

      Voici un tableau récapitulatif de tous les opérateurs
         Opérateur                                       Description
              +                                           Addition
               -                                        Soustraction
               /              Division avec comme résultat un nombre à virgule flottante
            Mod                             Reste de la division de 2 nombres
               \                         Division avec comme résultat un entier
              *                                         Multiplication
              ^                                  Elévation à la puissance
              <                                          Inférieur à
              <=                                     Inférieur ou égal à
              >                                          Supérieur à
              >=                                    Supérieur ou égal à
              =                                             Egal à
              <>                                        Différent de
            AND             Si toutes les expressions ont la valeur True, le résultat est True.
                             Si l'une des expressions a la valeur False, le résultat est False
             OR            Si au moins l'une des expressions a la valeur True, le résultat est
                                                      True (OU Inclusif)
             XOR          Si une et une seule expression a la valeur True, le résultat est True
                                                        (OU Exclusif)
             NOT                           Renvoie le contraire de l'expression
             Eqv                   Renvoie True si les deux expressions sont identiques
              &                                Opérateur de concaténation

      L'instruction Option Compare utilisée au niveau Module permet de déclarer la méthode de
      comparaison par défaut qu'il convient d'utiliser lors de la comparaison de chaînes.
      Elle peut prendre 3 valeurs :

            L'option Compare Binary (option par défaut) fournit des comparaisons de chaînes
             basées sur un ordre de tri dérivé de la représentation binaire interne des caractères.
            L'option Compare Text fournit des comparaisons de chaînes basées sur un ordre de tri
             qui ne distingue pas les majuscules des minuscules.
            L'option Compare Database fournit des comparaisons de chaînes basées sur l'ordre de
             tri déterminé par l'identificateur de paramètres régionaux de la base de données dans
             laquelle la comparaison de chaînes est effectuée.




Edited By Depret Grégory                                                                      Page 21
                           Cours de VBA pour Excel 2007

III - Les procédures

   Dans VBA Excel, on distingue trois types de procédures :

      o   Les procédures Sub appelées sous-programme.
      o   Les procédures Function appelées fonctions.
      o   Les procédures Property appelées procédures de propriété.

   1 - Les procédures Sub

      On distingue 2 types de procédures Sub :

          o   Les procédures Sub générales

                  Une procédure générale est une procédure déclarée dans un module
                  (généralement un module standard). L’appel d’une telle procédure est défini
                  explicitement dans le code.

          o   Les procédures Sub événementielles

                  Une procédure événementielle est une procédure associée à un événement d’un
                  objet. Son nom est composé du nom de l’objet, suivi du caractère souligné « _ »
                  et du nom de l’événement (Ex : Workbook_Open).
                  L’appel d’une telle procédure est implicite, c’est-à-dire que la procédure est
                  exécutée automatiquement lorsque l’événement associé se produit.

   2 - Les procédures Function

      Les procédures Function, plus couramment appelées fonctions, renvoient une valeur, telle
      que le résultat d'un calcul. La valeur est retournée au travers du nom de la fonction.

      Le langage Visual Basic comporte de nombreuses fonctions intégrées telles que les fonctions
      se rapportant aux dates (day, week, year, format, …).

      En plus de ces fonctions intégrées, vous pouvez créer vos propres fonctions personnalisées.




Edited By Depret Grégory                                                                   Page 22
                           Cours de VBA pour Excel 2007

   3 - Déclarer des procédures

      Syntaxe d'une procédure Sub

          [Private | Public] [Static] Sub NomProc ([Liste d'arguments])
              Instructions
              [Exit Sub]
          End Sub

            Liste d'arguments : représente une liste de variables entre parenthèses, recevant des
             arguments passés vers la procédure. Employer une virgule pour séparer les
             arguments. Si la procédure n'utilise pas d'arguments, un jeu de parenthèses vides est
             requis.

       Syntaxe d'une procédure Function

          [Private | Public] [Static] Function NomProc ([Liste d'arguments]) [As Type]
              Instructions
              [NomProc = Expression]
              [Exit Function]
          End Function

            Liste d'arguments : représente une liste de variables entre parenthèses, recevant des
             arguments passés vers la procédure. Employer une virgule pour séparer les
             arguments. Si la procédure n'utilise pas d'arguments, un jeu de parenthèses vides est
             requis.
            As Type (Facultatif) : type de données retournées par la procédure.
            NomProc = Expression : Le point principal à retenir tient à ce qu'une valeur est
             toujours attribuée au nom de la fonction au moins une fois

   4 - Portée des procédures

      La portée d'une procédure définit l'étendue de son utilisation.

      Une procédure Public peut être appelée depuis tous les modules de tous les projets d'Excel.

      Une procédure Private ne peut être appelée que depuis une procédure au sein du même
      module.

      Le mot clé Static indique que les variables locales de la procédure sont préservées entre les
      appels.

      En l'absence des mentions Public ou Private, les procédures sont publiques par défaut.



Edited By Depret Grégory                                                                     Page 23
                           Cours de VBA pour Excel 2007

   5 - Arguments des procédures

      Les arguments sont utilisés pour transmettre aux procédures des paramètres sous formes de
      données. Le nombre d'arguments peut varier de 0 à plusieurs.

      Pour déclarer un argument, il suffit de spécifier son nom. Néanmoins, la syntaxe complète de
      déclaration d'un argument est la suivante :

          [Optional] [ByVal | ByRef] [ParamArray] variable [As type]

         o   L'option Optional : indique que l'argument est facultatif. Tous les arguments
             facultatifs doivent être situés en fin de liste des arguments, et être de type Variant.
         o   L'option ByVal : indique que l'argument est passé par valeur.
         o   L'option ByRef : indique que l'argument est passé par référence. C'est l'option par
             défaut.
         o   Le mot clé ParamArray : utilisé uniquement comme dernier argument de la liste pour
             indiquer que celui-ci est un tableau facultatif d'éléments de type variant. Il ne peut
             être utilisé avec les mots clés ByVal, ByRef ou Optional.
         o   Type : précise le type de données de l'argument passé à la procédure (Byte, Boolean,
             Integer, Long, …).

   6 - Les arguments nommés

      Le passage d'arguments à une procédure en tenant compte de leur ordre d'apparition est
      parfois difficile à mettre en œuvre, notamment lorsque certains paramètres sont facultatifs.

      Les arguments nommés facilitent le passage des arguments en présentant les avantages
      suivants :

         o   L'ordre des arguments nommés n'a pas d'importance
         o   Les arguments facultatifs peuvent être omis

      La syntaxe des arguments nommés est :

          NomArgument := valeur




Edited By Depret Grégory                                                                    Page 24
                           Cours de VBA pour Excel 2007

   7 - Appel d'une procédure

      La syntaxe d'un appel est :

          [Call] NomProc [liste d'arguments]

      Si le mot clé Call est indiqué, vous devez placer la liste d'arguments entre parenthèses.

      Pour stocker le résultat d'une fonction dans une variable, utilisez la syntaxe suivante :

          <Variable> = NomProc ([liste d'arguments])

      Pour appeler une procédure d'un autre module, utilisez la syntaxe suivante :

          [Call] NomModule.NomProc

      Pour appeler une procédure d'un autre classeur, utilisez la syntaxe suivante :

          Application.Run "NomClasseur!NomModule.NomProc"

          Attention, car dans ce cas, le classeur possédant la procédure doit être ouvert.




Edited By Depret Grégory                                                                          Page 25
                           Cours de VBA pour Excel 2007

IV - Le modèle objet d'Excel

   La plupart des éléments manipulés dans Excel sont des objets.
   Les objets sont organisés selon un modèle hiérarchique : certains objets contiennent d'autres
   objets qui peuvent eux-mêmes en contenir d'autres.

   Un ensemble d'objets de même nature constitue une collection.

   Un objet dispose d'un ensemble de caractéristiques appelées propriétés et de comportement ou
   actions appelées méthodes.

   Un objet répond à des événements provoqués par l'utilisateur ou le système.

   Excel possède donc plusieurs objets et collections dont je présente ici les principaux

           Collections / Objets                                Description
               Application                 Objet qui représente l'application Excel complète
               Workbooks                            Collection des classeurs ouverts
                                                            (Objet Workbook)
               Worksheets                    Collections des feuilles de calcul d'un classeur
                                                           (Objet Worksheet)
                  Range                 Objet représentant une ou plusieurs cellules d'une feuille
                                                                de calcul
              CommandBars                Collection des barres de commandes de l'application
                                                          (Objet CommandBar)
                Dialogs                    Collection des boîtes de dialogue intégrées d'Excel
           WorksheetFunction             Objet contenant toutes les fonctions disponibles dans
                                                                   Excel




Edited By Depret Grégory                                                                     Page 26
                            Cours de VBA pour Excel 2007

   1 - L'objet Application

      L'objet Application représente l'application Excel complète.

      Les propriétés

              Propriété                                          Description
              ActiveCell            Renvoie un objet Range qui représente la cellule active de la
                                                fenêtre active ou de la fenêtre spécifiée.
                                   Si la fenêtre n'affiche aucune feuille de calcul, cette propriété
                                                                   échoue.
                                       Renvoie un objet Chart qui représente le graphique actif.
             ActiveChart            Lorsqu'aucun graphique n'est actif, cette propriété renvoie la
                                                              valeur Nothing.
            ActivePrinter                  Renvoie ou définit le nom de l'imprimante active.
                                  Renvoie un objet qui représente la feuille active dans le classeur
             ActiveSheet                                      actif ou spécifié.
                                              Renvoie Nothing si aucune feuille n'est active.
                                     Renvoie un objet Window qui représente la fenêtre active.
            ActiveWindow
                                             Renvoie Nothing si aucune fenêtre n'est active.
                                     Renvoie un objet Workbook qui représente le classeur de la
                                                               fenêtre active.
           ActiveWorkbook
                                  Renvoie Nothing si aucune fenêtre n'est ouverte ou si la fenêtre
                                                    ouverte est Info ou Presse-papiers.
                                     Renvoie ou définit une valeur String qui représente le nom
               Caption                affiché dans la barre de titre de la fenêtre Excel principale.
                                     Affectez-lui la valeur "" pour revenir à la valeur par défaut.
                                   Renvoie un objet Range qui représente toutes les cellules de la
                                                          feuille de calcul active.
                Cells
                                       Si le document actif n'est pas une feuille de calcul, cette
                                                             propriété échoue.
                                  Renvoie une collection Sheets qui représente toutes les feuilles
               Charts
                                                       graphiques du classeur actif
                                      Renvoie un objet range qui représente toutes les colonnes
                                                  figurant sur la feuille de calcul active.
              Columns
                                       Si le document actif n'est pas une feuille de calcul, cette
                                                             propriété échoue.
                                    Renvoie un objet CommandBars qui représente les barres de
            CommandBars
                                                          commandes dans Excel
                                    Apparence du pointeur de la souris. Peut prendre 4 valeurs :
               Cursor
                                             (xlDefault, xllBeam, xlNorthwestArraw, xlWait)
                                  Renvoie une collection Dialogs qui représente toutes les boîtes
               Dialogs
                                                         de dialogue prédéfinies.
                                  Renvoie ou définit une valeur de type Double qui représente la
               Height                    haute, exprimée en points, de la fenêtre principale de
                                                                l'application
                                  Renvoie ou définit une valeur de type Double qui représente la
                 Left             distance, exprimée en points, entre le bord gauche de l'écran et
                                        le bord gauche de la fenêtre principale de l'application


Edited By Depret Grégory                                                                    Page 27
                           Cours de VBA pour Excel 2007

           NewWorkbook                               Renvoie un objet NewFile
                                Renvoie un objet Range qui représente toutes les lignes figurant
                                                   sur la feuille de calcul active.
                Rows
                                 Si le document n'est pas une feuille de calcul, cette propriété
                                                               échoue.
              Selection                  Renvoie l'objet sélectionné dans la fenêtre active
                                Renvoie une collection Sheets qui représente toutes les feuilles
               Sheets
                                                        dans le classeur actif
                                     Renvoie ou définit le nombre de feuilles qu'Excel insère
        SheetsInNewWorkbook
                                    automatiquement dans un nouveau classeur (Type Long)
            StandardFont             Renvoie ou définit le nom de la police standard (String)
                                  Renvoie ou définit la taille, exprimée en points, de la police
          StandardFontSize
                                                           standard (Long)
                                      Renvoie ou définit le texte de la barre d'état (String).
              StatusBar          Pour restaurer le texte de la barre d'état, affectez-lui la valeur
                                                                 False.
               ThisCell           Renvoie la cellule à partir de laquelle la fonction est appelée
                                  Renvoie un objet Workbook qui représente le classeur dans
            ThisWorkbook
                                                      lequel s'exécute le code
                                Renvoie ou définit une valeur de type Double qui représente la
                 Top            distance, exprimée en points, entre le bord supérieur de l'écran
                                           et le bord supérieur de la fenêtre principale
                                 Renvoie la hauteur maximale, exprimée en points, de l'espace
            UsableHeight         pouvant être occupé par une fenêtre dans l'espace de travail
                                                               (Double)
                                Renvoie la longueur maximale, exprimée en points, de l'espace
            UsableWidth          pouvant être occupé par une fenêtre dans l'espace de travail
                                                               (Double)
             UserName                 Renvoie ou définit le nom de l'utilisateur actif (String)
                                Renvoie ou définit une valeur de type boolean qui détermine la
               Visible
                                                         visibilité de l'objet
                                Renvoie ou définit une valeur de type Double qui représente la
               Width             distance, exprimée en points, entre le bord gauche et droit de
                                                        la fenêtre principale
                                   Renvoie une collection Windows qui représente toutes les
              Windows
                                                   fenêtres de tous les classeurs
                                              Renvoie ou définit l'état de la fenêtre.
           WindowsState              Elle peut prendre 3 valeurs : xlMaximized, xlMinimized,
                                                              xlNormal
                                 Renvoie une collection Workbooks qui représente l'ensemble
             Workbooks
                                                        des classeurs ouverts
                                Renvoie une collection Sheets qui représente toutes les feuilles
             Worksheets
                                            de calcul contenues dans le classeur actif
         WorksheetFunction                      Renvoie l'objet WorksheetFunction




Edited By Depret Grégory                                                                   Page 28
                           Cours de VBA pour Excel 2007

      Les Méthodes

             Méthodes                                    Description
                                                Ajoute une liste personnalisée
                                         Expression.AddCustomList(ListArray, ByRow)

                                L'argument ListArray spécifie les données source sous la forme
                                d'un tableau de chaîne ou d'un objet Range.
           AddCustomList
                                L'argument ByRow(Facultatif) est utilisé uniquement si ListArray
                                est un objet Range.
                                    Affectez-lui la valeur True pour créer une liste à partir de
                                                         chacune de lignes
                                    Affectez-lui la valeur false pour créer une liste à partir de
                                                         chaque Colonne.
                                                 Supprime une liste personnalisée
                                             Expression.DeleteCustomList(ListNum)
          DeleteCustomList
                                   L'argument ListNum doit être < 4 car Excel est fourni avec 4
                                    listes personnalisées qui ne peuvent pas être supprimées.
                                                  Affiche la boîte de dialogue Ouvrir.
               FindFile         Si un nouveau fichier est ouvert, la méthode renvoie True, sinon
                                                                   False
                                                        Renvoie le N° de la liste
         GetCustomListNum          Cette méthode génère une erreur si la liste correspondante
                                                               n'existe pas
        GetCustomListContents           Renvoie une liste personnalisée (Tableau de chaînes)
                                   Affiche une boîte de dialogue dans laquelle l'utilisateur peut
              InputBox                                     saisir des données.
                                          Elle renvoie les informations saisies dans la boîte
                                        Renvoie un objet Range qui représente l'intersection
              Intersect                     rectangulaire de deux plages ou plus (max 30)
                                     Renvoie Nothing dans le cas de non intersection possible
                                Exécute une procédure spécifiée lorsque l'utilisateur appuie sur
               OnKey
                                             une touche ou une combinaison de touches
                                  Programme l'exécution d'une procédure à un moment précis
               OnTime              Les arguments sont : EarliestTime, Procedure, LastestTime,
                                                                 Schedule
                Quit                                   Quitte l'application Excel
                                                 Enregistre l'espace de travail en cours
           SaveWorkspace
                                               Application.SaveWorkspace "FileName"
               Union                            Renvoie l'union d'au moins deux plages
                                   Marque une pause dans l'exécution de la macro jusqu'à une
                                                            heure spécifiée.
                Wait
                                     Elle renvoie la valeur True si l'heure spécifiée est atteinte
                                                        Expression.Wait(Hour)




Edited By Depret Grégory                                                                  Page 29
                           Cours de VBA pour Excel 2007

   2 - La collection Workbooks

      La collection Workbooks est une collection de tous les objets Workbook ouverts dans
      l'application Excel.

      Les propriétés

              Propriété                                      Description
                                  Cette propriété renvoie une valeur de type Long qui représente
               Count
                                                 le nombre d'objets de la collection
                                       Cette propriété renvoie un seul objet d'une collection
                Item                                  Expression.Item(index)
                                        L'index peut être le nom du fichier entre guillemets

      Les Méthodes

             Méthodes                                        Description
                                      Cette méthode crée un nouveau classeur, qui devient le
                                                            classeur actif.
                                                       Expression.Add(Model)
                                 Model (facultatif) détermine la façon dont le nouveau classeur
                                 est créé.
                Add
                                  Si cet argument est une chaîne spécifiant le nom d'un
                                     fichier, le nouveau classeur est créé d'après le modèle de ce
                                     dernier
                                  Si cet argument est omis, Microsoft Excel crée un nouveau
                                     classeur
                                               Cette méthode ferme l'objet Workbooks
                Close               Si l'un des classeurs a été modifié, Excel affiche le message
                                            approprié et la boîte de dialogue Enregistrer.
                                                  Cette méthode ouvre un classeur
                Open
                                                   Workbooks.Open (FileName,…)




Edited By Depret Grégory                                                                    Page 30
                           Cours de VBA pour Excel 2007

   3 - L'objet Workbook

      L'objet Workbook représente un classeur Microsoft Excel.

      Les propriétés

              Propriété                                      Description
                                 Renvoie un objet qui représente la feuille active dans le classeur
             ActiveSheet                            actif ou le classeur spécifié.
                                          Renvoie Nothing si aucune feuille n'est active.
                                  Renvoie le nom de l'objet, accompagné de son chemin d'accès
              FullName
                                                        sur le disque (String)
                                 Cette propriété a la valeur True si le classeur est protégé par un
            HasPassword
                                                      mot de passe (Boolean)
               Name                Renvoie une valeur qui représente le nom de l'objet (String)
                                   Renvoie ou définit le mot de passe qui doit être fournit pour
              Password
                                                ouvrir le classeur spécifié (String)
                Path                       Renvoie le chemin d'accès du fichier (String)
                                 Cette propriété a la valeur True si le classeur n'a pas été modifié
               Saved
                                          depuis son dernier enregistrement (Boolean)
                                 Renvoie une collection Sheets qui représente toutes les feuilles
               Sheets
                                                      dans le classeur spécifié
                                 Renvoie une collection Sheets qui représente toutes les feuilles
             Worksheets
                                                de calcul dans le classeur spécifié
                                   Renvoie ou définit le mot de passe en écriture d'un classeur
           WritePassword
                                                               (String)

      Les méthodes

             Méthodes                                        Description
              Activate                    Active la première fenêtre associée au classeur
                Close                                       Ferme l'objet
            NewWindow             Crée une nouvelle fenêtre ou une copie de la fenêtre spécifiée
              PrintOut                            Imprime l'objet (toutes les pages)
            PrintPreview                    Affiche un aperçu de l'objet (fenêtre active)
                                                         Protège un classeur
                                        Expression.Protect(Password,Strucutre,Windows)
               Protect               Password (facultatif) : Mot de passe (String)
                                     Structure : True pour protéger la structure du classeur
                                     Windows : True pour protéger les fenêtres du classeur
                Save                Enregistre les modifications apportées au classeur spécifié
                                   Enregistre dans un autre fichier les modifications effectuées
               SaveAs                                      dans le classeur.
                                           Cette méthode possède plusieurs arguments.
                                                 Supprime la protection du classeur.
             Unprotect
                                         Elle est sans effet si le classeur n'est pas protégé




Edited By Depret Grégory                                                                    Page 31
                           Cours de VBA pour Excel 2007

      Les événements

            Evénements                                        Description
                                               Se produit lorsqu'un classeur est activé
              Activate
                                                  Private Sub Workbook_Activate( )
                                 Se produit avant la fermeture du classeur. Si le classeur a été
                                 modifié, cet événement se produit avant que l'utilisateur soit
                                                invité à enregistrer ses modifications.
             BeforeClose            Private Sub Workbook_BeforeClose(Cancel As Boolean)
                                    L'argument Cancel a la valeur False lorsque l'événement
                                        se produit. Si la procédure lui affecte la valeur True,
                                        l'opération de fermeture s'arrête.
                                            Se produit avant l'impression du classeur.
                                     Private Sub Workbook_BeforePrint(Cancel As Boolean)
             BeforePrint            L'argument Cancel a la valeur False lorsque l'événement
                                        se produit. Si la procédure lui affecte la valeur True, le
                                        classeur n'est pas imprimé.
                                          Se produit avant l'enregistrement du classeur.
                                Private Sub Workbook_BeforeSave(ByVal SaveASUI As Boolean,
                                                          Cancel As Boolean)
                                    L'argument SaveASUI a la valeur True si la boîte de
             BeforeSave
                                        dialogue Enregistrer sous s'affiche
                                    L'argument Cancel a la valeur False lorsque l'événement
                                        se produit. Si la procédure lui affecte la valeur True, le
                                        classeur n'est pas enregistré.
                                           Se produit lorsque le classeur est désactivé.
             Deactivate
                                                 Private Sub Workbook_Deactivate( )
                                Se produit lorsqu'une nouvelle feuille est créée dans le classeur
                                     Private Sub Workbook_NewSheet(ByVal Sh As Object)
             NewSheet
                                    L'argument Sh correspond à la nouvelle feuille
                                        (Worksheet ou Chart)
                                               Survient lorsque le classeur est ouvert.
                Open
                                                    Private Sub Workbook_Open( )
                                             Se produit lorsqu'une feuille est activée.
                                   Private Sub Workbook_SheetActivate(ByVal Sh As Object)
            SheetActivate
                                    L'argument Sh correspond à la feuille activée
                                        (Worksheet ou Chart)
                                Se produit lorsque l'utilisateur double-clique sur une feuille de
                                              calcul avant le double-clique par défaut.
                                  Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As
                                    Object, ByVal Target As Range, ByVal Cancel As Boolean)
                                    L'argument Sh est un objet Worksheet qui représente la
       SheetBeforeDoubleClick           feuille de calcul
                                    L'argument Target correspond à la cellule la plus proche
                                        du pointeur lorsque le double clic se produit
                                    L'argument Cancel a la valeur False lorsque l'événement
                                        se produit. Si la procédure lui affecte la valeur True,
                                        l'action du double clic n'est pas effectuée




Edited By Depret Grégory                                                                  Page 32
                           Cours de VBA pour Excel 2007

                                 Se produit lorsque l'utilisateur clique avec le bouton droit sur
                                           une feuille de calcul avant le clic par défaut.
                                   Private Sub Workbook_SheetBeforeRightClick(ByVal Sh As
                                    Object, ByVal Target As Range, ByVal Cancel As Boolean)
                                    L'argument Sh est un objet Worksheet qui représente la
        SheetBeforeRightClick           feuille
                                    L'argument Target correspond à la cellule la plus proche
                                        du pointeur lorsque le clic se produit
                                    L'argument Cancel a la valeur False lorsque l'événement
                                        se produit. Si la procédure lui affecte la valeur True,
                                        l'action du clic droit n'est pas effectuée
                                   Se produit lorsque des cellules d'une feuille de calcul sont
                                                              modifiées
                                Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal
            SheetChange                                   Source As Range)
                                    L'argument Sh est l'objet Worksheet qui représente la
                                        feuille de calcul
                                    L'argument Source correspond à la plage modifiée
                                            Se produit lorsqu'une feuille est désactivée
                                  Prive Sub Workbook_SheetDeactivate(ByVal Sh As Object)
           SheetDeactivate
                                    L'argument Sh correspond à la feuille (Worksheet ou
                                        Chart)




Edited By Depret Grégory                                                                  Page 33
                           Cours de VBA pour Excel 2007

   4 - La collection Worksheets

      Les propriétés

             Propriétés                                   Description
                                  Renvoie une valeur de type Long qui représente le nombre
               Count
                                                   d'objets de la collection
                                            Renvoie un seul objet d'une collection
                                                   Expression.Item(Index)
                Item
                                    L'argument Index correspond au nom ou à l'index de
                                      l'objet
               Visible            Renvoie ou définit l'état de visibilité de l'objet (True/False)




Edited By Depret Grégory                                                                    Page 34
                           Cours de VBA pour Excel 2007

      Les méthodes

             Méthodes                                      Description
                                 Crée une nouvelle feuille de calcul, un nouveau graphique ou
                                                  une nouvelle feuille macro.
                                           Expression.Add(Before,After,Count,Type)
                                    L'argument Before spécifie la feuille avant laquelle la
                                       nouvelle feuille est ajoutée
                                    L'argument After spécifie la feuille après laquelle la
                                       nouvelle feuille est ajoutée
                Add
                                    L'argument Count correspond au nombre de feuilles à
                                       ajouter (1 par défaut)
                                    L'argument Type spécifie le type de feuille : xlWorksheet
                                       (par défaut), xlChart

                                 Si les arguments Before et After sont omis, la nouvelle feuille
                                                 est insérée avant la feuille active
                                    Copie la feuille à un autre emplacement dans le classeur
                                                  Expression.Copy(Before,After)
                                    L'argument Before spécifie la feuille avant laquelle la
                                        feuille copiée sera placée
                Copy                L'argument After spécifie la feuille après laquelle la
                                        feuille copiée sera placée

                                  Si les arguments Before et After sont omis, Excel crée un
                                         nouveau classeur contenant la feuille copiée
               Delete                                   Supprime l'objet
                                        Déplace la feuille à un autre endroit du classeur
                                                 Expression.Move(Before,After)
                                   L'argument Before spécifie la feuille avant laquelle la
                                       feuille sera déplacée
               Move                L'argument After spécifie la feuille après laquelle la
                                       feuille sera déplacée

                                   Si les arguments Before et After sont omis, Excel crée un
                                         nouveau classeur contenant la feuille déplacée
              PrintOut                 Imprime le classeur (Possède plusieurs arguments)
            PrintPreview                          Affiche un aperçu de l'objet
                Select                                 Sélectionne l'objet




Edited By Depret Grégory                                                                  Page 35
                           Cours de VBA pour Excel 2007

   5 - L'objet Worksheet

      Les propriétés

             Propriétés                                        Description
                                  Renvoie un objet Range qui représentes toutes les cellules
                Cells
                                                 contenues dans la feuille de calcul
                                 Renvoie un objet Range qui représente toutes les colonnes
              Columns                          figurant sur la feuille de calcul active.
                                Si la feuille n'est pas une feuille de calcul, la propriété échoue
                                Renvoie une valeur de type Long qui représente le numéro de
                Index
                                                   l'index au sein de la collection
                                Renvoie ou définit une valeur de type String qui représente le
               Name
                                                             nom de l'objet
                Next            Renvoie un objet Worksheet qui représente la feuille suivante
                                     Renvoie un objet Worksheet qui représente la feuille
              Previous
                                                               précédente
                                 Renvoie un objet Range qui représente une cellule ou plage
               Range
                                                   Expression.Range(Cell1,Cell2)
                                    Renvoie un objet Range qui représente toutes les lignes
                Rows
                                          contenues dans la feuille de calcul spécifiée.
                Sort                    Renvoie les valeurs triées dans la feuille de calcul
                                Renvoie un objet Range qui représente la plage utilisée dans la
             UsedRange
                                                       feuille de calcul spécifiée
                                   Renvoie ou définit l'état de visibilité de la feuille de calcul
               Visible
                                                              (True/False)




Edited By Depret Grégory                                                                   Page 36
                           Cours de VBA pour Excel 2007

      Les méthodes

             Méthodes                                      Description
              Activate                            Active la feuille sélectionnée
                                   Copie la feuille à un autre emplacement dans le classeur
                                                 Expression.Copy(Before,After)
                                    L'argument Before spécifie la feuille avant laquelle la
                                      feuille sera copiée
                Copy                L'argument After spécifie la feuille après laquelle la
                                      feuille sera copiée

                                   Si les arguments Before et After sont omis, Excel crée un
                                          nouveau classeur contenant la feuille copiée
                                                       Supprime l'objet

                                 Lorsque vous supprimez un objet Worksheet, cette méthode
               Delete
                                affiche une boîte de dialogue qui invite l'utilisateur à confirmer
                                la suppression. La méthode Delete renvoie alors la valeur False
                                si l'utilisateur a cliqué sur Annuler et True dans le cas contraire
                                           Déplace la feuille à un autre endroit du classeur
                                                    Expression.Move(Before,After)
                                     L'argument Before spécifie la feuille avant laquelle la
                                          feuille sera déplacée
               Move                  L'argument After spécifie la feuille après laquelle la
                                          feuille sera déplacée

                                   Si les arguments Before et After sont omis, Excel crée un
                                         nouveau classeur contenant la feuille déplacée
              PrintOut                    Imprime l'objet (possède plusieurs arguments)
            PrintPreview                            Affiche un aperçu de l'objet
               Protect             Protège la feuille de calcul (possède plusieurs arguments)
                                Enregistre dans un autre fichier les modifications effectuées sur
               SaveAs
                                        la feuille de calcul (possède plusieurs arguments)
               Select                                    Sélectionne l'objet
                                                          Déprotège l'objet
             Unprotect
                                                  Expression.Unprotect(Password)




Edited By Depret Grégory                                                                    Page 37
                           Cours de VBA pour Excel 2007

      Les événements

            Evénements                                     Description
                                Se produit lorsqu'une feuille de calcul est incorporée ou activé
              Activate
                                               Private Sub Worksheet_Activate( )
                                Se produit lorsqu'un utilisateur double clique sur une feuille de
                                              calcul, avant le double clic par défaut
                                  Private Sub Worksheet_BeforeDoubleClick(ByVal Target As
                                                   Range, Cancel As Boolean)
          BeforeDoubleClick         L'argument Target correspond à la cellule la plus proche
                                       du pointeur lorsque le double clic se produit
                                    L'argument Cancel a la valeur False lorsque l'événement
                                       se produit. Si la procédure lui affecte la valeur True, le
                                       double clic n'est pas effectué
                                Se produit lorsqu'un utilisateur clique du bouton droit sur une
                                                         feuille de calcul
                                   Private Sub Worksheet_BeforeRightClick(ByVal Target As
                                                   Range, Cancel As Boolean)
           BeforeRightClick         L'argument Target correspond à la cellule la plus proche
                                       du pointeur lorsque le double clic se produit
                                    L'argument Cancel a la valeur False lorsque l'événement
                                       se produit. Si la procédure lui affecte la valeur True, le
                                       double clic n'est pas effectué
                                   Se produit lorsque des cellules de la feuille de calcul sont
                                                             modifiées
               Change               Private Sub Worksheet_Change(ByVal Target As Range)
                                    L'argument Target correspond à la cellule ou plage
                                       modifiée
                                     Se produit lorsqu'une feuille de calcul est désactivée
             Deactivate
                                              Private Sub Workbook_Deactivate( )
                                 Survient lorsque la sélection change dans une feuille de calcul
                                   Private Sub Worksheet_SelectionChange(ByVal Target As
           SelectionChange                                    Range)
                                    L'argument Target correspond à la nouvelle cellule ou
                                       plage sélectionnée




Edited By Depret Grégory                                                                 Page 38
                           Cours de VBA pour Excel 2007

   6 - L'objet Range

      Les propriétés

             Propriétés                                       Description
                                 Renvoie une valeur de type String qui représente la référence
              Address
                                                     de la plage en langage macro
                                 Renvoie une valeur de type String qui représente la référence
            AddressLocal
                                                   de la plage en langage utilisateur
                                 Renvoie un objet Range qui représente les cellules contenues
                Cells
                                                         dans la plage spécifiée
                                Renvoie le numéro de la première colonne de la première zone
               Column
                                                          de la plage spécifiée
                                  Renvoie un objet Range qui représente les colonnes figurant
              Columns
                                                         dans la plage spécifiée
                                   Renvoie une valeur de type Long qui représente le nombre
               Count
                                                        d'objets de la collection
                                   Compte la valeur la plus grande dans une plage de valeurs
             CountLarge
                                                                données
                                  Si la cellule spécifiée fait partie d'un tableau, cette propriété
            CurrentArray
                                     renvoie un objet Range qui représente le tableau entier
                                Renvoie un objet Range qui représente la zone en cours. Celle-ci
           CurrentRegion           est une plage limitée par toutes combinaisons de lignes et
                                                             colonnes vides
                                  Renvoie un objet Range qui représente la cellule de fin de la
                                                   zone qui contient la plage source
                End                                    Expression.End(Direction)
                                     L'argument Direction peut prendre les valeurs : xlUp,
                                         xlDown, xlToRight, xlToLeft
                                 Renvoie un objet Range qui représente la colonne entière (ou
            EntireColumn
                                             les colonnes) contenant la plage spécifiée
                                 Renvoie un objet Range qui représente la ligne entière (ou les
             EntireRow
                                                 lignes) contenant la plage spécifiée
                                 Cette propriété a la valeur True si la cellule spécifiée fait partie
              HasArray
                                                       d'une formule matricielle
                                 Renvoie un objet Range qui représente une plage décalée par
                Item                                  rapport à la plage spécifiée
                                               Expression.Item(IndexLigne,IndexCol)
                                Renvoie ou définit une valeur de type Variant qui représente le
               Name
                                                             nom de l'objet
                Next                Renvoie un objet Range qui représente la cellule suivante
                                Renvoie un objet Range qui représente une plage décalée de la
               Offset                                        plage spécifiée
                                            Expression.Offset(RowOffset,ColumnOffset)
              Previous            Renvoie un objet Range qui représente la cellule précédente
                                 Renvoie un objet Range qui représente une cellule ou plage de
               Range
                                                                 cellules
                                Renvoie le numéro de la première ligne de la première zone de
                Row
                                                                la plage.


Edited By Depret Grégory                                                                     Page 39
                           Cours de VBA pour Excel 2007

                                 Renvoie un objet Range qui représente les lignes contenues
                Rows
                                                    dans la plage spécifiée
                Text                    Renvoie ou définit le texte de l'objet spécifié
                                Renvoie ou définit une valeur de type Variant qui représente la
               Value
                                                  valeur de la plage spécifiée
               Value2                      Renvoie ou définit la valeur de la cellule
                                Renvoie un objet Worksheet qui représente la feuille de calcul
             Worksheet
                                                     de la plage spécifiée

      Les méthodes

              Méthodes                                      Description
               Activate                             Active une seule cellule
                Clear                               Supprime l'objet entier
            ClearContents                       Efface les formules de la plage
                Copy            Copie la plage vers la plage spécifiée ou dans le presse papier
                Delete                                   Supprime l'objet
                                 Remplit la plage spécifiée de haut en bas avec la valeur de la
              FillDown
                                                           ligne du haut
                                Remplit la plage spécifiée de droite à gauche avec la valeur de
               FillLeft
                                                       la colonne de droite
                                Remplit la plage spécifiée de gauche à droite avec la valeur de
              FillRight
                                                      la colonne de gauche
                                 Remplit la plage spécifiée de bas en haut avec la valeur de la
               FillUp
                                                            ligne du bas
                Insert                            Insère une cellule ou plage
              PrintOut                 Imprime l'objet (Contient plusieurs arguments)
            PrintPreview                          Affiche un aperçu de l'objet
                Select                                  Sélectionne l'objet
                 Sort                    Trie une plage de valeurs (Voir aide en ligne)




Edited By Depret Grégory                                                                Page 40
                           Cours de VBA pour Excel 2007

      6.1 - La propriété Range

          La propriété Range renvoie à un objet Range. Elle possède deux syntaxes :

                 Object.Range(cell1)
                 Object.Range(cell1,cell2)

          La propriété Range s'applique à 1 types d'objets : un objet Worksheet ou Range.
          La plupart du temps, ce n'est que pour l'objet Worksheet que cette propriété est utilisée.

          Voici quelques exemples d'utilisation :

              Worksheets ("Sheet1").Range ("A1").Value = 1
                Ecrit la valeur 1 dans la cellule A1
              Worksheets ("Sheet1").Range ("CelluleNommée").Value = 1
                Ecrit la valeur 1 dans la cellule nommée "CelluleNommée"
              Worksheets ("Sheet1").Range ("A1:A10").Value = 1
                Ecrit la valeur 1 dans la plage A1:A10
              Worksheets ("Sheet1").Range ("A1,A3,A5,A7,A9").Value = 1
                Ecrit la valeur 1 dans les cellules A1, A3, A5, A7 et A9

      6.2 - La propriété Cells

          La propriété Cells s'utilise sur des objets Worksheet et Range. Elle possède 3 syntaxes :

                 Object.Cells (RowIndex, ColumnIndex)
                 Object.Cells (RowIndex)
                 Object.Cells

          Voici quelques exemples d'utilisation :

              Worksheets ("Sheet1").Cells(1,1) = 9
                Ecrit 9 dans la cellule A1
              Worksheets ("Sheet1").Cells(3,4) = 9
                Ecrit 9 dans la cellule D3
              Worksheets ("Sheet1").Cells.ClearContents
                Efface toutes les cellules de la feuille




Edited By Depret Grégory                                                                      Page 41
                           Cours de VBA pour Excel 2007

      6.3 - La propriété Offset

          La propriété Offset renvoie également un objet Range mais ne s'applique qu'à un objet
          Range. Sa syntaxe est la suivante :

             Object.Offset (RowOffset, ColumnOffset)

          La propriété Offset comprend deux arguments qui correspond à la position relative à
          partir de la cellule supérieure gauche de l'objet Range spécifié.
          Les arguments peuvent être positif ou négatifs ou nuls.

          Voici quelques exemples d'utilisation :

             ActiveCell.Offset(1,0).Value = 12
                 Ecrit la valeur 12 dans la cellule sous la cellule active




Edited By Depret Grégory                                                                  Page 42
                           Cours de VBA pour Excel 2007

   7 - Exemples d'utilisation des objets

          Création / Suppression d'une liste personnalisée

             Dim NumList As Integer

             Sub CreateList ( )
                 Dim i As Integer
                 Dim TabList As Variant

                 Application.AddCustomList Array("Nord","Est","Sud","Ouest","Centre")
                 NumList = Application.GetCustomListNum (Array("Nord","Est","Sud","Ouest","Centre"))

                 TabList = Application.GetCustomListContents(NumList)

                For i = Lbound(TabList,1) To Ubound(TabList,1)
                    Cells(i,1) = TabList(i)
                Next i
             End Sub

             Sub DeleteList ( )
                 Application.DeleteCustomList(NumList)
             End Sub


          Sélection de cellules disjointes

             Sub SelectCell ( )
                 Dim Sel As Range
                 Set Sel = Application.Union(Cells(1,1),Cells(3,3),Cells(5,5))
                 Sel.Select
             End Sub

          Sélection d'une intersection de plages

             Sub SelectIntersect ( )
                 Dim Sel As Range
                 Set Sel = Application.Intersect(Range("A1:C15"),Range("B6:E15"))

                If Sel Is Nothing Then
                     MsgBox ("Intersection non possible")
                Else
                     Sel.Select
                End If
             End Sub




Edited By Depret Grégory                                                                    Page 43
                           Cours de VBA pour Excel 2007

          Exécuter une procédure après 15 secondes

             Sub Delai( )
                 Application.OnTime Earliest:= Now + TimeValue("00:00:15"), Procedure:= "Proc"
                 Application.OnTime EarliestTime:= TimeValue("17:00:00"), Procedure:= "Proc"
             End Sub

             Sub Proc( )
                 MsgBox ("Le délai de 15 secondes est passé")
             End Sub

             Sub DeleteDelai( )
                 Application.OnTime EarliestTime:= Now + TimeValue("00:00:15"), _
                     Procedure:= "Proc", Schedule:= False
                 * L'argument Schedule permet d'annuler le paramètre de OnTime
             End Sub


          Suspendre une procédure

             Sub Suspendre( )
                 MsgBox ("Voici le début de la procédure")
                 Application.Wait (Now + TimeValue("00:00:10"))
                 MsgBox ("Voici la fin de la procédure")
             End Sub

          Une fonction FeuilleExist

             Private Function FeuilleExist (ByVal Feuille As Worksheet) As Boolean
                 Dim Sh As Object
                 On Error Resume Next
                      Set Sh = ActiveWorkbook.Sheets(Feuille)
                      If Err = 0 Then FeuilleExist = True
                      Else FeuilleExist = False
             End Function




Edited By Depret Grégory                                                                     Page 44
                             Cours de VBA pour Excel 2007

V - Les UserForm

   1 - Utiliser une boîte de dialogue InputBox

      Les InputBox sont de simples boîtes de dialogue qui permettent à l'utilisateur d'opérer une
      unique saisie d'informations.

      Il existe 2 fonctions InputBox : l'une provenant d'Excel, l'autre de VBA.

      1.1 - La fonction InputBox de VBA

          La syntaxe est :

              InputBox (Prompt,[Title],[Default],[Xpos,Ypos],[Helpfile,Context])

                    Prompt (obligatoire) : Texte affiché dans la boîte
                    Title (facultatif) : Légende de la barre de titre de la boîte
                    Default (facultatif) : Valeur par défaut affichée dans la boîte
                    Xpos,Ypos (facultatif) : Coordonnées de la boîte
                    Helpfile,Context (facultatif) : Fichier d'aide et sujet d'aide associés

          La fonction retourne toujours une chaîne de caractères. Il peut être nécessaire de
          convertir le résultat.




Edited By Depret Grégory                                                                       Page 45
                             Cours de VBA pour Excel 2007

      1.2 - La méthode InputBox d'Excel

          Le recours à la méthode InputBox d'Excel offre 3 avantages :

                 Vous pouvez spécifier le type de données retournées
                 L'utilisateur peut spécifier une plage de cellules à l'aide de la souris
                 La validation des données est exécutée automatiquement

          La syntaxe est :

              Object.InputBox (Prompt,[Title],[Default],[Left,Top],[Helpfile,Context],[Type])

                     Prompt (obligatoire) : Texte affiché dans la boîte
                     Title (facultatif) : Légende de la barre de titre de la boîte
                     Default (facultatif) : Valeur par défaut affichée dans la boîte
                     Left,Top (facultatif) : Coordonnées de la boîte
                     Helpfile,Context (facultatif) : Fichier d'aide et sujet d'aide associés
                     Type (facultatif) : Un code pour le type de données retournées (voir tableau
                      suivant)

                     Code                              Signification
                      0                                Une formule
                      1                                 Un nombre
                      2                         Une chaîne de caractères
                      4                       Une valeur logique (True/False)
                      8                         Une référence de cellules
                      16                           Une valeur d'erreur
                      32                           Un tableau de valeur

              La méthode InputBox d'Excel est assez polyvalente. Pour spécifier plusieurs types de
              données, il suffit d'additionner les valeurs de code.
              Par exemple, pour afficher une boîte qui accepte du texte et des valeurs numériques,
              définissez un type égal à 3 (1 + 2).

              Exemple

                  Sub EffacerPlage( )
                      Dim Plage As Range
                      On Error GoTo Canceled
                      Set Plage = Application.InputBox Prompt:="Plage à effacer", Type:=8
                      Plage.Clear
                      Canceled:
                  End Sub




Edited By Depret Grégory                                                                        Page 46
                           Cours de VBA pour Excel 2007

   2 - La fonction MsgBox

      La fonction MsgBox est un moyen simple d'afficher un message à l'attention de l'utilisateur
      ou d'obtenir de sa part une réponse simple (par exemple, Ok ou Annuler).

      La syntaxe est :

          MsgBox (Prompt,[Buttons],[Title],[Helpfile,Context])

                  Prompt (obligatoire) : Texte affiché dans la boîte
                  Buttons (facultatif) : Expression numérique qui détermine les boutons et l'icône à
                   afficher dans la boîte (Voir tableau suivant)
                  Title (facultatif) : Légende de la barre de titre de la boîte
                  Helpfile,Context (facultatif) : Fichier d'aide et sujet d'aide associés

                     Constante                                    Description
                     vbOKOnly                                Affiche le bouton Ok
                    vbOKCancel                        Affiche les boutons Ok et Annuler
                 vbAbortRetryIgnore        Affiche les boutons Abandonner, Réessayer et Ignorer
                   vbYesNoCancel                  Affiche les boutons Oui, Non et Annuler
                      vbYesNo                           Affiche les boutons Oui et Non
                   vbRetryCancel                  Affiche les boutons Réessayer et Ignorer

                     vbCritical                        Affiche l'icône Message critique
                    vbQuestion                    Affiche l'icône Requête d'avertissement
                   vbExclamation                  Affiche l'icône Message d'avertissement
                   vbInformation                   Affiche l'icône Message d'information

                 vbDefaultButton1               Le premier bouton est le bouton par défaut
                 vbDefaultButton2                Le second bouton est le bouton par défaut
                 vbDefaultButton3              Le troisième bouton est le bouton par défaut
                 vbDefaultButton4              Le quatrième bouton est le bouton par défaut

                  vbSystemModal             Toutes les applications sont interrompues jusqu'à ce
                                                    que l'utilisateur réponde au message

          La fonction MsgBox retourne en résultat, le bouton sur lequel l'utilisateur a cliqué.
          Le tableau suivant énumère les différentes valeurs de retour possibles :

                  Constante                         Description
                     vbOK                               Ok
                   vbCancel                           Annuler
                   vbAbort                            Annuler
                    vbRetry                          Réessayer
                   vbIgnore                           Ignorer
                     vbYes                              Oui
                     vbNo                               Non


Edited By Depret Grégory                                                                      Page 47
                           Cours de VBA pour Excel 2007

          Exemple

             Sub Mess ( )
                 Dim Rep As Integer
                 Dim Config As Integer

                Config = vbYesNo + vbQuestion + vbDefaultButton2
                Rep = MsgBox ("Une erreur est intervenue. Continuer ?", Config)
                If Rep = vbNo Then Exit Sub
                MsgBox ("Félicitation, vous avez continué")
             End Sub




Edited By Depret Grégory                                                          Page 48
                           Cours de VBA pour Excel 2007

   3 - La méthode GetOpenFilename d'Excel

      La méthode GetOpenFilename permet d'obtenir un nom de fichier valide aussi bien que son
      chemin complet.
      Cette méthode ouvre la boîte de dialogue Ouvrir, mais n'ouvre pas réellement le fichier
      indiqué.
      Elle retourne une chaîne de caractères qui contient le chemin et le nom du fichier sélectionné
      par l'utilisateur.
      Vous pouvez ensuite manipuler ces informations comme vous le souhaitez.

      La syntaxe est :

          Object.GetOpenFilename ([FileFilter],[FilterIndex],[Title],[ButtonText],[MultiSelect])

                 FileFilter (facultatif) : Une chaîne spécifiant les critères de filtrage des fichiers
                 FilterIndex (facultatif) : Numéros d'index du critère par défaut
                 Title (facultatif) : Titre de la boîte de dialogue
                 ButtonText (facultatif) : Pour Macintosh seulement
                 MultiSelect (facultatif) : Si cet argument vaut True, plusieurs noms de fichiers
                  peuvent être sélectionnés. La valeur par défaut est False.

          L'argument FileFilter détermine ce qui apparaît dans la liste des types de fichiers.
          L'argument est constitué d'une paire de chaîne de filtre de fichiers, suivie par le joker de
          spécification de filtre.
          Chaque partie et chaque paire étant séparées par des virgules.
          S'il est omis, cet argument vaut par défaut :

              "Tous les fichiers (*.*), *.*"




Edited By Depret Grégory                                                                           Page 49
                           Cours de VBA pour Excel 2007

          Exemple

             Sub ObtenirFichier( )
                 Dim Filt As String
                 Dim IndexFilt As Integer
                 Dim Nom As Variant
                 Dim Titre As String
                 Dim i As Integer
                 Dim Msg As String

                 'Définit la liste des filtres de fichiers
                 Filt = "Fichiers texte (*.txt), *.txt" & "Fichiers Excel (*.xlsx), *.xlsx"

                 ' Affiche *.txt par défaut
                 IndexFilt = 1

                 ' Définit la légende de la boîte
                 Titre = "Sélectionner un fichier à importer"

                 ' Obtenir le nom de fichier
                 Nom = Application.GetOpenFilename FileFilter:=Filt, FilterIndex:=IndexFilt, _
                     Title:=Titre, MultiSelect:=True)

                 ' Quitter si la boîte de dialogue est annulée
                 If Not IsArray(Nom) Then
                     MsgBox ("Aucun fichier n'a été sélectionné")
                     Exit Sub
                 End If

                 ' Affiche le chemin complet et le nom des fichiers
                 For i = Lbound(Nom) To Ubound(Nom)
                      Msg = Msg & Nom(i) & vbCrLf
                 Next i

                MsgBox ("Vous avez sélectionné : " & vbCrLf & Msg
             End Sub




Edited By Depret Grégory                                                                         Page 50
                           Cours de VBA pour Excel 2007

   4 - La méthode GetSaveAsFilename d'Excel

      La méthode GetSaveAsFilename est très semblable à la méthode GetOpenFilename vu
      précédemment.
      Elle affiche une boîte de dialogue Enregistrer sous et permet à l'utilisateur de choisir un
      fichier.
      Elle retourne un nom de fichier et un chemin, mais ne réalise aucune action particulière.

      La syntaxe est :

          Object.GetSaveAsFilename ([InitialFilename],[FileFilter],[FilterIndex],[Title],[ButtonText])

                 InitialFilename (facultatif) : Nom de fichier suggéré
                 FileFilter (facultatif) : Chaîne spécifiant les critères de filtrage de fichiers
                 FilterIndex (facultatif) : Numéro d'index du critère par défaut
                 Title (facultatif) : Titre de la boîte
                 ButtonText (facultatif) : Pour Macintosh seulement




Edited By Depret Grégory                                                                             Page 51
                           Cours de VBA pour Excel 2007

   5 - Afficher et fermer des UserForm

      Pour afficher un UserForm avec VBA, utilisez la méthode Show de l'objet UserForm.

          UserForm.Show ( )

      L'instruction doit être placée dans un module VBA et non dans le module de l'UserForm.

      Lorsqu'un UserForm est affiché, il reste visible à l'écran même s'il n'est plus actif. En général,
      vous ajouterez un bouton à l'UserForm afin d'exécuter une procédure qui le fait disparaître.
      La procédure peut soit décharger le UserForm (Unload), soit le masquer (Hide).

      Il est également possible d'afficher un UserForm non modal, qui vous permet de continuer à
      travailler dans Excel pendant qu'il reste visible.
      Par défaut, les UserForm sont affichés de manière modale.
      Pour afficher un UserForm non modale, utilisez la syntaxe suivante :

          UserForm.Show 0

      Si le nom de l'UserForm est enregistré dans une variable chaîne, vous pouvez utiliser la
      méthode Add :

          Nom = "UserForm1"
          UserForm.Add (Nom).Show

      VBA possède également une instruction Load, qui charge l'UserForm en mémoire mais reste
      invisible tant que vous n'utilisez pas la méthode show :

          Load UserForm

      Pour fermer un UserForm, utilisez l'instruction UnLoad comme ceci :

          Unload UserForm

      Si le code est situé dans le module de code pour l'UserForm, utilisez l'instruction suivante :

          UnLoad Me

      Votre code ne peut plus accéder aux choix de l'utilisateur après le déchargement.
      Les UserForm possèdent aussi une méthode Hide. Lorsque vous appelez cette méthode, le
      UserForm disparaît mais reste chargé en mémoire, ainsi votre code peut accéder aux diverses
      propriétés du contrôle.

          UserForm.Hide                Me.Hide


Edited By Depret Grégory                                                                        Page 52
                           Cours de VBA pour Excel 2007

   6 – La fenêtre UserForm principale

      Un objet UserForm est une fenêtre ou une boîte de dialogue entrant dans la composition
      d'une interface utilisateur.
      La collection UserForms est l'ensemble des objets UserForm chargés dans une application.

      L'UserForm principal possède un événement très important : Initialize se produit lorsque
      l'UserForm est chargé, avant que celui-ci ne s'affiche.

          Private Sub UserForm_Initialize ( )

      L'UserForm possède également l'événement QueryClose qui se produit avant la fermeture de
      l'UserForm.

          Private Sub UserForm_QueryClose (Cancel,CloseMode)

                Cancel : Si vous affecter une valeur différente de 0, l'objet UserForm ne se ferme
                 pas
                CloseMode : valeur qui indique la cause de l'événement
                  vbFormControlMenu : l'utilisateur a choisit la commande fermeture
                  vbFormCode : l'instruction Unload a été appelée
                  vbAppWindows : La session courante est en train de s'achever
                  vbAppTaskManager : Le gestionnaire de tâches ferme l'application

      Sur l'UserForm principal, il est possible d'ajouter des contrôles qui font partie de la collection
      Controls : Voir la suite pour les contrôles disponibles.




Edited By Depret Grégory                                                                        Page 53
                            Cours de VBA pour Excel 2007

   7 – Liste des propriétés standard des contrôles

             Propriétés                                    Description
               Name                                      Nom du contrôle

              BackColor                                Spécifie la couleur de fond
              BackStyle                    Renvoie ou définit le style de fond du contrôle
            BorderColor                           Spécifie la couleur de la bordure
             BorderStyle                               Spécifie le type de bordure
                Font                                        Spécifie la police
              ForeColor                          Spécifie la couleur du premier plan
            SpecialEffect                       Spécifie l'aspect à l'écran du contrôle
                                   Distance entre le contrôle et le bord gauche de la feuille qui
                Left
                                                             contient l'objet
                                 Distance entre le contrôle et le bord supérieur de la feuille qui
                Top
                                                          contient le contrôle
               Height                                 Spécifie la hauteur en points
               Width                                  Spécifie la largeur en points
                                  Spécifie si un objet se redimensionne automatiquement pour
              AutoSize                     afficher la totalité de son contenu (True/False)
                                       Fonctionne en parallèle avec la propriété WordWrap
                                    Indique si un retour à la ligne s'ajoute automatiquement
             WordWrap                                          (True/False)
                                         Fonctionne en parallèle avec la propriété AutoSize
                                 Spécifie le texte apparaissant lorsque l'utilisateur maintient le
           ControlTipText
                                          pointeur de la souris sur le contrôle sans cliquer
                                 Spécifie le type de pointeur affiché lorsque l'utilisateur place la
            MousePointer
                                                      souris au dessus du contrôle
              Enabled                       Spécifie si le contrôle peut recevoir le focus
              TabStop                Indique si le contrôle peut recevoir le focus (True/False)
              TabIndex             Spécifie la position du contrôle dans l'ordre des tabulations
               Visible                  Spécifie si l'objet est visible ou masqué (True/False)
                Value            Spécifie la valeur du contrôle sauf pour Image, Frame et Label
               Caption                                       Texte de l'objet
               Locked                          Spécifie si le contrôle peut être modifié




Edited By Depret Grégory                                                                     Page 54
                           Cours de VBA pour Excel 2007

   8 – Liste des événements standard des contrôles

      BeforeDragOver

          Survient lorsqu'une opération Glisser-Déposer est en cours.
          Syntaxes :

             Pour un contrôle Frame
                 Private Sub Object_BeforeDragOver (Cancel,Ctrl,Data,X,Y,DragState,Effect,Shift)


             Pour un contrôle MultiPage
                 Private Sub Object_BeforeDragOver (Index,Cancel,Ctrl,Data,X,Y,DragState,Effect,Shift)


             Pour un contrôle TabStrip
                 Private Sub Object_BeforeDragOver (Index,Cancel,Data,X,Y,DragState,Effect,Shift)


             Pour d'autres contrôles
                 Private Sub Object_BeforeDragOver (Cancel,Data,X,Y,DragState,Effect,Shift)


                        Index : Index de l'objet page
                        Cancel : False indique que le contrôle doit gérer l'événement (valeur par
                         défaut). True indique que l'application gère l'événement.
                        Ctrl : Contrôle déplacé
                        Data : Données qui sont déplacées dans l'opération Glisser-Déposer. Les
                         données sont groupées dans un DataObject.
                        X,Y : Coordonnées horizontales et verticale de la position du contrôle
                        DragState : Etat transitoire des données en cours de déplacement
                          fmDragStateEnter : le pointeur est dans la plage d'une cible
                          fmDragStateLeave : le pointeur est hors de la plage d'une cible
                          fmDragStateOver : le pointeur est sur une nouvelle position
                        Effect : Opérations prises en charge par la source
                          fmDropEffectNone : ne copie ni déplace la source vers la cible
                          fmDropEffectCopy : copie la source vers la cible
                          fmDropEffectMove : déplace la source vers la cible
                          fmDropEffectCopyOrMove : copie ou déplace la source vers la cible
                        Shift : Spécifie l'état de MAJ, CTRL et ALT
                          fmShiftMask : MAJ est enfoncé
                          fmCtrlMask : CTRL est enfoncé
                          fmAltMask : ALT est enfoncé




Edited By Depret Grégory                                                                           Page 55
                           Cours de VBA pour Excel 2007

      BeforeDropOrPaste

          Survient lorsque l'utilisateur est sur le point de déplacer ou coller des données sur un
          objet.
          Syntaxes :

             Pour un contrôle Frame
                 Private Sub Object_BeforeDropOrPaste(Cancel,Ctrl,Action,Data,X,Y,Effect,Shift)


             Pour un contrôle MultiPage
                 Private Sub Object_BeforeDropOrPaste(Index,Cancel,Ctrl,Action,Data,X,Y,Effect,Shift)


             Pour un contrôle TabStrip
                 Private Sub Object_BeforeDropOrPaste(Index,Cancel,Action,Data,X,Y,Effect,Shift)


             Pour d'autres contrôles
                 Private Sub Object_BeforeDropOrPaste(Cancel,Action,Data,X,Y,Effect,Shift)


                        Action : Indique le résultat, en fonction des réglages actuels du clavier, de
                         l'opération Glisser-Déposer en attente.
                          fmActionPaste : colle les données copiées en mémoires
                          fmActionDragDrop : Indique que l'utilisateur a réalisé une opération
                             Glisser-Déposer de l'objet vers le contrôle cible.
                        Pour les paramètres Index, Cancel, Ctrl, Data, X, Y, Effect et Shift : voir les
                         descriptions dans l'événement BeforeDragOver.




Edited By Depret Grégory                                                                           Page 56
                           Cours de VBA pour Excel 2007

      Click

          Survient dans l'un des cas suivant :

                 L'utilisateur a cliqué sur un contrôle
                 L'utilisateur sélectionne de façon définitive une valeur parmi d'autres pour un
                  contrôle

          Syntaxes :

              Pour un MultiPage ou TabStrip
                  Private Sub Object_Click(Index)
              Pour tous les autres contrôles
                  Private Sub Object_Click( )


                          Index : L'index de la page ou de l'onglet

          Lorsque l'événement Click résulte d'un clic sur un contrôle, la séquence d'événements qui
          le déclenche est la suivante :

                 MouseDown
                 MouseUp
                 Click

          Pour certains contrôles, l'événement survient lors de la modification de la propriété
          Value. Toutefois, il est préférable d'utiliser l'événement Change pour détecter un
          changement de valeur.
          L'événement Click ne se produit pas si la valeur de la propriété Value est NULL.

          Un click droit ne gère pas l'événement Click.




Edited By Depret Grégory                                                                     Page 57
                             Cours de VBA pour Excel 2007

      DblClick

             Survient lorsque l'utilisateur pointe sur un objet, puis double-clique sur le bouton de la
             souris.
             Syntaxes :

                Pour le MultiPage et TabStrip
                    Private Sub Object_DblClick(Index,Cancel)
                Pour d'autres contrôles
                    Private Sub Object_DblClick(Cancel)


                           Index : La position de la page ou de l'onglet
                           Cancel : False indique que le contrôle doit gérer l'événement (valeur par
                            défaut). True indique que l'application gère l'événement.

             Pour que cet événement se produise, deux clics doivent intervenir dans le laps de temps
             spécifié par le paramètre de la vitesse du double-clique système.

             La séquence d'événements suivante conduit à l'événement double-clique :

                   MouseDown
                   MouseUp
                   Click
                   DblClick

      Enter

             Se produit avant qu'un contrôle ne reçoive réellement le focus.
             Syntaxe :

                Private Sub Object_Enter( )


      Exit

             Se produit immédiatement avant qu'un contrôle ne perde le focus.
             Syntaxe :

                Private Sub Object_Exit(Cancel)


                       Cancel : False indique que le contrôle doit gérer l'événement (valeur par
                        défaut). True indique que l'application gère l'événement.




Edited By Depret Grégory                                                                         Page 58
                           Cours de VBA pour Excel 2007

      KeyDown

          Se produit lorsque l'utilisateur appuie sur une touche.
          Syntaxe :

             Private Sub Object_KeyDown(KeyCode,Shift)


                    KeyCode : Nombre entier correspondant au code de la touche ayant été
                     appuyée
                    Shift : Spécifie l'état de MAJ, CTRL et ALT
                      fmShiftMask : MAJ est enfoncé
                      fmCtrlMask : CTRL est enfoncé
                      fmAltMask : ALT est enfoncé

          La séquence des événements relatifs au clavier est la suivante :

                KeyDown
                KeyPress
                KeyUp

      KeyPress

          Survient lorsque l'utilisateur appuie sur une touche ANSI.
          Syntaxe :

             Private Sub Object_KeyPress(KeyANSI)


                    KeyANSI : une valeur entière représentant un code de touche ANSI

          L'événement KeyPress peut se déclencher lorsqu'on appuie sur l'une des touches
          suivantes : Tout caractère imprimable, CTRL associé à un caractère de l'alphabet
          standard, CTRL associé à un caractère spécial, ESPACE, ECHAP

          L'événement KeyPress ne se déclenche pas lorsque l'utilisateur appuie sur l'une des
          touches suivantes : TAB, ENTER, Une touche de direction, Une touche qui déplace le
          focus, SUPPR

          La séquence des événements relatifs au clavier est la suivante :

                KeyDown
                KeyPress
                KeyUp




Edited By Depret Grégory                                                                     Page 59
                           Cours de VBA pour Excel 2007

      KeyUp

          Se produit lorsque l'utilisateur relâche la touche.
          Syntaxe :

              Private Sub Object_KeyUp(KeyCode,Shift)


                     Pour les paramètres KeyCode et Shit : Voir l'événement KeyDown

      MouseDown

          Se produit lorsque l'utilisateur appuie sur le bouton de la souris.
          Syntaxes :

              Pour un MultiPage ou TabStrip
                  Private Sub Object_MouseDown(Index,Button,Shift,X,Y)


              Pour d'autres contrôles
                  Private Sub Object_MouseDown(Button,Shift,X,Y)


                     Button : Valeur entière identifiant le bouton de la souris ayant provoqué
                      l'événement
                       fmButtonLeft : Le bouton gauche a été appuyé
                       fmButtonRight : Le bouton droit a été appuyé
                       fmButtonMiddle : Le bouton central a été appuyé
                     Index : Index de l'objet page
                     X,Y : Coordonnées horizontales et verticale de la position du contrôle
                     Shift : Spécifie l'état de MAJ, CTRL et ALT
                       fmShiftMask : MAJ est enfoncé
                       fmCtrlMask : CTRL est enfoncé
                       fmAltMask : ALT est enfoncé

          La séquence des événements relatifs à la souris est la suivante :

                 MouseDown
                 MouseUp
                 Click
                 DblClick
                 MouseUp




Edited By Depret Grégory                                                                    Page 60
                           Cours de VBA pour Excel 2007

      MouseUp

          Se produit lorsque l'utilisateur relâche le bouton de la souris.
          Syntaxes :

          Pour un contrôle MultiPage ou TabStrip
              Private Sub Object_MouseUp(Index,Button,Shift,X,Y)


          Pour d'autres contrôles
              Private Sub Object_MouseUp(Button,Shift,X,Y)


                     Index, Button, Shift, X et Y : Voir l'événement MouseDown

      MouseMove

          Survient lorsque l'utilisateur déplace la souris.
          Syntaxes :

          Pour un contrôle MultiPage ou TabStrip
              Private Sub Object_MouseMove(Index,Button,Shift,X,Y)


          Pour d'autres contrôles
              Private Sub Object_MouseMove(Button,Shift,X,Y)


                     Index, Button, Shift, X et Y : Voir l'événement MouseDown




Edited By Depret Grégory                                                          Page 61
                           Cours de VBA pour Excel 2007

   9 - Le contrôle Label

      Le contrôle Label affiche du texte descriptif.

   10 - Le contrôle TextBox

      Un contrôle TextBox est une zone de saisie pour l'utilisateur. Ce contrôle possède une
      propriété intéressante qui permet d'afficher un caractère à la place des caractères saisis
      (PasswordChar)

      Exemples d'utilisation du TextBox

          Forcer un format date type jj/mm/aaaa dans un TextBox

             Private Sub TextBox1_Change( )
                 Dim Valeur As Byte
                 TextBox1.MaxLength = 10
                 Valeur = Len(TextBox1)
                 If Valeur = 2 OR Valeur = 5 Then TextBox1 = TextBox1 & "/"
             End Sub

             Private Sub CommandButton1_Click( )
                 If Not IsDate(TextBox1) Then
                      MsgBox "Date Incorrecte"
                      TextBox1 = " "
                      TextBox1.SetFocus
                      Exit Sub
                 End If
             End Sub


          Aller à la ligne dans un TextBox en utilisant la touche clavier Enter

             Par défaut, il faut utiliser les combinaisons de touche CTRL+Enter ou SHIFT+Enter pour
             aller à la ligne dans un TextBox et avoir paramétré la propriété MultiLine à True.

                 Private Sub UserForm_Initialize( )
                     With TextBox1
                          .MultilLine = True
                          .EnterKeyBehavior = True
                     End With
                 End Sub




Edited By Depret Grégory                                                                     Page 62
                           Cours de VBA pour Excel 2007

          Forcer les majuscules lors de la saisie dans un TextBox

             Private Sub TextBox1_KeyPress(ByVal KeyAscii As MsForms.ReturnInteger)
                 KeyAscii = Asc(Ucase(Chr(KeyAscii)))
             End Sub



          Appliquer le focus dans un TextBox et sélectionner tout le texte

             With TextBox1
                 .SetFocus
                 .SelStart = 0
                 .SelLength = Len(TextBox1.Text)
             End With


          Garder le focus dans un TextBox tant qu'il est vide

             Private Sub TextBox1_Exit(ByVal Cancel As MsForms.ReturnBoolean)
                 If TextBox1.Value = " " Then Cancel = True
             End Sub


   11 - Le contrôle CheckBox

      Le contrôle CheckBox (case à cocher) permet de renvoyer les valeurs :

            True lorsque la case est cochée
            False lorsque la case est décochée

      Un CheckBox peut aussi prendre la valeur NULL si la propriété TripleState = True.

   12 - Le contrôle OptionButton

      Le contrôle OptionButton (Bouton d'option) permet de faire un choix parmi plusieurs options.
      Lorsqu'une des options est sélectionnée, les autres sont toutes désactivées.

      Il existe deux possibilités pour gérer un groupe de boutons d'options :

            Utiliser la propriété GroupName en attribuant la même chaîne à tous les contrôles
             que vous souhaitez regrouper.
            Regrouper les boutons d'option dans un cadre (Frame)




Edited By Depret Grégory                                                                  Page 63
                           Cours de VBA pour Excel 2007

   13 - Le contrôle CommandButton

      Le contrôle CommandButton (Bouton de commande) sert principalement à lancer des
      procédures en utilisant l'événement Click.

   14 - Le contrôle ListBox

      Le contrôle ListBox (Zone de liste) permet de choisir un ou plusieurs éléments dans une liste
      de choix.
      Les éléments d'une zone de liste peuvent être récupérés à partir d'une plage de cellule
      (Propriété RowSource) ou ajouté en utilisant la méthode Additem.

            La propriété RowSource

                 ListBox1.ColumnHeads = True
                     'Spécifie que la première cellule précédent la plage source est utilisée comme
                     titre dans la ListBox
                 ListBox1.RowSource = Worksheets("Feuil1").Range("A2:A10")

            La méthode AddItem

                 ListBox1.AddItem "Ligne1"

                 La méthode AddItem possède un second argument facultatif qui indique à quelle
                 ligne doit être placée la nouvelle donnée.
                 Si l'argument n'est pas spécifié, chaque nouvel ajout vient s'insérer en dernière
                 ligne.
                 L'exemple suivant place la nouvelle entrée en première ligne

                     ListBox1.AddItem "Ligne 0", 0

      Les zones de liste (pas ComboBox) peuvent être configurées de manière à autoriser une
      sélection unique ou multiple. Ce réglage est déterminé par la propriété MultiSelect.

      Les zones de liste peuvent contenir plusieurs colonnes (Propriété ColumnCount) et même des
      intitulés descriptifs (Propriété ColumnHeads). La propriété ColumnWidth permet de spécifier
      la largeur des colonnes.

      Les éléments de liste peuvent être affichés sous forme de cases à cocher si les sélections
      multiples sont autorisées ou comme bouton d'option dans le cas contraire. Ce réglage est
      contrôle par la propriété ListStyle.




Edited By Depret Grégory                                                                    Page 64
                           Cours de VBA pour Excel 2007

      On peut supprimer un élément de liste grâce à la méthode RemoveItem, ou supprimer tous
      les éléments d'une seule fois grâce à la méthode Clear.

      Ajouter des éléments uniques (sans doublon) à une zone de liste

          Sub RemoveDuplicate( )
             Dim AllCells As Range
             Dim Cell As Range
             Dim NoDup As NewCollection

             On Error Resume Next
             For Each Cell In Range("A1:A100")
                 NoDup.Add Cell.Value, CStr(Cell.Value)
                 Next Cell

             On Error Goto 0
             For Each Item In NoDup
                 UserForm1.ListBox1.AddItem Item
             Next Item
          End Sub

      Détermine l'élément sélectionné

          Si aucune ligne n'est sélectionnée, la macro renvoie une erreur. Pour y remédier, il est
          possible de tester la valeur ListIndex.

             If ListIndex = -1 Then Exit Sub

          La numérotation des éléments d'une liste commencent à 0.

      Déterminer des sélections multiples dans une zone de liste (Pas ComboBox)

          Par défaut, la propriété MultiSelect est fmMultiSelectSingle, ce qui signifie que
          l'utilisateur ne peut sélectionner qu'un élément à la fois.

          Si la liste autorise des sélections multiples (c'est-à-dire que la propriété MultiSelect est
          fmMultiSelectMulti), l'utilisation des propriétés ListIndex, Value et List provoque une
          erreur.
          Au lieu de cela, vous devez utiliser la propriété Selected qui retourne un tableau dont le
          premier élément possède l'index 0.
          Par exemple, l'instruction suivant affiche True si le premier élément est sélectionné

             MsgBox ListBox.Select(0)




Edited By Depret Grégory                                                                       Page 65
                           Cours de VBA pour Excel 2007

          Travailler avec des listes multi colonnes

             Par défaut, les zones de liste contiennent une seule colonne.
             Pour créer des listes multi colonnes, vous pouvez :

                    Indiquer le nombre de colonne grâce à la propriété ColumnCount
                    Spécifier la plage multi colonnes de la feuille de calcul comme propriété
                     RowSource
                    Afficher les en-têtes de colonnes en mettant la propriété ColumnHeads à True
                    Ajuster les largeurs de colonne en attribuant une série de valeur en points
                     séparé par des virgules à la propriété ColumnWidth
                    Spécifier la colonne appropriée comme propriété BoundColumn. Cette
                     propriété indique la colonne référence lorsqu'une instruction scrute la
                     propriété Value de la zone de liste

             Pour remplir une zone de liste avec plusieurs colonnes sans utiliser de plage de
             cellules, créez d'abord un tableau à plusieurs dimensions, puis attribuez le tableau à la
             propriété List.

                 Private Sub UserForm_Initialize( )
                     Dim i As Integer
                     Dim Data(1 To 12,1 To 2)

                     For i = 1 To 12
                         Data(i,1) = Format(DateSerial(2012,i,1),"mmmm")
                     Next i

                     For i = 1 To 12
                         Data(i,1) = Day(DateSerial(2012,i+1,1) -1)
                     Next i

                    ListBox1.Column = 2
                    ListBox1.List = Data
                 End Sub




Edited By Depret Grégory                                                                     Page 66
                            Cours de VBA pour Excel 2007

   15 - Le contrôle ComboBox

      Un contrôle ComboBox (Zone de liste modifiable) permet de créer une liste.
      Les méthodes et propriétés sont identiques que pour le contrôle ListBox, excepté que ListBox
      possède en plus une option permettant les multi sélections.

      La propriété Style spécifie de quelle façon l'utilisateur va utiliser le contrôle :

             fmStyleDropDownCombo : le contrôle ComboBox se comporte comme une liste
              modifiable déroulante. L'utilisateur peut saisir une valeur dans la zone d'édition ou en
              sélectionner une dans la liste.
             fmStyleDropDownList : Le contrôle ComboBox se comporte comme une zone de liste.
              L'utilisateur doit choisir une valeur dans la liste.

   16 - Le contrôle ScrollBar

      Le contrôle ScrollBar (Barre de défilement) permet d'incrémenter ou de décrémenter des
      valeurs en fonction de spécifications (Min,Max,Pas).

          Private Sub UserForm_Initialize( )
              With ScrollBar1
                   .Min = 0
                   .Max = 100

                      ' Spécifie la distance de déplacement lorsque l'utilisateur clique entre le curseur de
                      défilement et la flèche de défilement
                  .LargeChange = 100

                     ' Spécifie la distance de déplacement lorsque l'utilisateur clique sur la flèche de
                     défilement. La valeur par défaut est 1
                  .SmallChange = 5
              End With
          End Sub


   17 - Le contrôle SpinButton

      Le contrôle SpinButton (Toupie) permet d'incrémenter ou de décrémenter des valeurs en
      fonction de spécifications (Min,Max,Pas).

      Cet objet fonctionne sur le même principe que le ScrollBar, mais ne possède pas de barres de
      défilement. Il ne possède donc pas de propriété LargeChange.




Edited By Depret Grégory                                                                              Page 67
                           Cours de VBA pour Excel 2007

   18 - Le contrôle MultiPage

      Un MultiPage est constitué de plusieurs pages.

      Pour ajouter une page, faites un clic droit dans la barre d'onglets puis sélectionnez l'option
      "Nouvelle page".

      L'onglet (ou page) affichée en premier est déterminée par la propriété Value. Une valeur
      égale à 0 affiche le premier onglet.

      Si le contrôle possède de nombreux onglets, vous pouvez positionner sa propriété MultiRow
      à True afin d'afficher les onglets sur plusieurs lignes.

      Vous pouvez afficher des boutons à la place des onglets en mettant la propriété Style à 1 au
      lieu de 0.

      La propriété TabOrientation détermine l'emplacement des onglets sur le contrôle MultiPage.

      Vous pouvez définir un effet de transition pour chaque page grâce aux propriétés
      TransitionEffect et TransitionPeriod.

          Par exemple, pour se positionner sur la page 2 lors de l'ouverture

             Private Sub UserForm_Initialize( )
                 MultiPage1.Value = 1
             End Sub


          On peut empêcher l'accès à une page

             MultiPage1.Pages(1).Enabled = False


          On peut masquer une page

             MultiPage1.Pages(1).Visible = False


          Afficher le nom de la page sélectionnée

             MsgBox MultiPage1.SelectedItem.Name


   19 - Le contrôle TabStrip

      Un contrôle TabStrip est constitué de plusieurs onglets et fonctionne comme un MultiPage




Edited By Depret Grégory                                                                      Page 68
                           Cours de VBA pour Excel 2007

   20 - Le contrôle Image

      Le contrôle Image permet de visualiser des images dans l'UserForm.

      La propriété PictureSizeMode définit le mode d'affichage :

            fmPictureSizeModeClip : L'image n'est pas redimensionnée (Valeur par défaut)
            fmPictureSizeStrech : Etire l'image pour l'adapter aux dimensions du contrôle.
             Déforme l'image
            fmPictureSizeZoom : Agrandit l'image en fonction des dimensions du contrôle mais ne
             la déforme pas.

      Attention car certains formats de fichiers ne sont pas reconnus : PNG, TIF, …

          Charger une image

             Private Sub CommandButton_Click( )
                 Dim Fichier As String
                 Fichier = "C:\Fourmiz.jpg"
                 If Dir(Fichier) <> " " Then
                      Image1.Picture = LoadPicture(Fichier)
                 Else
                      Image1.Picture = LoadPicture(" ")
                 End If
             End Sub


          Décharger une image de son contrôle

             Set Image1.Picture = Nothing


   21 - Le contrôle Frame

      Le contrôle Frame (Cadre) sert à regrouper les contrôles de façon logique. Un Frame est
      souvent utilisé pour gérer les groupes d'OptionButton.




Edited By Depret Grégory                                                                  Page 69
                           Cours de VBA pour Excel 2007

   22 - Le contrôle RefEdit

      Le contrôle RefEdit permet de récupérer la référence d'une plage de cellules.

      En cliquant sur l'objet, vous obtenez une fenêtre invitant à sélectionner une plage de cellules.
      Après avoir refermé la fenêtre, vous pouvez manipuler la plage.

          Private Sub CommandButton1_Click( )
              Dim Plage As String
              Plage = RefEdit1.Value
              If Plage = " " Then
                   ExitSub
              Else
                   Range(Plage) = "X"
              End If
          End Sub


   23 - Le contrôle ToggleButton

      Le contrôle ToggleButton (Bouton bascule) permet de renvoyer les valeurs :

            True : lorsque le bouton est activé
            False : lorsque le bouton est désactivé




Edited By Depret Grégory                                                                     Page 70
                           Cours de VBA pour Excel 2007

   24 - Le contrôle ProgressBar

      Ajouter l'outil "Microsoft ProgressBar Control Version 6.0" dans la boîte à outils.

      Vous pouvez définir la valeur de départ grâce à la propriété Min, la valeur de fin grâce à la
      propriété Max, et la valeur courante grâce à la propriété Value.

      On peut ajouter un Label au dessus de l'objet pour afficher le temps restant, ainsi qu'un
      bouton de commande pour commencer le test.

          Dans le module UserForm

             Private Sub CommandButton1_Click( )
                 Label1 = Duree
                 Call Demarrer
                 CommandButton1.Enabled = False
             End Sub

             Private Sub UserForm_Initialize( )
                 With Me.ProgressBar1
                      .Min = 0
                      .Max = Duree
                      .Value = 0
                 End With
             End Sub

             Private Sub QueryClose(Cancel As Integer,CloseMode As Integer)
                 On Error Resume Next
                 If CloseMode <> 1 Then Cancel = True
             End Sub




Edited By Depret Grégory                                                                      Page 71
                           Cours de VBA pour Excel 2007

          Dans un module de code

             Public Const Duree = 10

             Sub Demarrer( )
                 Application.OnTime Now + TimeValue("0:0:01"),"MiseAJour"
             End Sub

             Sub MiseAJour( )
                 If UserForm1.ProgressBar1.Value = Duree Then
                      Unload UserForm1
                      Exit Sub
                 Else
                      UserForm1.ProgressBar1.Value = UserForm1.ProgressBar1.Value + 1
                      UserForm1.Label1 = UserForm1.Label1 – 1
                 End If

                 Call Demarrer
             End Sub


   25 - Le contrôle Calendar

      Le contrôle Calendar permet d'afficher un calendrier dans un UserForm.
      Vous pouvez utiliser cet objet en sélectionnant "Contrôle Calendrier xx.x" dans la liste des
      contrôles supplémentaires

      Les propriétés

            Day : Jour sélectionné par défaut
            Month : Mois sélectionné par défaut
            Year : Année sélectionnée par défaut
            Value : L'ensemble des 3 valeurs Day – Month - Year

      Le contrôle Calendar possède les événements standards mais possède en plus :

            NewMonth : Survient quand on sélectionne un autre mois.
                 Private Sub NewMonth( )


            NewYear : Survient quand on sélectionne une autre année
                 Private Sub NewYear( )




Edited By Depret Grégory                                                                     Page 72
                           Cours de VBA pour Excel 2007

   26 - Le contrôle MonthView

      Le contrôle MonthView permet aussi d'afficher un calendrier dans un UserForm.
      Vous pouvez utiliser cet objet en sélectionnant "Microsoft MonthView Control 6.0" dans la
      liste des contrôles supplémentaires.

      Les propriétés

            MaxDate : Date maximum que l'objet peut afficher
            MinDate : Date minimum que l'objet peut afficher
            ShowToday : Affiche la date d'aujourd'hui dans le bas du contrôle
            ShowWeekNumber : Affiche ou non le numéro de la semaine
            Value : Valeur par défaut
            Week : N° de la semaine (Change automatiquement lorsque l'on change la valeur de
             la date)

      Le contrôle MonthView possède également les événements :

            DateClick : Survient lorsqu'on clique sur un jour
                 Private Sub MonthView1_DateClick(ByVal DateClicked As date)


                          DateClicked : Correspond à la date sélectionnée

            SelChange : Survient à chaque changement de jour ou mois
                 Private Sub MonthView1_SelChange(SartDate,EndDate,Cancel)


                          Cancel : Si vous mettez Cancel à True, le changement de sélection est
                           impossible
                          StartDate et EndDate corresponde à la date sélectionnée



   27 - Le contrôle DatePicker

      Le contrôle DatePicker permet d'afficher un calendrier déroulant dans un UserForm.
      Vous pouvez utiliser cet objet en sélectionnant "Microsoft Date and Time Picker 6.0" dans la
      liste des contrôles supplémentaires.

      Les propriétés

            Format : permet de choisir le format de la date ou même afficher l'heure
            MaxDate : date maximale que le contrôle peut afficher
            MinDate : date minimale que le contrôle peut afficher




Edited By Depret Grégory                                                                     Page 73
                           Cours de VBA pour Excel 2007

   28 - Le contrôle StatusBar

      Le contrôle StatusBar permet d'afficher l'heure (entre autres) au format HH:MM dans un
      UserForm.
      Vous pouvez utiliser cet objet en sélectionnant "Microsoft StatusBar Control Version 6.0"
      dans la liste des contrôles supplémentaires.

             Placer l'objet dans l'UserForm
             Cliquer sur "Personnalisé" dans la fenêtre "Propriétés"
             Sélectionner l'onglet "Panel" dans la boîte de dialogue
             Choisir l'option "5-sbrTime" dans le champ Style
             Cliquer sur "Appliquer" puis "Ok"

   29 - Le contrôle Slider

      Le contrôle Slider peut être utilisé à la place d'une barre de défilement, afin de sélectionner
      une valeur dans une plage.
      Pour utiliser ce contrôle, sélectionner "Microsoft Slider Control Version 6.0" dans la liste des
      contrôles supplémentaires.

      Les propriétés

             Orientation : Définit la position verticale ou horizontale du curseur
             Min : Valeur de la propriété Value lorsque le curseur se trouve à gauche ou en haut
             Max : Valeur de la propriété Value lorsque le curseur se trouve en bas ou à droite
             SmallChange : Valeur du changement lors du déplacement du curseur
             LargeChange : Valeur du changement lors d'un clic sur une des plages de part et
              d'autres du curseur
             TickFrequency : Définit l'espace entre chaque graduation
             TickStyle : Définit le style du contrôle
                   sldBottomRight : les graduations sont situées en bas ou à droite du curseur
                   sldTopLeft : les graduations sont situées en haut ou à gauche du curseur
                   sldBoth : les graduations sont situées de part et d'autres du curseur
                   sldNoTicks : le contrôle n'a pas de graduations
             Text : Texte qui sera affiché pendant le déplacement du curseur
             TextPosition : Indique l'emplacement du texte par rapport au contrôle
             SelRange : Le contrôle Slider est normalement utilisé pour indiquer une valeur
              précise. Mettez cette propriété à True pour permettre la saisie d'une plage
             SelStart : Indique le début de la sélection d'une plage
             SelLength : Indique la longueur de la plage sélectionnée

      Un événement Change est généré à chaque changement de valeur de la propriété Value
          Private Sub Slider_Change( )



Edited By Depret Grégory                                                                       Page 74
                           Cours de VBA pour Excel 2007

   30 - Le contrôle UpDown

      La représentation visuelle d'un contrôle UpDown est une double flèche, orientée
      verticalement ou horizontalement.
      Pour utiliser ce contrôle, sélectionnez "Microsoft UpDown Control 6.0" dans la liste des
      contrôles supplémentaires.

      Les propriétés

            BuddyControl : nom du contrôle auquel il est associé. Le contrôle s'aligne sur un des
             bords de ce contrôle
            Alignment : Indique le bord sur lequel se fait l'alignement
            Orientation : Indique si les flèches sont verticales ou horizontales
            AutoBuddy : peut-être utilisé à la place de BuddyControl. Si sa valeur est True, le
             contrôle UpDown est associé au contrôle qui le précède dans l'ordre des tabulations
            SyncBuddy : Affectez-lui la valeur True pour que chaque clic sur l'une des flèches
             modifie la valeur de la propriété par défaut du contrôle associé
            BuddyProperty : Permet d'indiquer une autre propriété du contrôle associé à
             modifier au lieu de la propriété par défaut
            Value : valeur courante du contrôle
            Min : Valeur minimale du contrôle
            Max : valeur maximale du contrôle
            Increment : Indique l'incrément à chaque clic sur l'une des flèches
            Wrap : Précise comment se comporte le contrôle lorsque la valeur atteint le minimum
             ou maximum. Si elle est True, la valeur retourne au seuil inverse. Si elle est false, la
             valeur n'est plus modifiée

      Les événements

            Change : Survient à chaque changement de valeur
                 Private Sub UpDown_Change( )


            DownClick : Survient lors d'un clic sur la flèche du bas ou de gauche
                 Private Sub UpDown_DownClick( )


            UpClick : Survient lors d'un clic sur la flèche du haut ou de droite
                 Private Sub UpDown_UpClick( )




Edited By Depret Grégory                                                                    Page 75
                           Cours de VBA pour Excel 2007

VI - Les barres d'outils personnalisées

   1 – Créer une barre de commandes

      Pour créer une nouvelle barre d'outils en VBA, vous devez utiliser la méthode Add de la
      collection CommandBars.

      L'instruction suivante crée une nouvelle barre d'outils avec le nom par défaut "Personnalisé
      1".
      La barre d'outils créée est vide au départ, ne contient aucun contrôle et n'est pas visible (sa
      propriété Visible vaut False).

          CommandBars.Add

      En général, vous souhaiterz définir quelques propriétés lorsque vous créez une nouvelle barre
      d'outils.

          Sub CreerBarre ( )
             Dim Tbar As CommandBar
             Set Tbar = Application.CommandBars.Add
             With Tbar
                 .Name = "MaBarre"
                 .Top = 0
                 .Left = 0
                 .Visible = True
             End With
          End Sub

      Cependant, la méthode Add possède une syntaxe plus complète.

          Application.CommandBars.Add (Name, [Position], [MenuBar], [Temporary])

            Name : Attribue un nom à la barre (Name:="MaBarre")
            Position : Définit la position de la barre. Six constantes sont possibles (msoBarTop,
             msoBarBottom, msoBarRight, msoBarLeft, msoBarFloating, msoBarPopup)
             L'argument Position est facultatif : sans le préciser, c'est la valeur msoBarFloating qui
             sera pris en compte.
            MenuBar : Argument de type booléen qui permet, s'il est à True, de remplacer le
             menu de l'application par votre barre. La valeur par défaut est False.
            Temporary : Argument de type booléen qui permet, s'il est à True, de supprimer la
             barre lors de la fermeture de l'application. La valeur par défaut est False.




Edited By Depret Grégory                                                                      Page 76
                           Cours de VBA pour Excel 2007

   2 - Les propriétés d'une barre de commandes

         Propriétés                                        Description
                       Propriété de type booléen qui permet de rendre la barre de menu visible
           Visible
                                                             ou non
                                   Elle a le même effet visuel que la propriété Visible.
                       La différence entre les deux réside dans le fait que si Enabled = False, non
          Enabled
                        seulement la barre ne sera pas visible, mais en plus elle n'apparaîtra pas
                                            dans le menu "Outils > Personnaliser"
           Name                                         Nom de la barre
                                                 Définit la position de la barre
                       (msoBatTop, msoBarBottom, msoBarRight, msoBarLeft, msoBarFloating,
          Position                                       msoBarPopup)
                               Cet argument est facultatif : sans le préciser, c'est la valeur
                                           msoBarFloating qui sera pris en compte
                        Cette propriété va empêcher l'utilisateur d'effectuer des modifications.
                                           Huit types de protecton sont possibles :
                            msoBarNoProtection : non protégé (par défaut)
                            msBarNoCustomize : La barre ne peut être personnalisée
                            msoBarNoResize : La barre ne peut être redimensionnée
                            msoBarNoMove : La barre ne peut être déplacée
                            msoBarNoChangeVisible : L'état de visibilité ne peut être modifié
         Protection
                               par l'utilisateur
                            msoBarNoChangeDock : Permet à l'utilisateur de déplacer la
                               barre uniquement sur son axe
                            msoBarNoVerticalDock : n'autorise pas de positionner la barre,
                               verticalement, à gauche ou à droite de la feuille
                            msoBarNoHorizontalDock : n'autorise pas de positionner la barre,
                               horizontalement, en haut ou en bas de la feuille
                            De type booléen, renvoie la valeur True si la barre est une barre
           Builin
                                                  prédéfinie de l'application




Edited By Depret Grégory                                                                   Page 77
                           Cours de VBA pour Excel 2007

   3 - Supprimer une barre de commandes

      Pour supprimer une barre d'outils personnalisée, utilisez la méthode Delete de l'objet
      Commandbars.

          Application.CommandBars ("MaBarre").Delete

      Si la barre d'outils n'existe pas, l'instruction génére une erreur. Pour éviter le message
      d'erreur, la solution consiste à ignorer l'erreur.

          On Error resume Next
             Application.CommandBars ("MaBarre").Delete
          On Error Goto 0

   4 - Les contrôles

      Les barres de menus ne seraient rien sans contrôles.

      Les objets CommandBar, tels que les barres d'outils, contiennent des objets Controls.
      On accède à ces objets via la propriété Controls de l'objet CommandBar.

      Cinq types de contrôles sont possibles :

            msoControlButton : Bouton de commandes
            msoControlEdit : Zone de texte
            msoControlDropDown : Zone de liste
            msoControlComboBox : Zone de liste modifiable
            msoControlPopup : Sous-menu




Edited By Depret Grégory                                                                       Page 78
                           Cours de VBA pour Excel 2007

   5 - Ajouter un contrôle à une barre de commandes

      Pour ajouter un contrôle, procédez comme suit :

          Sub Ajout_Controle ( )
          Dim Ctrl1 As CommandBarButton
          ' Déclaration de variable pour un contrôle de type bouton de commandes
          Dim Ctrl2 As CommandBarComboBox
          ' Déclaration de variable pour un contrôle de type Zone de texte ou de liste
          Dim Ctrl3 As CommandBarPopup
          ' Déclaration de variable pour un contrôle de type Sous-menu

          Set Ctrl1 = Application.CommandBars ("MaBarre").Controls.Add (msoControlButton)
          With Ctrl1
              .Propriete1 = Value1
              .Propriete2 = Value2
              ….
          End With
          End Sub

      Lorsque vous ajoutez des contrôles à une barre de commandes, vous devez préciser quelques
      propriétés.

   6 - Supprimer un contrôle d'une barre de commandes

      Pour supprimer un contrôle d'un objet CommandBar, utilisez la méthode Delete de la
      collection Controls.

          Application.CommandBars ("MaBarre").Controls (1).Delete

      Vous pouvez également supprimer un contrôle en se rapportant à sa légende

          Application.CommandBars ("MaBarre").Controls ("Bouton Tri").Delete




Edited By Depret Grégory                                                                   Page 79
                           Cours de VBA pour Excel 2007

   7 - Le bouton de commandes et ses propriétés

      Pour rappel, la constante définissant un contrôle de type "Bouton de commandes" est
      msoControlButton (Type = CommandBarButton).

          Application.CommandBars ("MaBarre").Controls.Add (msoControlButton)

         Propriétés                                      Description
                                   Définit le mode d'affichage du bouton de commandes
                         (Cette propriété ne s'applique qu'aux contrôles CommandBarButton et
                                                   CommandBarComboBox)
                                          Cette propriété peut être définie comme :
                             msoButtonAutomatic : Bouton avec icône (par défaut)
                             msoButtonIcon : Bouton avec icône
                             msoButtonCaption : Bouton avec texte
                             msoButtonIconAndCaption : Bouton avec icône + texte (le texte
                                 se positionne à droite de l'icône)
            Style            msoButtonIconAndCaptionBelow : Bouton avec icône + Texte (le
                                 texte se positionne en dessous de l'icône)
                             msoButtonWrapCaption : bouton avec texte sur 2 lignes s'il y a
                                 plusieurs mots
                             msoButtonIconAndWrapCaption : bouton avec icône + texte (le
                                 texte se met à droite de l'icône et sur 2 lignes s'il y a plusieurs
                                 mots)
                             msoButtonIconAndWrapCaptionBelow : bouton avec icône +
                                 texte (le texte se met en dessous de l'icône et sur 2 lignes s'il y a
                                 plusieurs mots)
                           Nombre représentant une image (icône prédéfinies incluses dans MS
           FaceID
                                                             Office)
                                            Permet d'ajouter un texte sur le bouton
          Caption       Si le contrôle ne fait apparaître qu'une icône, la légende s'affiche en info-
                                                              bulle
                          Nom d'une procédure VBA à exécuter lorsque l'utilisateur clique sur le
          OnAction                                           bouton
                                                     OnAction = "Macro1"
        ToolTipText                   Texte affiché lorsque le curseur survole le Bouton
                            Permet, si la valeur est True, de placer un séparateur juste avant le
        BeginGroup
                                                            contrôle
                        De type booléen, renvoie la valeur True s'il s'agit d'un contrôle prédéfini
           Builtin
                                                        de l'application
                         De type booléen, renvoie la valeur True s'il s'agit d'une icône prédéfinie
         BuiltinFace
                                                        de l'application
          Enabled              Permet de griser le contrôle et de le rendre inactif (True/False)
           Visible                   Permet de rendre invisible le contrôle (True/False)
           Before               Permet de positionner le contrôle avant un autre (Before:=3)
                                  Permet de changer l'aspect du bouton (msoButtonUp ou
           State
                                                       msoButtonDown)




Edited By Depret Grégory                                                                      Page 80
                           Cours de VBA pour Excel 2007

   8 - La zone de texte et ses propriétés

      Pour rappel, la constante définissant un contrôle de type "Zone de texte" est msoControlEdit
      (Type = CommandBarComboBox).

          Application.CommandBars ("MaBarre").Controls.Add (msoControlEdit)

      La zone de texte permet d'introduite un mot ou une phrase et de récupérer cette chaîne dans
      la procédure.

      Dès lors que le contrôle a le focus, la procédure liée à la propriété OnAction sera exécutée
      lors de l'appui sur la touche Tab ou Enter.

      Les propriétés suivantes s'utilisent de la même manière qu'avec un bouton de commandes
      (Caption – OnAction – ToolTipText – BeginGroup – Enabled – Visible – Before)

      Cependant, ce contrôle possède d'autres propriétés

         Propriétés                                       Description
                                           Deux styles d'affichage sont possibles :
                                msoComboNormal : affichage uniquement de la zone de texte
                                 (par défaut)
            Style
                                msoComboLabel : affichage de la zone de texte et d'un label à la
                                 gauche de la zone. Ce style s'utilise avec la propriété Caption qui
                                 contient le texte qui s'affiche dans le Label.
           Clear                       Permet d'afficher le contenu de la zone de texte
           Width                      Par défaut, la longueur de la zone est de 90 pixels




Edited By Depret Grégory                                                                      Page 81
                           Cours de VBA pour Excel 2007

   9 - La zone de liste et ses propriétés

      Pour rappel, la constante définissant un contrôle de type "Zone de liste" est
      msoControlDropDown OU msoControlComboBox (Type = CommandBarComboBox).

          Application.CommandBars ("MaBarre").Controls.Add (msoControlDropDown)
          Application.CommandBars ("MaBarre").Controls.Add (msoControlComboBox)

      Les propriétés suivantes s'utilisent de la même manière qu'avec un bouton de commandes
      (Caption – OnAction – ToolTipText – BeginGroup – Enabled – Visible – Before)

      Cependant, ce contrôle possède d'autres propriétés

          Propriétés                                         Description
             Style                                Idem que pour la zone de texte
           AddItem                            Permet d'ajouter des éléments à la liste
           ListIndex                  Renvoie le N° de la ligne sélectionnée par l'utilisateur
                            Pdermet de récupérer dans la procédure exécutée, le texte sélectionné
                                                            dans la zone.
             Text
                            La procédure sera exécutée à chaque fois que l'utilisateur fera un choix
                                                            dans la liste.
         ListCount                      Renvoie le nombre de lignes que contient la zone
         List(Index)                  Renvoie le contenu de la ligne mentionnée par index
      RemoveItem(Index)                Permet de supprimer la ligne mentionnée par index
            Clear                       Permet d'effacer la totalité du contenu de la zone
                                 Permet de tracer une ligne continue entre deux lignes de texte.
        ListHeaderCount        CommandBars ("Mabarre").Controls (1).ListHeaderCount = Valeur
                                 La valeur étant le N° de ligne sous laquelle la ligne sera affichée
                                      Définit le nombre de lignes affichées simultanément.
                             Si la zone de liste contient un nombre de lignes supérieur au nombre
        DropDownLine        définit pour l'affichage, une barre de défilement sera automatiquement
                                                              ajoutée
                                                  MaListe.DropDownLine = Valeur
                                               Permet d'ajuster la largeur de la zone
                                = 0 : La largeur de la zone ext fixe et égale à la largeur du
                                    contrôle (par défaut)
       DropDownWidth
                                = -1 : La largeur de la zone s'adapte en fonction de la plus
                                    longue ligne de texte
                                = Valeur : La largeur de la zone est égale à la valeur définie




Edited By Depret Grégory                                                                   Page 82
                           Cours de VBA pour Excel 2007

   10 - Le Sous-Menu et ses propriétés

      Les sous-menus vont se révéler utiles lorsque vous créez une barre de menus comportant de
      nombreux contrôles.

      Pour rappel, la constante définissant un contrôle de type "Sous-Menu" est msoControlPopup
      (Type = CommandBarPopup).

          Application.CommandBars ("MaBarre").Controls.Add (msoControlPopup)

      Les propriétés suivantes s'utilisent de la même manière qu'avec un bouton de commandes
      (Caption – ToolTipText – BeginGroup – Enabled – Visible – Before)




Edited By Depret Grégory                                                                Page 83
                           Cours de VBA pour Excel 2007

   11 - Exercice récapitulatif

      Sub Barre_Menus_Perso()
         ' Déclaration des variables
         Dim Cbar As CommandBar
         Dim Cbut As CommandBarButton
         Dim Ctxt As CommandBarComboBox
         Dim Cpop1 As CommandBarPopup
         Dim Cpop2 As CommandBarPopup
         Dim x As Byte

          ' Création de la barre de menus
          Set Cbar = Application.CommandBars.Add (Name:="MaBarre", Position:=msoBarTop,
          Temporary:=True)
          Cbar.Protection = msoBarNoMove + msoBarNoCustomize
           '<-- Protection de la barre de menus

          ' Insertion sur la barre de menus d'un bouton de commande
          Set Cbut = Cbar.Controls.Add (msoControlButton)
          With Cbut
             .FaceId = 358 '<-- icône
             .OnAction = "Macro1" '<-- procédure à exécuter
             .TooltipText = "Suppression barre de menus" '<-- info-bulle
             .Tag = "cbut1" '<-- étiquette
          End With

          ' Insertion sur la barre de menus d'une zone de texte
          Set Ctxt = Cbar.Controls.Add (msoControlEdit)
          With Ctxt
             .Style = msoComboLabel '<-- zone de texte avec label
             .Caption = "Date :" '<-- texte du label
             .TooltipText = "Veuillez introduire une date" '<-- info-bulle
             .OnAction = "Macro2" '<-- procédure à exécuter
             .BeginGroup = True '<-- barre de séparation
             .Tag = "ctxt1" '<-- étiquette
          End With




Edited By Depret Grégory                                                            Page 84
                           Cours de VBA pour Excel 2007

          ' Insertion sur la barre de menus d'une zone de liste
          Set Ctxt = Cbar.Controls.Add (msoControlDropdown)
          With Ctxt
             .Style = msoComboLabel '<-- zone de liste avec label
             .Caption = "Liste :" '<-- texte du label
             .TooltipText = "Faites votre choix" '<-- info-bulle
             .OnAction = "Macro3" '<-- procédure à exécuter
             .BeginGroup = True '<-- barre de séparation
             .Tag = "clist1" '<-- étiquette
             For x = 1 To 5
                .AddItem ("Choix " & x) '<-- ajout de 5 Item
             Next
          End With

          ' Insertion sur la barre de menus d'un sous-menu 1
          Set Cpop1 = Cbar.Controls.Add (msoControlPopup)
          With Cpop1
             .Caption = "Sous-menu 1" '<-- label du sous-menu
             .Tag = "sm1" '<-- étiquette
          End With

          ' Insertion dans le sous-menu 1 d'un premier bouton de commande
          Set Cbut = Cpop1.Controls.Add (msoControlButton)
          With Cbut
             .Style = msoButtonCaption '<-- bouton avec texte uniquement
             .Caption = "Bouton 1" '<-- label du bouton
             .OnAction = "Macro4" '<-- procédure à exécuter
             .Tag = "sm1cbut1" '<-- étiquette
          End With

          ' Insertion dans le sous-menu 1 d'un second bouton de commande
          Set Cbut = Cpop1.Controls.Add (msoControlButton)
          With Cbut
             .Style = msoButtonCaption '<-- bouton avec texte uniquement
             .Caption = "Bouton 2" '<-- label du bouton
             .OnAction = "Macro4" '<-- procédure à exécuter
             .Tag = "sm1cbut2" '<-- étiquette
          End With




Edited By Depret Grégory                                                    Page 85
                           Cours de VBA pour Excel 2007

          ' Insertion dans le sous-menu 1 d'un sous-menu 2
          Set Cpop2 = Cpop1.Controls.Add (msoControlPopup)
          With Cpop2
             .Caption = "Sous-menu 2" '<-- label du sous-menu
             .Tag = "sm2" '<-- étiquette
          End With

          ' Insertion dans le sous-menu 2 d'un bouton prédéfini ouvrant l'application Word
          Set Cbut = Cpop2.Controls.Add (Type:=msoControlButton, ID:=42)
          With Cbut
             .Style = msoButtonIconAndCaption '<-- bouton avec icône + texte
             .Caption = "Word" '<-- label du bouton
          End With

          ' Insertion dans le sous-menu 2 d'un bouton prédéfini ouvrant l'application Access
          Set Cbut = Cpop2.Controls.Add (Type:=msoControlButton, ID:=264)
          With Cbut
             .Style = msoButtonIconAndCaption '<-- bouton avec icône + texte
             .Caption = "Access" '<-- label du bouton
          End With

          ' Insertion dans le sous-menu 2 d'un bouton prédéfini ouvrant l'application PowerPoint
          Set Cbut = Cpop2.Controls.Add (Type:=msoControlButton, ID:=267)
          With Cbut
             .Style = msoButtonIconAndCaption '<-- bouton avec icône + texte
             .Caption = "PowerPoint" '<-- label du bouton
          End With

          Cbar.Visible = True '<-- affichage de la barre de menus

      End Sub




Edited By Depret Grégory                                                                       Page 86
                           Cours de VBA pour Excel 2007

   12 - Menu Popup

      La barre de mnu de tpe Popup est en quelque sorte une barre de menus classique sauf que sa
      position est particulière.
      Celle-ci va s'afficher, tel un Popup, sous le curseur de la souris.

      Tous les paramètres, propriétés et contrôles sont également valables hormis les deux
      suivants qui sont particuliers à la barre de menu de type Popup :

            Position : msoBarPopup
            CommandBars ("MaBarre").ShowPopup

      Maintenant que nous avons détaillé dans les différents points précédents, comment créer
      une barre de menus et insérer des contrôles, nous allons directement aller à l'essentiel par un
      exemple.

      Code de création de la barre de menus avec insertion d'une zone de liste contenant 20
      valeurs

          Sub Creation_barre_popup ()
             ' Déclaration des variables
             Dim Cbar As CommandBar
             Dim Clist As CommandBarComboBox
             Dim x As Byte

             ' Création de la barre de menu de type Popup
             Set Cbar = CommandBars.Add (Name:="MaBarrePopup", Position:=msoBarPopup,
             temporary:=True)

             ' Insertion d'une zone de liste
             Set Clist = Cbar.Controls.Add (msoControlDropdown)
             With Clist
                .TooltipText = "Saisissez une valeur" '<-- info-bulle
                .DropDownLines = 10 '<-- limitation de l'affichage à 10 lignes
                .OnAction = "Macro1" '<-- procédure à exécuter
                For x = 1 To 20
                  .AddItem ("Valeur " & x) '<-- ajout de 20 Items
                Next x
             End With
          End Sub




Edited By Depret Grégory                                                                     Page 87
                           Cours de VBA pour Excel 2007

      Code de suppression de la barre de menus

          Sub Supp_barre_popup ()
             On Error Resume Next
             CommandBars ("MaBarrePopup").Delete
          End Sub

      Code de création et de suppression automatique lors de l'ouverture et fermeture du
      classeur

          Private Sub Workbook_BeforeClose (Cancel As Boolean)
              Supp_barre_popup '<-- suppression de la barre de menu à l'ouverture du classeur
          End Sub

          Private Sub Workbook_Open ()
              Creation_barre_popup '<-- création de la barre de menu à l'ouverture du classeur
              'Remarque : la barre est créée mais non visible
          End Sub

      Code permettant d'afficher la barre de menus

          Sub Affiche_barre_popup ()
             CommandBars ("MaBarrePopup").ShowPopup
          End Sub

      Code d'exécution de la procédure d'affichage de la barre de menu via le clic droit de la
      souris

          Private Sub Workbook_SheetBeforeRightClick (ByVal Sh As Object, ByVal Target As Range,
          Cancel As Boolean)
              Affiche_barre_popup
              ' Désactivation du menu contextuel de l'application
              ' Qui s'affiche en temps normal lors du clic droit de la souris
              Cancel = True
          End Sub

      Procédure qui sera exécutée lors du choix d'une des valeurs de la zone

          Sub Macro1 ()
             ActiveCell.Value = CommandBars.ActionControl.Text
          End Sub




Edited By Depret Grégory                                                                   Page 88
                           Cours de VBA pour Excel 2007

VII – Les Techniques de Gestion des Erreurs

   Pour que le programme continue de fonctionner lorsqu'une erreur se produit, insérez
   l'instruction suivante dans votre code :

      On Error Resume Next

   Vous pouvez également utiliser l'instruction On Error pour indiquer un emplacement dans votre
   procédure auquel se rendre lorsqu'une erreur se produit, en marquant l'emplacement par une
   étiquette :

      On Error Goto Etiquette
      …
      Etiquette :
      …

   L'instruction suivante restaure la gestion normale des erreurs avant que la procédure se termine :

       On Error Goto 0

   Exemples de Gestion d'Erreurs

      La méthode CellulesSpeciales sélectionne toutes les cellules qui contiennent une formule
      renvoyant un nombre. S'il n'y a pas de cellule dans la sélection, VBA produit un message
      d'erreur.
      L'utilisation de l'instruction On Error Resume Next empêche le message d'apparaître.

          Sub SelectionFormules ( )
             On Error Resume Next
             Selection.CellulesSpeciales (xlFormules, xlNumbers).Select
             On Error Goto 0
             [Suite du code]
          End Sub

      La procédure ci-dessous emploie une instruction supplémentaire pour déterminer si une
      erreur se produit.

          Sub SelectionFormules ( )
             On Error Resume Next
             Selection.CellulesSpeciales (xlFormules, xlNumbers).Select
             If Err <> 0 Then MsgBox "Aucune cellule avec formule n'a été trouvée"
             On Error Goto 0
             [Suite du code]
          End Sub


Edited By Depret Grégory                                                                    Page 89
                           Cours de VBA pour Excel 2007

      L'exemple suivant présente un cas de gestion d'erreur avec un renvoi sur une étiquette.

          Sub DemoError ( )
             On Error Goto Gestionnaire
             Selection.Value = 123
             Exit Sub
          Gestionnaire :
             MsgBox "Impossible d'attribuer une valeur à cette sélection"
          End Sub

      Attention : dans ce cas, vous êtes obligé d'utiliser l'instruction [Exit Sub] avant l'étiquette
      pour que le message n'apparaisse pas en cas de bon fonctionnement.




Edited By Depret Grégory                                                                         Page 90
                           Cours de VBA pour Excel 2007

Annexe A : Les fonctions prédéfinies

     Fonction VBA                                      Description
            abs                        Retourne la valeur absolue d'un nombre
            Asc              Convertit le premier caractère de la chaîne au format ASCII
            Atn                          Retourne l'arc tangente d'un nombre
           Beep                                   Fait retentir un bip
           CBool                         Convertit une expression en Boolean
           CByte                              Convertit un nombre en Byte
           CCur                          Convertit une expression en Currency
          CDate                            Convertit une expression en Date
           CDbl                           Convertit une expression en Double
           CDec                          Convertit une expression en Decimal
            CInt                          Convertit une expression en Integer
           CLng                            Convertit une expression en Long
            Cos                             Retourne le cosinus d'un nombre
           CSng                            Convertit une expression en Single
            CStr                           Convertit une expression en String
          CurDir                              Retourne le chemin courant
           Date                                Retourne la date courante
        DateAdd                       Ajoute un intervalle de temps à une date
        DateDiff                     Retourne l'intervalle de temps entre 2 dates
        DatePart                       Retourne la partie spécifique d'une date
       DateSerial                       Convertit une date en numéro de série
       DateValue                              Convertit une chaîne en Date
            Day                           Retourne le jour du mois d'une date
            DDB                           Retourne l'amortissement d'un bien
             Dir                       Retourne le nom d'un fichier ou dossier
            EOF                    Retourne True si la fin d'un fichier a été atteinte
            Exp            Retourne la base des logarithmes naturels élevé à une puissance
        FileCopy                                    Copie un fichier
          FileLen                      Retourne le nombre d'octets d'un fichier
             Fix                       Retourne la partie entière d'un nombre
    FormatCurrency          Retourne une expression avec le symbole monétaire système
    FormatDateTime                 Retourne une expression au format Date/Heure
     FormatPercent                 Retourne une expression au format pourcentage
         FreeFile              Retourne le numéro du prochain fichier texte disponible
             FV                        Retourne la valeur future d'une annuité
           Hour                                    Retourne l'heure
        InputBox           Affiche une boîte de dialogue permettant d'effectuer une saisie
           InStr               Retourne la position d'une chaîne dans une autre chaîne
         InStrRev      Retourne la position d'une chaîne dans une autre chaîne en partant de la
                                                           fin
           Int                         Retourne la partie entière d'un nombre
          Ipmt         Retourne le paiement des intérêts sur une période donnée d'un annuité
           IRR         Retourne le taux de rendement interne d'une série de marges brutes de
                                                      financement
         IsArray                     Retourne True si une variable est un tableau



Edited By Depret Grégory                                                                Page 91
                           Cours de VBA pour Excel 2007

      Fonction VBA                                       Description
          IsDate                        Retourne True si une variable est une date
         IsEmpty                      Retourne True si une variable a été initialisée
        IsMissing           Retourne True si un argument facultatif n'a pas été passé à une
                                                          procédure
         IsNull            Retourne True si une expression ne contient aucune donnée valide
       IsNumeric         Retourne True si une expression peut être évaluée comme un nombre
          Join                    Concatène des chaînes contenues dans un tableau
           Kill                                        Efface un fichier
         Lcase                        Retourne une chaîne convertie en minuscules
          Left         Retourne un nombre indiqué de caractères en partant de la gauche d'une
                                                            chaîne
          Len                       Retourne le nombre de caractères d'une chaîne
         Load                     Charge un objet en mémoire mais ne le montre pas
          LOF                        Retourne le nombre d'octets d'un fichier texte
          Log                         Retourne le logarithme naturel d'un nombre
        Ltrim                        Retourne une chaîne sans les espaces à gauche
         Mid                   Retourne un nombre indiqué de caractères d'une chaîne
        Minute                                       Retourne les minutes
        MIRR           Retourne le taux de rendement interne modifié pour une série de marges
                                            brutes de financements périodiques
         MkDir                                         Crée un dossier
         Month                                   Retourne le mois d'une date
      MonthName                           Retourne le mois sous forme de chaîne
        MsgBox                                  Affiche une boîte de dialogue
           Now                     Retourne la date et l'heure courant e du système
          Nper                    Retourne le nombre de périodes pour une annuité
           NPV                        Retourne la valeur nette d'un investissement
           Pmt                   Retourne le montant des paiements pour une annuité
          PPmt                     Retourne le montant du capital pour une annuité
            PV                          Retourne la valeur actuelle d'une annuité
      Randomize                        Initialise le générateur de nombre aléatoire
           Rate                 Retourne le taux d'intérêt par période pour une annuité
          Reset                            Ferme tous les fichiers textes ouverts
          Right            Retourne un nombre indiqué de caractères en partant de la droite
         RmDir                                    Supprime un dossier vide
           Rnd                          Retourne un nombre aléatoire entre 0 et 1
         Round                                  Retourne un nombre arrondi
          Rtrim               Retourne une copie d'une chaîne sans les espaces de droite
         Second                                     Retourne les secondes
           Seek                    Retourne la position actuelle dans un fichier texte
            Sin                                Retourne le sinus d'un nombre
           SLN            Retourne l'amortissement linéaire d'un bien sur une période donnée
          Space                 Retourne une chaîne avec un nombre donné d'espaces
           Split          Retourne un tableau contenant un certains nombre de sous-chaînes
            Sqr                           Retourne la racine carrée d'un nombre
        StrComp         Retourne une valeur indiquant le résultat d'une comparaison de chaînes
       StrReverse                               Retourne une chaîne inversée



Edited By Depret Grégory                                                               Page 92
                           Cours de VBA pour Excel 2007

      Fonction VBA                                  Description
          SYD          Retourne une valeur indiquant l'amortissement global d'un bien sur une
                                                  période donnée
         Tan                            Retourne la tangente d'un nombre
         Time                         Retourne le temps courant du système
        Timer                     Retourne le nombre de secondes depuis minuit
      TimeSerial          Retourne une valeur de temps précise (Heure, Minute, Seconde)
         Trim                            Retourne une chaîne sans espace
        UCase                           Convertit une chaîne en majuscules
        Unload                           Décharge un objet de la mémoire
       WeekDay                Retourne un nombre représentant le jour de la semaine
     WeekDayName              Retourne une chaîne représentant le jour de la semaine
         Year                               Retourne l'année d'une date




Edited By Depret Grégory                                                               Page 93

								
To top