Visual Basic for Applications - (sous Excel) Frédéric Cadier
←
→
Transcription du contenu de la page
Si votre navigateur ne rend pas la page correctement, lisez s'il vous plaît le contenu de la page ci-dessous
Visual Basic for Applications (sous Excel) Frédéric Cadier ENST Bretagne - Département LUSSI frederic.cadier@enst-bretagne.fr Cadier F. (ENST Bretagne) VBA 1 / 62
Plan de la présentation 1 Excel et VBA 2 Bases et Concepts 3 Le langage VBA 4 UserForm Cadier F. (ENST Bretagne) VBA 2 / 62
Excel et VBA Plan de la présentation 1 Excel et VBA 2 Bases et Concepts 3 Le langage VBA 4 UserForm Cadier F. (ENST Bretagne) VBA 3 / 62
Excel et VBA Bref Historique des Tableurs... VisiCalc Créé par D.Bricklin et B.Frankston, en 1978, pour Apple II SuperCalc Créé par Sorcim, pour CP/M, puis pour PC (1981) Lotus 1-2-3 Créé par Lotus, en 1983, pour PC, puis pour DOS et OS/2 (1989) et Windows (1991) Quattro Créé par Borland, en 1987 (version Pro en 1989), pour PC, puis pour Windows (1992) Multiplan Créé par Microsoft, en 1982, pour CP/M, puis Apple II, Apple III, XENIX et MS-DOS Excel Créé par Microsoft, en 1985, pour Macintosh !! Cadier F. (ENST Bretagne) VBA 4 / 62
Excel et VBA Bref Historique des Tableurs... Version Windows : • Excel 2 en 1987 : langage de macro XLM • Excel 3 en 1990 : ajout de fonctionnalités (dessin, support OLE, travail en groupe, BDD externes...) • Excel 4 en 1992 : Excel prend la tête du marché... • Excel 5 en 1994 : langage de macro VBA !! • Excel 95 (Windows 95) : application réécrite... • Excel 97 en 1997 : mise en place de VBA au niveau d’Office • 2000 en 1999, 2002 en 2001 et 2003 en... 2003 ! : mises à jour et évolutions mineures Cadier F. (ENST Bretagne) VBA 5 / 62
Excel et VBA Excel Vue d’ensemble : • Interface... • Saisie des données : • Valeur numérique • Texte • Valeur booléenne (true ou false) • Saisie des formules (simples et matricielles)... Cadier F. (ENST Bretagne) VBA 6 / 62
Excel et VBA Excel Utilisation des noms... Cette fonctionnalité est essentielle pour le développeur VBA : • aucune mise à jour du code en cas de déplacement d’une cellule, mais le nom reste valide ! • lisibilité du code Exemple : Déplacement de cellules nommées : • le code Range(”D1 : D10”) n’est pas mis à jour et n’est plus valide. • tandis que Range(”DataClient”) est toujours valide. Cadier F. (ENST Bretagne) VBA 7 / 62
Excel et VBA Excel Les applications Office sont hautement programmables, notamment grâce à VBA, qui permet de manipuler leurs modèles d’objets. Exemple : Excel Les objets d’Excel comprennent entre autres : • l’application elle-même, • les classeurs d’Excel, • les feuilles de calcul et de graphique dans un classeur, • les lignes ou les colonnes dans une feuille de calcul, • les graphiques dans une feuille de graphique, • les différents graphismes d’un graphique... Cadier F. (ENST Bretagne) VBA 8 / 62
Excel et VBA Les fichiers d’Excel .xls Fichier classeur : ses feuilles, le code VBA... .xlw Environnement : informations sur l’espace de travail .xlt Fichier modèle de classeur .xlb Fichier de configuration des barres d’outils et des menus .xla Macro complémentaire : fonctions, barre d’outils... HTML Peut servir de format natif depuis Excel 2000 XML Importation des données XML depuis Excel 2003 Cadier F. (ENST Bretagne) VBA 9 / 62
Excel et VBA Un Peu de Méthode... Quelques bonnes questions, avant la conception : • Utilisateur cible : plus ou expérimentés et/ou intéressés. • Type d’application tableur : Personnelle Développée par et pour le développeur ; Utilitaire Ensemble de fonctions généralistes ; Mono-Bloc Ne contient qu’un seul tableau de données ; Modélisation d’Hypothèses : Application complexe, faisant intervenir des calculs « lourds » ; Interface BDD : La convivialité d’un tableau allié à la puissance d’une base de données ; « Clé en main » : L’utilisateur est entièrement guidé dans son utilisation de l’application. Cadier F. (ENST Bretagne) VBA 10 / 62
Excel et VBA Un Peu de Méthode... Cycle de conception : 1. Déterminer les besoins des utilisateurs, 2. Planification du développement : • Structure du ou des fichier(s) • Structure des données • Type de l’interface utilisateur • Formules vs. code VBA • Macro complémentaire ou fichier XLS • Gestion des erreurs, des version d’Excel, des problèmes de performance, du niveau de sécurité... 3. Développement 4. Test de l’application 5. Protéger l’application et masquer les éléments inutiles 6. Distribuer l’application 7. Mises à jour... Cadier F. (ENST Bretagne) VBA 11 / 62
Bases et Concepts Plan de la présentation 1 Excel et VBA 2 Bases et Concepts 3 Le langage VBA 4 UserForm Cadier F. (ENST Bretagne) VBA 12 / 62
Bases et Concepts D’où vient le VBA? Au début était le BASIC (Beginner’s All-purpose Symbolic Instruction Code), apparu dans les années 1960 dans les universités pour l’apprentissage de la programmation. D’abord uniquement interprété, ce langage évolue, s’améliore et devient compilable. En 1990, Microsoft introduit Visual Basic, puis le VBA en 1994 avec Office 95, qui reprend les mêmes bases conceptuelles. Cadier F. (ENST Bretagne) VBA 13 / 62
Bases et Concepts Notions fondamentales du VBA Code Une action en VBA est inscrite dans du code. Procédure Au sein du code, les procédures effectuent des actions. Module Les modules VBA sont stockés dans les classeurs, et contiennent le code, et les procédures. Objet Ce sont les entités manipulées par le langage. Les objets sont organisés sous forme de hiérarchies, possèdent des propriétés et des méthodes. Collection Objet particulier contenant un ensemble d’autres objets, tous identiques. Variable Entité portant un nom, et dans laquelle on stocke une valeur. Cadier F. (ENST Bretagne) VBA 14 / 62
Bases et Concepts Retour sur le Modèle d’Objets d’Excel Cadier F. (ENST Bretagne) VBA 15 / 62
Bases et Concepts Retour sur le Modèle d’Objets d’Excel Cadier F. (ENST Bretagne) VBA 16 / 62
Bases et Concepts Le VBE (Visual Basic Editor) Explorateur de projets : Liste les classeurs ouverts et leurs modules. Explorateur d’Objets : Affiche l’ensemble des objets, de leurs méthodes et propriétés. Propriétés Contient l’ensemble des propriétés statiques de l’objet en cours d’édition. Exécution Exécute des procédures et/ou du code VBA. Variables Locales : En cours de déboguage, liste l’ensemble des variables locales à la procédure en cours. Espions En cours de déboguage, permet de suivre l’évolution d’une sélection de variables. Fenêtres de code : Permettent l’édition du code. Cadier F. (ENST Bretagne) VBA 17 / 62
Bases et Concepts Écrire du code Il existe deux moyens d’écrire du code : Saisie manuelle Le VBE contient des outils d’aide à la saisie (auto-complétion, Info express, Info paramètres...) Enregistreur de macro Très utile pour construire rapidement une macro, enregistrée en VBA. Exemple : Sub DisBonjour() Msg = "Vous appelez-vous " & Application.UserName & "?" Ans = MsgBox (Msg, vbYesNo) If Ans = vbNo Then MsgBox "Dommage, j’ai tenté ma chance." Else MsgBox "Je le savais !!" End If End Sub Cadier F. (ENST Bretagne) VBA 18 / 62
Le langage VBA Plan de la présentation 1 Excel et VBA 2 Bases et Concepts 3 Le langage VBA 4 UserForm Cadier F. (ENST Bretagne) VBA 19 / 62
Le langage VBA Commentaires Commentaires Élément descriptif, i.e. non interprété, du code. Il peut être inséré à n’importe quel endroit dans une ligne, et tout ce qui le suit est ignoré. On le signale à l’aide d’un apostrophe ’ Exemple : Sub Test() ’ La méthode ClearContents vide les cellules, ’ mais ne supprime pas la mise en page ActiveCell.ClearContents ’ Pas besoin de paramètre... ActiveCell.Value = "L’apostrophe est entre guillemets" End Sub Cadier F. (ENST Bretagne) VBA 20 / 62
Le langage VBA Variables Variables Emplacements de stockage nommés en mémoire. Règles de nommage : • caractères alphanumériques ou "_" uniquement • le 1er caractère doit être alphabétique • la casse n’est pas prise en compte • 254 caractères maximum Attention aux mots-clés réservés du langage Exemple : Je_Suis_1_Variable = "hihi" ’ est valide je_suis_1_variable ’ est la même variable Next = 132 ’ n’est pas valide Cadier F. (ENST Bretagne) VBA 21 / 62
Le langage VBA Variables Déclaration On distingue 3 « niveaux » de déclaration : local : → mot-clé Dim • déclaration au sein d’une procédure • accessible uniquement dans cette procédure module : → mot-clé Dim • déclaration en dehors de toute procédure • accessible dans toutes les procédures du module publique : → mot-clé Public • déclaration de niveau module • accessible dans toutes les procédures de tous les modules De plus, on peut déclarer une variable comme étant ; statique : → mot-clé Static • déclaration de niveau local • conservation de la valeur à la fin de la procédure constante : → mot-clé Const • déclaration de n’importe quel niveau • ne peut être modifiée Cadier F. (ENST Bretagne) VBA 22 / 62
Le langage VBA Variables Type de donnée Dans la déclaration, on peut préciser le type de donnée : Exemple : Dim iVal As Integer Si le type n’est pas précisé, VBA utilise le type variant. Très souple à l’utilisation, il pénalise néanmoins l’application sur la vitesse d’exécution. Note : Pour se forcer à déclarer toutes les variables, on peut utiliser Option Explicit en début de module. Types de base : Byte, Boolean, Integer, Long, Single, Double, Currency, Decimal, Date, Object, String et Variant Cadier F. (ENST Bretagne) VBA 23 / 62
Le langage VBA Variables Exemples : Les chaînes et les dates Lorsqu’elle est déclarée avec le mot-clé Dim, on peut préciser la taille d’une chaîne de caractère au sein même de sa déclaration : Exemple : Dim strText As String * 25 Une variable de type Date contient des dates allant du 1er janvier 100 au 31 décembre 9999. Une valeur de type Date est spécifiée à l’aide du caractère #. Exemple : Const dtDate As Date = #1/1/2005# Const dtMidi = #12:00:00# Cadier F. (ENST Bretagne) VBA 24 / 62
Le langage VBA Variables Tableaux (1/2) Un tableau se déclare en faisant suivre le nom de la variable de parenthèses, dans lesquelles on spécifie ses dimensions. Exemple : Dim iTab() As Integer ’ Tableau dynamique Dim vTab(1 To 100) ’ Tableau de variant Dim strTab(12, 12) As String ’ Tableau à 2 dimensions Par défaut, l’index de base est 0. Pour le forcer à 1, on peut utiliser Option Base 1 en début de module. Pour l’accès aux éléments du tableau, on spécifie l’indice de l’élément entre parenthèses. Exemple : strTab(3, 4) = "toto" Cadier F. (ENST Bretagne) VBA 25 / 62
Le langage VBA Variables Tableaux (2/2) Les tableaux dynamiques doivent être dimensionnés avant toute utilisation avec l’instruction ReDim. Les tableaux sont alors réinitialisés. Pour conserver les éléments précédents, on utilise ReDim Preserve. Exemple : Dim iTab() As Integer ... ReDim iTab(150) ’ Le tableau est redimensionner ... ReDim Preserve iTab(50) ’ On > des éléments Cadier F. (ENST Bretagne) VBA 26 / 62
Le langage VBA Variables Type de donnée personnalisé On peut définir ses propres types de données complexes (structures) à l’aide du mot-clé Type. Exemple : Type InfoClient Entreprise As String * 25 Contact As String * 15 CodeRegion As Integer Ventes As Long End Type ... Dim BDDClient() As InfoClient Cadier F. (ENST Bretagne) VBA 27 / 62
Le langage VBA Manipulation d’objets et de collections Manipulation d’objets La structure With − End With permet de simplifier l’écriture lors de la manipulation de variables d’objets. Exemple : ’ Ceci... Selection.Font.Name = "Times New Roman" Selection.Font.FontStyle = "Bold Italic" Selection.Font.Size = 12 Selection.Font.Underline = xlUnderlineStyleSingle ’ ... est équivalent à cela With Selection.Font .Name = "Times New Roman" .FontStyle = "Bold Italic" .Size = 12 .Underline = xlUnderlineStyleSingle End With Cadier F. (ENST Bretagne) VBA 28 / 62
Le langage VBA Manipulation d’objets et de collections Manipulation de collections (1/2) La structure For Each − Next permet d’exécuter une même tâche sur tous les éléments d’une collection. Syntaxe : For Each item In collection [instructions] [Exit For] [instructions] Next [item] Notes : • item doit être préalablement déclaré si c’est une variable d’objet. • l’indication de item après Next permet une relecture plus aisée du code. Cadier F. (ENST Bretagne) VBA 29 / 62
Le langage VBA Manipulation d’objets et de collections Manipulation de collections (2/2) Exemple : Dim wb As Workbook Dim ws As Worksheet ’ Parcours toutes les feuilles de tous les classeurs For Each wb In Application.Workbooks For Each ws In wb.Worksheets ... Next ws Next wb Cadier F. (ENST Bretagne) VBA 30 / 62
Le langage VBA Contrôle de flux Contrôle de flux (1/6) L’instruction GoTo permet de transférer l’exécution du programme vers une etiquette (i.e. un nom suivi de ":"). Exemple : Sub DisBonjour() Msg = "Vous appelez-vous " & Application.UserName & "?" Ans = MsgBox (Msg, vbYesNo) If Ans = vbNo Then Goto mauvaiseReponse End If MsgBox "Je le savais !!" mauvaiseReponse: End Sub Cadier F. (ENST Bretagne) VBA 31 / 62
Le langage VBA Contrôle de flux Contrôle de flux (2/6) La construction If − Then permet l’exécution conditionnelle d’une partie de code. Syntaxe : If condition Then instructions-vrai [ElseIf condition-n Then [instructions-alternatives-n]] [...] [Else instructions-par-defaut] End If Note : Il existe aussi la fonction IIf : Exemple : MsgBox IIf(bCondition, "vrai", "faux") Cadier F. (ENST Bretagne) VBA 32 / 62
Le langage VBA Contrôle de flux Contrôle de flux (3/6) La structure Select Case permet de choisir entre 2 conditions ou plus. Syntaxe : Select Case expressionTest [Case liste-valeurs-test-n [instructions-n]] [...] [Case Else [instructions-par-defaut]] End Select Cadier F. (ENST Bretagne) VBA 33 / 62
Le langage VBA Contrôle de flux Contrôle de flux (4/6) La boucle For − Next exécute une série d’instructions sur une plage de valeurs entières. Syntaxe : For Compteur = start To end [Step valeur-pas] [instructions] [Exit For] [instructions] Next [Compteur] Cadier F. (ENST Bretagne) VBA 34 / 62
Le langage VBA Contrôle de flux Contrôle de flux (5/6) La boucle Do − While exécute une série d’instructions tant qu’une condition est vérifiée. Syntaxes : Do [While condition] [instructions] [Exit Do] [instructions] Loop ou Do [instructions] [Exit Do] [instructions] Loop [While condition] Cadier F. (ENST Bretagne) VBA 35 / 62
Le langage VBA Contrôle de flux Contrôle de flux (6/6) La boucle Do − Until exécute une série d’instructions tant qu’une condition n’est pas vérifiée. Syntaxes : Do [Until condition] [instructions] [Exit Do] [instructions] Loop ou Do [instructions] [Exit Do] [instructions] Loop [Until condition] Cadier F. (ENST Bretagne) VBA 36 / 62
Le langage VBA Écrire des procédures Les procédures Sub Les procédures Sub s’assimilent à des commandes exécutées par l’utilisateur. Elles n’ont pas vocation à réaliser des calculs, mais permettent en revanche d’interagir avec le modèle d’objets (Excel, Word...). Cadier F. (ENST Bretagne) VBA 37 / 62
Le langage VBA Écrire des procédures Déclaration [Private|Public] [Static] Sub nom([listeargs]) [instructions] [Exit Sub] [instructions] End Sub Private Visible uniquement dans le module de déclaration. Public (par défaut) Visible dans l’intégralité du classeur. Static Toutes les variables de la procédure seront Static nom cf. règles de nommage des variables. listeargs Liste des paramètres passés à la procédure. Note : Option Private Module rend toutes les procédures privées. Cadier F. (ENST Bretagne) VBA 38 / 62
Le langage VBA Écrire des procédures Exécution (1/2) ... à partir du VBE : F5 Exécute la procédure ayant le focus. Fenêtre Exécution Permet l’exécution de commandes VBA... Procédures événementielles Associées à des... événements. ... à partir d’une autre procédure : Appel direct • [[projet.]module.]proc (listeargs) Mot-clé Call • Call [[projet.]module.]proc (listeargs) Méthode Application.Run • Run "[[projet.]module.]proc", listeargs • Run "[’classeur.xls’!]proc", listeargs Cadier F. (ENST Bretagne) VBA 39 / 62
Le langage VBA Écrire des procédures Exécution... (2/2) ... à partir d’Excel : Alt+F8 Attention : seules les procédures Sub publiques sans arguments y sont visibles. Touche de raccourci Une touche de raccourci peut être définié à partir de la boîte de dialogue Macro (Alt+F8). Bouton/Menu On peut affecter une macro à un élément de menu, ou un bouton de barre d’outils. Click sur un objet On peut associer une macro à un click sur n’importe quel objet de ’Formulaires’. Cadier F. (ENST Bretagne) VBA 40 / 62
Le langage VBA Écrire des procédures Passage d’arguments (1/2) Certains des arguments peuvent être facultatifs, à l’aide de la syntaxe suivante : Optional nom_var [As type] [= val_defaut] Il est également possible de spécifier une liste de paramètres de longueur non prédéterminé, à l’aide de la syntaxe suivante : ParamArray nom_liste_var() As Variant Note : • La liste est toujours un argument facultatif ; • Un ordre dans la liste des arguments doit être respecté : obligatoires, puis facultatifs, puis l’éventuelle liste Cadier F. (ENST Bretagne) VBA 41 / 62
Le langage VBA Écrire des procédures Passage d’arguments (2/2) Passage par référence (par défaut) Seule l’adresse de la donnée est passée en argument. Passage par valeur Une copie de la donnée est passée en argument : l’argument doit être déclaré avec le mot clé ByVal. Note : Une variable définie à l’aide d’un type personnalisé ne peut pas être passée par valeur. Cadier F. (ENST Bretagne) VBA 42 / 62
Le langage VBA Écrire des procédures Gestion des erreurs Le principe est d’intercepter les erreurs d’exécution pour que l’utilisateur ne se retrouve pas devant une situation de bug. Syntaxe : On Error {Resume Next|Goto etiquette} Resume Next L’exécution n’est pas stoppée (attention aux erreurs en cascade). Goto etiquette L’exécution est transférée vers une section de gestion des erreurs. Notes : • Dans les deux situations, l’objet Err contient les caractéristiques de l’erreur. • On Error Goto 0 restaure la gestion standard des erreurs. Cadier F. (ENST Bretagne) VBA 43 / 62
Le langage VBA Écrire des procédures Les procédures Function Les procédures Function s’apparentent aux fonctions de feuille de calcul d’Excel, ou aux fonctions intégrées de VBA. Elles sont habituellement utilisées comme élément d’une expression VBA, ou dans des formules de feuille de calcul. Elles ne peuvent pas interagir avec les objets (Excel, Word...) Cadier F. (ENST Bretagne) VBA 44 / 62
Le langage VBA Écrire des procédures Déclaration et portée [Private|Public] [Static] Function nom([listeargs]) [As type] [instructions][nom = expression] [Exit Function] [instructions][nom = expression] End Function Private Visible uniquement dans le module de déclaration. Public (par défaut) Visible dans l’intégralité du classeur. Static Toutes les variables de la procédure seront Static nom Cf. règles de nommage des variables. listeargs Liste des paramètres passés à la procédure. type Précise le type de la donnée retournée. Cadier F. (ENST Bretagne) VBA 45 / 62
Le langage VBA Écrire des procédures Exécution (1/2) ... à partir du VBE : Fenêtre Exécution Permet l’exécution de commandes VBA... ... à partir d’une autre procédure : Appel direct • [variable =] [[projet.]module.]proc (listeargs) Méthode Application.Run • [variable =] Run("[[projet.]module.]proc", listeargs) • [variable =] Run("[’classeur.xls’!]proc", listeargs) Cadier F. (ENST Bretagne) VBA 46 / 62
Le langage VBA Écrire des procédures Exécution... (2/2) ... à partir d’une formule dans Excel : • =’mes_fonctions.xls’!nom_proc(listeargs) • =nom_proc(listeargs) si le classeur est "référencé" ou si il a été enregistré en tant que macro complémentaire. Notes : Pour trouver une fonction, on peut utiliser Insertion>Fonctions... Cadier F. (ENST Bretagne) VBA 47 / 62
Le langage VBA Écrire des procédures Valeur de retour Une seul donnée peut être retournée par une fonction : variable locale portant le nom de la fonction Néanmoins, celle-ci peut être un tableau. Pour cela, la fonction doit renvoyé un type variant, et construire sa valeur de retour à l’aide de la fonction Array. Exemple : Function NomsMois() NomsMois = Array("Janvier", "Février", "Mars", _ "Avril", "Mai", "Juin", "Juillet", "Août", _ "Septembre", "Octobre", "Novembre", "Décembre") End Function Cadier F. (ENST Bretagne) VBA 48 / 62
UserForm Plan de la présentation 1 Excel et VBA 2 Bases et Concepts 3 Le langage VBA 4 UserForm Cadier F. (ENST Bretagne) VBA 49 / 62
UserForm Création Création d’un User Form Depuis le VBE : insérer un module de type UserForm... Puis insérer des contrôles... Cadier F. (ENST Bretagne) VBA 50 / 62
UserForm Contrôles Contrôles d’un User Form 1/3 Label Intitulé : Pour l’insertion de texte dans la boîte de dialogue. TextBox Zone de texte : Permet à l’utilisateur de saisir des données. CheckBox Case à cocher : Permet un choix binaire. ListBox Zone de liste : Affiche une liste d’éléments dans laquelle l’utilisateur peut opérer des sélections. ComboBox Liste déroulante : Semblable à une ListBox, mais n’affiche qu’un seul élément, et permet à l’utilisateur de saisir de nouvelles données. Cadier F. (ENST Bretagne) VBA 51 / 62
UserForm Contrôles Contrôles d’un User Form 2/3 CommandButton Bouton de commande : Permet l’exécution de... commandes. ToggleButton Bouton bascule : Un bouton de ce type a deux états : activé (aspect enfoncé) et désactivé. OptionButton Bouton d’option : Une fois groupé avec d’autres boutons d’options, il est utile pour sélectionner une option parmi plusieurs. SpinButton Toupie : Permet de sélectionner une valeur à l’aide de 2 flèches : une pour l’augmenter, l’autre pour la diminuer. ScrollBar Barre de défilement : Semblable à un SpinButton, mais l’utilisateur peut déplacer le bouton de défilement afin de modifier la valeur. Cadier F. (ENST Bretagne) VBA 52 / 62
UserForm Contrôles Contrôles d’un User Form 3/3 Frame Cadre : Permet le regroupement d’autres contrôles. Image : Ces images seront intégrées au fichier Excel. Multipage : Crée une série d’onglets pouvant intégrer d’autres contrôles. TabStrip Contrôle onglet : Semblable à Multipage... en moins utilisable !! RefEdit : Offre à l’utilisateur la possibilité de sélectionner une plage de cellule. Cadier F. (ENST Bretagne) VBA 53 / 62
UserForm Cycle de vie Gestion d’un User Form 1. Charger le UserForm en mémoire (facultatif) : Load nom_user_form 2. Afficher le UserForm : nom_user_form.Show [0] 0 : affichage non modal 3. Masquer le UserForm (facultatif) : nom_user_form.Hide 4. Décharger le UserForm de la mémoire : Unload nom_user_form Cadier F. (ENST Bretagne) VBA 54 / 62
UserForm Événements Les événements d’un User Form Initialize Survient avant que le User Form ne soit chargé ou affiché. Activate Survient lorsque le User Form est activé. Deactivate Survient lorsque le User Form est désactivé. QueryClose Survient avant que le User Form soit déchargé. Terminate Survient après que le User Form a été déchargé. Notes : • Load déclenche Initialize • Show déclenche Initialize et Activate (dans cet ordre) • Hide ne déclenche aucun événement • Unload déclenche QueryClose et Terminate (dans cet ordre) Cadier F. (ENST Bretagne) VBA 55 / 62
UserForm Solutions alternatives InputBox 1/2 InputBox (du VBA) : InputBox(prompt[,title][,default] _ [,xpos][,ypos][,helpfile,context]) prompt Le texte de la boîte de dialogue. title Le titre de la boîte de dialogue. default Chaîne de caractères contenant la valeur par défaut. xpos, ypos Les coordonnées du coin supérieur gauche. helpfile, context Le fichier d’aide et le sujet associé. Cadier F. (ENST Bretagne) VBA 56 / 62
UserForm Solutions alternatives InputBox 2/2 InputBox (d’Excel) : Application.InputBox(prompt[,title][,default] _ [,left][,top][,helpfile,helpContextID][,type]) prompt Le texte de la boîte de dialogue. title Le titre de la boîte de dialogue. default Chaîne de caractères contenant la valeur par défaut. left, top Les coordonnées du coin supérieur gauche. helpfile, helpContextID Le fichier d’aide et le sujet associé. type Le type de la donnée attendue. Cadier F. (ENST Bretagne) VBA 57 / 62
UserForm Solutions alternatives MsgBox MsgBox (du VBA) : MsgBox(prompt[,buttons][,title][,helpfile,context]) prompt Le texte de la boîte de dialogue. buttons Ensemble de boutons et d’icônes de la boîte de dialogue. title Le titre de la boîte de dialogue. helpfile, helpContextID Le fichier d’aide et le sujet associé. Cadier F. (ENST Bretagne) VBA 58 / 62
UserForm Solutions alternatives GetOpenFilename 1/2 GetOpenFilename (d’Excel) : Application.GetOpenFilename([FileFilter] _ [,FilterIndex][,title][,ButtonText][,MultiSelect]) FileFilter Chaîne spécifiant les critères de filtrage. FilterIndex Index du critère de filtrage par défaut. title Le titre de la boîte de dialogue (« Ouvrir » par défaut). ButtonText Pour Macintosh uniquement ! MultiSelect Booléen spécifiant si plusieurs fichiers peuvent être sélectionnés. Cadier F. (ENST Bretagne) VBA 59 / 62
UserForm Solutions alternatives GetOpenFilename 2/2 Exemple : Sub openFileSrc() Dim Filt As String Dim IndexFiltre As Integer Dim NomFichier As Variant Filt = "Fichiers C (*.c),*.c," & _ "Tous les fichiers (*.*),*.*" NomFichier = Application.GetOpenFilename( _ FileFilter:=Filt, FilterIndex:=2, _ Title:="Sélectionner un fichier source") If NomFichier False Then MsgBox NomFichier End Sub Cadier F. (ENST Bretagne) VBA 60 / 62
UserForm Solutions alternatives GetSaveAsFilename GetSaveAsFilename (d’Excel) : Application.GetSaveAsFilename([InitialFilename] _ [,FileFilter][,FilterIndex][,title][,ButtonText]) InitialFilename Le nom de fichier suggéré (le nom du classeur par défaut). FileFilter Chaîne spécifiant les critères de filtrage. FilterIndex Index du critère de filtrage par défaut. title Le titre de la boîte de dialogue (« Sauvegarder sous » par défaut). ButtonText Pour Macintosh uniquement ! Cadier F. (ENST Bretagne) VBA 61 / 62
UserForm Solutions alternatives L’objet FileDialog Introduit dans la version 2002 d’Excel, il permet au choix de : • sélectionner un fichier, • sélectionner un dossier, • d’ouvrir un fichier, • ou d’enregistrer un fichier. Exemple : Sub selectionnerDossier() With Application.FileDialog(msoFileDialogFolderPicker) .InitialFileName = Application.DefaultFilePath & "\" .Title = "Sélectionnez un emplacement" .Show If .SelectedItems.Count 0 Then _ MsgBox .SelectedItems(1) End With End Sub Cadier F. (ENST Bretagne) VBA 62 / 62
Vous pouvez aussi lire