Visual Basic for Applications -...

62
Visual Basic for Applications (sous Excel) Frédéric Cadier ENST Bretagne - Département LUSSI [email protected] Cadier F. (ENST Bretagne) VBA 1 / 62

Transcript of Visual Basic for Applications -...

Visual Basic for Applications(sous Excel)

Frédéric Cadier

ENST Bretagne - Département LUSSI

[email protected]

Cadier F. (ENST Bretagne) VBA 1 / 62

Plan de la présentation

1 Excel et VBA

2 Bases et Concepts

3 Le langage VBA

4 UserForm

Cadier F. (ENST Bretagne) VBA 2 / 62

Excel et VBA

Plan de la présentation

1 Excel et VBA

2 Bases et Concepts

3 Le langage VBA

4 UserForm

Cadier F. (ENST Bretagne) VBA 3 / 62

Excel et VBA Bref Historique des Tableurs...

VisiCalc Créé par D.Bricklin et B.Frankston, en 1978, pour Apple IISuperCalc Créé par Sorcim, pour CP/M, puis pour PC (1981)

Lotus 1-2-3 Créé par Lotus, en 1983, pour PC, puis pour DOS et OS/2 (1989)et Windows (1991)

Quattro Créé par Borland, en 1987 (version Pro en 1989), pour PC, puispour Windows (1992)

Multiplan Créé par Microsoft, en 1982, pour CP/M, puis Apple II, Apple III,XENIX et MS-DOS

Excel Créé par Microsoft, en 1985, pour Macintosh !!

Cadier F. (ENST Bretagne) VBA 4 / 62

Excel et VBA Bref Historique des Tableurs...

Version Windows :• Excel 2 en 1987 : langage de macro XLM• Excel 3 en 1990 : ajout de fonctionnalités (dessin, support OLE, travail en

groupe, BDD externes...)• Excel 4 en 1992 : Excel prend la tête du marché...• Excel 5 en 1994 : langage de macro VBA !!• Excel 95 (Windows 95) : application réécrite...• Excel 97 en 1997 : mise en place de VBA au niveau d’Office• 2000 en 1999, 2002 en 2001 et 2003 en... 2003 ! : mises à jour et évolutions

mineures

Cadier F. (ENST Bretagne) VBA 5 / 62

Excel et VBA Excel

Vue d’ensemble :• Interface...• Saisie des données :

• Valeur numérique• Texte• Valeur booléenne (true ou false)

• Saisie des formules (simples et matricielles)...

Cadier F. (ENST Bretagne) VBA 6 / 62

Excel et VBA Excel

Utilisation des noms...

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

reste valide !• lisibilité du code

Exemple :Déplacement de cellules nommées :

• le code Range(”D1 : D10”) n’est pas mis à jour et n’est plus valide.• tandis que Range(”DataClient”) est toujours valide.

Cadier F. (ENST Bretagne) VBA 7 / 62

Excel et VBA Excel

Les applications Office sont hautement programmables, notamment grâce à VBA,qui permet de manipuler leurs modèles d’objets.

Exemple : ExcelLes objets d’Excel comprennent entre autres :

• l’application elle-même,• les classeurs d’Excel,• les feuilles de calcul et de graphique dans un classeur,• les lignes ou les colonnes dans une feuille de calcul,• les graphiques dans une feuille de graphique,• les différents graphismes d’un graphique...

Cadier F. (ENST Bretagne) VBA 8 / 62

Excel et VBA Les fichiers d’Excel

.xls Fichier classeur : ses feuilles, le code VBA....xlw Environnement : informations sur l’espace de travail.xlt Fichier modèle de classeur.xlb Fichier de configuration des barres d’outils et des menus.xla Macro complémentaire : fonctions, barre d’outils...

HTML Peut servir de format natif depuis Excel 2000XML Importation des données XML depuis Excel 2003

Cadier F. (ENST Bretagne) VBA 9 / 62

Excel et VBA Un Peu de Méthode...

Quelques bonnes questions, avant la conception :• Utilisateur cible : plus ou expérimentés et/ou intéressés.• Type d’application tableur :

Personnelle Développée par et pour le développeur ;Utilitaire Ensemble de fonctions généralistes ;

Mono-Bloc Ne contient qu’un seul tableau de données ;Modélisation d’Hypothèses :

Application complexe, faisant intervenir des calculs « lourds » ;Interface BDD :

La convivialité d’un tableau allié à la puissance d’une base dedonnées ;

« Clé en main » :L’utilisateur est entièrement guidé dans son utilisation del’application.

Cadier F. (ENST Bretagne) VBA 10 / 62

Excel et VBA Un Peu de Méthode...

Cycle de conception :1. Déterminer les besoins des utilisateurs,2. Planification du développement :

• Structure du ou des fichier(s)• Structure des données• Type de l’interface utilisateur• Formules vs. code VBA• Macro complémentaire ou fichier XLS• Gestion des erreurs, des version d’Excel, des problèmes de performance, du

niveau de sécurité...3. Développement4. Test de l’application5. Protéger l’application et masquer les éléments inutiles6. Distribuer l’application7. Mises à jour...

Cadier F. (ENST Bretagne) VBA 11 / 62

Bases et Concepts

Plan de la présentation

1 Excel et VBA

2 Bases et Concepts

3 Le langage VBA

4 UserForm

Cadier F. (ENST Bretagne) VBA 12 / 62

Bases et Concepts D’où vient le VBA?

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

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

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

Cadier F. (ENST Bretagne) VBA 13 / 62

Bases et Concepts Notions fondamentales du VBA

Code Une action en VBA est inscrite dans du code.Procédure Au sein du code, les procédures effectuent des actions.

Module Les modules VBA sont stockés dans les classeurs, et contiennentle code, et les procédures.

Objet Ce sont les entités manipulées par le langage. Les objets sontorganisés sous forme de hiérarchies, possèdent des propriétés etdes méthodes.

Collection Objet particulier contenant un ensemble d’autres objets, tousidentiques.

Variable Entité portant un nom, et dans laquelle on stocke une valeur.

Cadier F. (ENST Bretagne) VBA 14 / 62

Bases et Concepts Retour sur le Modèle d’Objets d’Excel

Cadier F. (ENST Bretagne) VBA 15 / 62

Bases et Concepts Retour sur le Modèle d’Objets d’Excel

Cadier F. (ENST Bretagne) VBA 16 / 62

Bases et Concepts Le VBE (Visual Basic Editor)

Explorateur de projets :Liste les classeurs ouverts et leurs modules.

Explorateur d’Objets :Affiche l’ensemble des objets, de leurs méthodes et propriétés.

Propriétés Contient l’ensemble des propriétés statiques de l’objet en coursd’édition.

Exécution Exécute des procédures et/ou du code VBA.Variables Locales :

En cours de déboguage, liste l’ensemble des variables locales à laprocédure en cours.

Espions En cours de déboguage, permet de suivre l’évolution d’unesélection de variables.

Fenêtres de code :Permettent l’édition du code.

Cadier F. (ENST Bretagne) VBA 17 / 62

Bases et Concepts Écrire du code

Il existe deux moyens d’écrire du code :Saisie manuelle Le VBE contient des outils d’aide à la saisie (auto-complétion,

Info express, Info paramètres...)Enregistreur de macro Très utile pour construire rapidement une macro,

enregistrée en VBA.

Exemple :Sub DisBonjour()

Msg = "Vous appelez-vous " & Application.UserName & "?"Ans = MsgBox (Msg, vbYesNo)If Ans = vbNo Then

MsgBox "Dommage, j’ai tenté ma chance."Else

MsgBox "Je le savais !!"End If

End Sub

Cadier F. (ENST Bretagne) VBA 18 / 62

Le langage VBA

Plan de la présentation

1 Excel et VBA

2 Bases et Concepts

3 Le langage VBA

4 UserForm

Cadier F. (ENST Bretagne) VBA 19 / 62

Le langage VBA Commentaires

Commentaires

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

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

Exemple :Sub Test()

’ La méthode ClearContents vide les cellules,’ mais ne supprime pas la mise en pageActiveCell.ClearContents ’ Pas besoin de paramètre...ActiveCell.Value = "L’apostrophe est entre guillemets"

End Sub

Cadier F. (ENST Bretagne) VBA 20 / 62

Le langage VBA Variables

Variables

Emplacements de stockage nommés en mémoire.Règles de nommage :

• caractères alphanumériques ou "_" uniquement• le 1er caractère doit être alphabétique• la casse n’est pas prise en compte• 254 caractères maximum

Attention aux mots-clés réservés du langage

Exemple :Je_Suis_1_Variable = "hihi" ’ est valideje_suis_1_variable ’ est la même variableNext = 132 ’ n’est pas valide

Cadier F. (ENST Bretagne) VBA 21 / 62

Le langage VBA Variables

Déclaration

On distingue 3 « niveaux » de déclaration :local : → mot-clé Dim

• déclaration au sein d’une procédure• accessible uniquement dans cette procédure

module : → mot-clé Dim• déclaration en dehors de toute procédure• accessible dans toutes les procédures du module

publique : → mot-clé Public• déclaration de niveau module• accessible dans toutes les procédures de tous les modules

De plus, on peut déclarer une variable comme étant ;statique : → mot-clé Static

• déclaration de niveau local• conservation de la valeur à la fin de la procédure

constante : → mot-clé Const• déclaration de n’importe quel niveau• ne peut être modifiée

Cadier F. (ENST Bretagne) VBA 22 / 62

Le langage VBA Variables

Type de donnée

Dans la déclaration, on peut préciser le type de donnée :

Exemple :Dim iVal As Integer

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

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

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

Cadier F. (ENST Bretagne) VBA 23 / 62

Le langage VBA Variables

Exemples : Les chaînes et les dates

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

Exemple :Dim strText As String * 25

Une variable de type Date contient des dates allant du 1er janvier 100 au 31décembre 9999.Une valeur de type Date est spécifiée à l’aide du caractère #.

Exemple :Const dtDate As Date = #1/1/2005#Const dtMidi = #12:00:00#

Cadier F. (ENST Bretagne) VBA 24 / 62

Le langage VBA Variables

Tableaux (1/2)

Un tableau se déclare en faisant suivre le nom de la variable de parenthèses, danslesquelles on spécifie ses dimensions.

Exemple :Dim iTab() As Integer ’ Tableau dynamiqueDim vTab(1 To 100) ’ Tableau de variantDim strTab(12, 12) As String ’ Tableau à 2 dimensions

Par défaut, l’index de base est 0. Pour le forcer à 1, on peut utiliserOption Base 1 en début de module.Pour l’accès aux éléments du tableau, on spécifie l’indice de l’élément entreparenthèses.

Exemple :strTab(3, 4) = "toto"

Cadier F. (ENST Bretagne) VBA 25 / 62

Le langage VBA Variables

Tableaux (2/2)

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

Pour conserver les éléments précédents, on utilise ReDim Preserve.

Exemple :Dim iTab() As Integer...ReDim iTab(150) ’ Le tableau est redimensionner...ReDim Preserve iTab(50) ’ On << ajoute >> des éléments

Cadier F. (ENST Bretagne) VBA 26 / 62

Le langage VBA Variables

Type de donnée personnalisé

On peut définir ses propres types de données complexes (structures) à l’aide dumot-clé Type.

Exemple :Type InfoClient

Entreprise As String * 25Contact As String * 15CodeRegion As IntegerVentes As Long

End Type...Dim BDDClient() As InfoClient

Cadier F. (ENST Bretagne) VBA 27 / 62

Le langage VBA Manipulation d’objets et de collections

Manipulation d’objets

La structure With − End With permet de simplifier l’écriture lors de lamanipulation de variables d’objets.

Exemple :’ Ceci...Selection.Font.Name = "Times New Roman"Selection.Font.FontStyle = "Bold Italic"Selection.Font.Size = 12Selection.Font.Underline = xlUnderlineStyleSingle’ ... est équivalent à celaWith Selection.Font

.Name = "Times New Roman"

.FontStyle = "Bold Italic"

.Size = 12

.Underline = xlUnderlineStyleSingleEnd With

Cadier F. (ENST Bretagne) VBA 28 / 62

Le langage VBA Manipulation d’objets et de collections

Manipulation de collections (1/2)

La structure For Each − Next permet d’exécuter une même tâche sur tous leséléments d’une collection.

Syntaxe :For Each item In collection

[instructions][Exit For][instructions]

Next [item]

Notes :• item doit être préalablement déclaré si c’est une variable d’objet.• l’indication de item après Next permet une relecture plus aisée du code.

Cadier F. (ENST Bretagne) VBA 29 / 62

Le langage VBA Manipulation d’objets et de collections

Manipulation de collections (2/2)

Exemple :Dim wb As WorkbookDim ws As Worksheet

’ Parcours toutes les feuilles de tous les classeursFor Each wb In Application.Workbooks

For Each ws In wb.Worksheets...

Next wsNext wb

Cadier F. (ENST Bretagne) VBA 30 / 62

Le langage VBA Contrôle de flux

Contrôle de flux (1/6)

L’instruction GoTo permet de transférer l’exécution du programme vers uneetiquette (i.e. un nom suivi de ":").

Exemple :Sub DisBonjour()

Msg = "Vous appelez-vous " & Application.UserName & "?"Ans = MsgBox (Msg, vbYesNo)If Ans = vbNo Then Goto mauvaiseReponse End IfMsgBox "Je le savais !!"

mauvaiseReponse:End Sub

Cadier F. (ENST Bretagne) VBA 31 / 62

Le langage VBA Contrôle de flux

Contrôle de flux (2/6)

La construction If − Then permet l’exécution conditionnelle d’une partie de code.

Syntaxe :If condition Then

instructions-vrai[ElseIf condition-n Then

[instructions-alternatives-n]][...][Else instructions-par-defaut]End If

Note : Il existe aussi la fonction IIf :

Exemple :MsgBox IIf(bCondition, "vrai", "faux")

Cadier F. (ENST Bretagne) VBA 32 / 62

Le langage VBA Contrôle de flux

Contrôle de flux (3/6)

La structure Select Case permet de choisir entre 2 conditions ou plus.

Syntaxe :Select Case expressionTest

[Case liste-valeurs-test-n[instructions-n]]

[...][Case Else

[instructions-par-defaut]]End Select

Cadier F. (ENST Bretagne) VBA 33 / 62

Le langage VBA Contrôle de flux

Contrôle de flux (4/6)

La boucle For − Next exécute une série d’instructions sur une plage de valeursentières.

Syntaxe :For Compteur = start To end [Step valeur-pas]

[instructions][Exit For][instructions]

Next [Compteur]

Cadier F. (ENST Bretagne) VBA 34 / 62

Le langage VBA Contrôle de flux

Contrôle de flux (5/6)

La boucle Do −While exécute une série d’instructions tant qu’une condition estvérifiée.

Syntaxes :Do [While condition]

[instructions][Exit Do][instructions]

LoopouDo

[instructions][Exit Do][instructions]

Loop [While condition]

Cadier F. (ENST Bretagne) VBA 35 / 62

Le langage VBA Contrôle de flux

Contrôle de flux (6/6)

La boucle Do − Until exécute une série d’instructions tant qu’une condition n’estpas vérifiée.

Syntaxes :Do [Until condition]

[instructions][Exit Do][instructions]

LoopouDo

[instructions][Exit Do][instructions]

Loop [Until condition]

Cadier F. (ENST Bretagne) VBA 36 / 62

Le langage VBA Écrire des procédures

Les procédures Sub

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

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

Cadier F. (ENST Bretagne) VBA 37 / 62

Le langage VBA Écrire des procédures

Déclaration

[Private|Public] [Static] Sub nom([listeargs])[instructions][Exit Sub][instructions]

End Sub

Private Visible uniquement dans le module de déclaration.Public (par défaut) Visible dans l’intégralité du classeur.Static Toutes les variables de la procédure seront Static

nom cf. règles de nommage des variables.listeargs Liste des paramètres passés à la procédure.

Note : Option Private Module rend toutes les procédures privées.

Cadier F. (ENST Bretagne) VBA 38 / 62

Le langage VBA Écrire des procédures

Exécution (1/2)

... à partir du VBE :F5 Exécute la procédure ayant le focus.

Fenêtre Exécution Permet l’exécution de commandes VBA...Procédures événementielles Associées à des... événements.

... à partir d’une autre procédure :Appel direct

• [[projet.]module.]proc (listeargs)

Mot-clé Call

• Call [[projet.]module.]proc (listeargs)

Méthode Application.Run

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

Cadier F. (ENST Bretagne) VBA 39 / 62

Le langage VBA Écrire des procédures

Exécution... (2/2)

... à partir d’Excel :Alt+F8 Attention : seules les procédures Sub publiques sans arguments y

sont visibles.Touche de raccourci Une touche de raccourci peut être définié à partir de la boîte

de dialogue Macro (Alt+F8).Bouton/Menu On peut affecter une macro à un élément de menu, ou un bouton

de barre d’outils.Click sur un objet On peut associer une macro à un click sur n’importe quel objet

de ’Formulaires’.

Cadier F. (ENST Bretagne) VBA 40 / 62

Le langage VBA Écrire des procédures

Passage d’arguments (1/2)

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

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

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

facultatifs, puis l’éventuelle liste

Cadier F. (ENST Bretagne) VBA 41 / 62

Le langage VBA Écrire des procédures

Passage d’arguments (2/2)

Passage par référence (par défaut) Seule l’adresse de la donnée est passée enargument.

Passage par valeur Une copie de la donnée est passée en argument : l’argumentdoit être déclaré avec le mot clé ByVal.

Note : Une variable définie à l’aide d’un type personnalisé ne peut pas être passéepar valeur.

Cadier F. (ENST Bretagne) VBA 42 / 62

Le langage VBA Écrire des procédures

Gestion des erreurs

Le principe est d’intercepter les erreurs d’exécution pour que l’utilisateur ne seretrouve pas devant une situation de bug.

Syntaxe :On Error {Resume Next|Goto etiquette}

Resume Next L’exécution n’est pas stoppée (attention aux erreurs en cascade).Goto etiquette L’exécution est transférée vers une section de gestion des erreurs.Notes :

• Dans les deux situations, l’objet Err contient les caractéristiques de l’erreur.• On Error Goto 0 restaure la gestion standard des erreurs.

Cadier F. (ENST Bretagne) VBA 43 / 62

Le langage VBA Écrire des procédures

Les procédures Function

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

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

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

Cadier F. (ENST Bretagne) VBA 44 / 62

Le langage VBA Écrire des procédures

Déclaration et portée

[Private|Public] [Static] Function nom([listeargs])[As type]

[instructions][nom = expression][Exit Function][instructions][nom = expression]

End Function

Private Visible uniquement dans le module de déclaration.Public (par défaut) Visible dans l’intégralité du classeur.Static Toutes les variables de la procédure seront Static

nom Cf. règles de nommage des variables.listeargs Liste des paramètres passés à la procédure.

type Précise le type de la donnée retournée.

Cadier F. (ENST Bretagne) VBA 45 / 62

Le langage VBA Écrire des procédures

Exécution (1/2)

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

... à partir d’une autre procédure :Appel direct

• [variable =] [[projet.]module.]proc (listeargs)

Méthode Application.Run

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

Cadier F. (ENST Bretagne) VBA 46 / 62

Le langage VBA Écrire des procédures

Exécution... (2/2)

... à partir d’une formule dans Excel :• =’mes_fonctions.xls’!nom_proc(listeargs)• =nom_proc(listeargs) si le classeur est "référencé" ou si il a été enregistré

en tant que macro complémentaire.Notes : Pour trouver une fonction, on peut utiliser Insertion>Fonctions...

Cadier F. (ENST Bretagne) VBA 47 / 62

Le langage VBA Écrire des procédures

Valeur de retour

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

Néanmoins, celle-ci peut être un tableau. Pour cela, la fonction doit renvoyé untype variant, et construire sa valeur de retour à l’aide de la fonction Array.

Exemple :Function NomsMois()

NomsMois = Array("Janvier", "Février", "Mars", _"Avril", "Mai", "Juin", "Juillet", "Août", _"Septembre", "Octobre", "Novembre", "Décembre")

End Function

Cadier F. (ENST Bretagne) VBA 48 / 62

UserForm

Plan de la présentation

1 Excel et VBA

2 Bases et Concepts

3 Le langage VBA

4 UserForm

Cadier F. (ENST Bretagne) VBA 49 / 62

UserForm Création

Création d’un User Form

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

Puis insérer des contrôles...

Cadier F. (ENST Bretagne) VBA 50 / 62

UserForm Contrôles

Contrôles d’un User Form 1/3

Label Intitulé :Pour l’insertion de texte dans la boîte de dialogue.

TextBox Zone de texte :Permet à l’utilisateur de saisir des données.

CheckBox Case à cocher :Permet un choix binaire.

ListBox Zone de liste :Affiche une liste d’éléments dans laquelle l’utilisateur peut opérerdes sélections.

ComboBox Liste déroulante :Semblable à une ListBox, mais n’affiche qu’un seul élément, etpermet à l’utilisateur de saisir de nouvelles données.

Cadier F. (ENST Bretagne) VBA 51 / 62

UserForm Contrôles

Contrôles d’un User Form 2/3

CommandButton Bouton de commande :Permet l’exécution de... commandes.

ToggleButton Bouton bascule :Un bouton de ce type a deux états : activé (aspect enfoncé) etdésactivé.

OptionButton Bouton d’option :Une fois groupé avec d’autres boutons d’options, il est utile poursélectionner une option parmi plusieurs.

SpinButton Toupie :Permet de sélectionner une valeur à l’aide de 2 flèches : une pourl’augmenter, l’autre pour la diminuer.

ScrollBar Barre de défilement :Semblable à un SpinButton, mais l’utilisateur peut déplacer lebouton de défilement afin de modifier la valeur.

Cadier F. (ENST Bretagne) VBA 52 / 62

UserForm Contrôles

Contrôles d’un User Form 3/3

Frame Cadre :Permet le regroupement d’autres contrôles.

Image : Ces images seront intégrées au fichier Excel.Multipage : Crée une série d’onglets pouvant intégrer d’autres contrôles.

TabStrip Contrôle onglet :Semblable à Multipage... en moins utilisable !!

RefEdit : Offre à l’utilisateur la possibilité de sélectionner une plage decellule.

Cadier F. (ENST Bretagne) VBA 53 / 62

UserForm Cycle de vie

Gestion d’un User Form

1. Charger le UserForm en mémoire (facultatif) :Load nom_user_form

2. Afficher le UserForm :nom_user_form.Show [0]0 : affichage non modal

3. Masquer le UserForm (facultatif) :nom_user_form.Hide

4. Décharger le UserForm de la mémoire :Unload nom_user_form

Cadier F. (ENST Bretagne) VBA 54 / 62

UserForm Événements

Les événements d’un User Form

Initialize Survient avant que le User Form ne soit chargé ou affiché.Activate Survient lorsque le User Form est activé.

Deactivate Survient lorsque le User Form est désactivé.QueryClose Survient avant que le User Form soit déchargé.Terminate Survient après que le User Form a été déchargé.

Notes :• Load déclenche Initialize• Show déclenche Initialize et Activate (dans cet ordre)• Hide ne déclenche aucun événement• Unload déclenche QueryClose et Terminate (dans cet ordre)

Cadier F. (ENST Bretagne) VBA 55 / 62

UserForm Solutions alternatives

InputBox 1/2

InputBox (du VBA) :InputBox(prompt[,title][,default] _

[,xpos][,ypos][,helpfile,context])

prompt Le texte de la boîte de dialogue.title Le titre de la boîte de dialogue.

default Chaîne de caractères contenant la valeur par défaut.xpos, ypos Les coordonnées du coin supérieur gauche.

helpfile, context Le fichier d’aide et le sujet associé.

Cadier F. (ENST Bretagne) VBA 56 / 62

UserForm Solutions alternatives

InputBox 2/2

InputBox (d’Excel) :Application.InputBox(prompt[,title][,default] _

[,left][,top][,helpfile,helpContextID][,type])

prompt Le texte de la boîte de dialogue.title Le titre de la boîte de dialogue.

default Chaîne de caractères contenant la valeur par défaut.left, top Les coordonnées du coin supérieur gauche.

helpfile, helpContextID Le fichier d’aide et le sujet associé.type Le type de la donnée attendue.

Cadier F. (ENST Bretagne) VBA 57 / 62

UserForm Solutions alternatives

MsgBox

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

prompt Le texte de la boîte de dialogue.buttons Ensemble de boutons et d’icônes de la boîte de dialogue.

title Le titre de la boîte de dialogue.helpfile, helpContextID Le fichier d’aide et le sujet associé.

Cadier F. (ENST Bretagne) VBA 58 / 62

UserForm Solutions alternatives

GetOpenFilename 1/2

GetOpenFilename (d’Excel) :Application.GetOpenFilename([FileFilter] _

[,FilterIndex][,title][,ButtonText][,MultiSelect])

FileFilter Chaîne spécifiant les critères de filtrage.FilterIndex Index du critère de filtrage par défaut.

title Le titre de la boîte de dialogue (« Ouvrir » par défaut).ButtonText Pour Macintosh uniquement !MultiSelect Booléen spécifiant si plusieurs fichiers peuvent être sélectionnés.

Cadier F. (ENST Bretagne) VBA 59 / 62

UserForm Solutions alternatives

GetOpenFilename 2/2

Exemple :Sub openFileSrc()

Dim Filt As StringDim IndexFiltre As IntegerDim NomFichier As Variant

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

NomFichier = Application.GetOpenFilename( _FileFilter:=Filt, FilterIndex:=2, _Title:="Sélectionner un fichier source")

If NomFichier <> False Then MsgBox NomFichierEnd Sub

Cadier F. (ENST Bretagne) VBA 60 / 62

UserForm Solutions alternatives

GetSaveAsFilename

GetSaveAsFilename (d’Excel) :Application.GetSaveAsFilename([InitialFilename] _

[,FileFilter][,FilterIndex][,title][,ButtonText])

InitialFilename Le nom de fichier suggéré (le nom du classeur par défaut).FileFilter Chaîne spécifiant les critères de filtrage.

FilterIndex Index du critère de filtrage par défaut.title Le titre de la boîte de dialogue (« Sauvegarder sous » par défaut).

ButtonText Pour Macintosh uniquement !

Cadier F. (ENST Bretagne) VBA 61 / 62

UserForm Solutions alternatives

L’objet FileDialog

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

Exemple :Sub selectionnerDossier()

With Application.FileDialog(msoFileDialogFolderPicker).InitialFileName = Application.DefaultFilePath & "\".Title = "Sélectionnez un emplacement".ShowIf .SelectedItems.Count <> 0 Then _

MsgBox .SelectedItems(1)End With

End Sub

Cadier F. (ENST Bretagne) VBA 62 / 62