Visual Basic pour Applications (résumé) 1 – Variables
Transcription
Visual Basic pour Applications (résumé) 1 – Variables
Université de Lille - Sciences et Technologies Introduction à VBA Visual Basic pour Applications (résumé) − Olivier Losson − 1 – Variables 1.1. Types de données Type Boolean Byte Integer Long Single Double Date String Variant Description Booléen Octet Entier Entier long Réel en simple précision Réel en double précision Date Chaîne de longueur fixe Donnée de tout type Notes Initialis. Ne peut prendre que les valeurs True ou False False Plage : 0..255 0 Plage : -32 768..32 767 0 Plage : environ -2.109..+2.109 0 38 -45 -45 38 Plages : -3,4.10 ..-1,4.10 et 1,4.10 ..3,4.10 0 Plages : -1,8.10308..-4,9.10-324 et 4,9.10-324..1,8.10308 0 Plages : 01/01/0100..31/12/9999 et 00:00:00..23:59:59 00:00:00 0 à environ 65 400 caractères "" Type par défaut ; écriture simplifiée (conversion transparente) Empty 1.2. Déclaration - implicite (Dim nomVar) type Variant (ex. Dim uneVariable) en spécifiant le type (Dim nomVar As type) type explicite (ex. Dim uneChaine As String) en utilisant un suffixe (Dim nomVar suffixe) type donné par le suffixe (ex. Dim uneChaine$) Suffixe % & Type de données Integer Long Suffixe ! # Type de données Single Double Suffixe @ $ Type de données Currency String 1.3. Portée - spécifiée lors de la déclaration en utilisant Public ou Private à la place de Dim dépend de l'endroit où est déclarée la variable : Instruction de déclaration Dim Dim Public Public Private Private Lieu de déclaration Portée de la variable Procédure Module (section Déclarations) Procédure Module (section Déclarations) Procédure Module (section Déclarations) Locale à la procédure Locale au module Interdit : réservé au niveau module Procédures de tous les modules du projet Locale à la procédure (= Dim) Locale au module (= Dim) 1.4. Tableaux - indicés à partir de 0 (par défaut) ou 1 (instruction Option Base 1 au niveau module) - déclaration par Dim, Private ou Public • tableau 1D (vecteur) : Dim nomTab ( [indiceMin To] indiceMax ) • tableau 2D (matrice) : Dim nomTab ( [indiceMin1 To] indiceMax1 , [indiceMin2 To] indiceMax2 ) - dynamiques • déclaration : Dim nomTab () [As type] • redimensionnement : ReDim [Preserve] nomTab (indices) 1.5. Constantes valeur ; améliore la lisibilité du code - association nom - constantes prédéfinies (ex. vbCr chr(13) ; wdDoNotSaveChanges False) - déclaration de constante personnalisée : Const nomConst [As type] = expression 1 Introduction à VBA Université des Sciences et Technologies de Lille 2 – Instructions 2.1. Expression - combinaison de variables, de constantes et d'opérateurs - liste des opérateurs par priorité décroissante de gauche à droite Arithmétiques Comparaison Logiques ^ = Not - [négation] <> [différent] And * et / < Or \ > Xor Mod <= Eqv + et >= Imp & Like Is 2.2. Types d'instructions - de déclaration : nommer une variable, constante ou procédure (Ex. Dim, Const, Sub, Function, …) - d'affectation : nomVar = expression où expression retourne un résultat de même type que la variable - exécutables : appel de fonction ou de méthode, instruction de contrôle (cf. ci-dessous), … - commentaires, introduits par Rem ou ' (apostrophe) : tout ce qui suit sur la même ligne est ignoré. 2.3. Structures de contrôle Type Syntaxe(s) Boucles Do Until condition Instructions Loop Do While condition Instructions Loop Do Instructions Loop Until condition Do Instructions Loop While condition For compteur=début to fin [step pas] Instructions Next compteur For Each element In groupe instructions Next element If condition Then instructions Effet Exécute les instructions jusqu’à ce que la condition soit vraie. Si la condition est vraie dès le premier test, les instructions ne sont jamais exécutées. Exécute les instructions tant que la condition est vraie. Si la condition est fausse dès le premier test, les instructions ne sont jamais exécutées. Exécute les instructions jusqu’à ce que la condition soit vraie. Les instructions sont au moins exécutées une fois. Exécute les instructions tant que la condition est vraie. Les instructions sont au moins exécutées une fois. Exécute les instructions le nombre de fois déterminé par le compteur. Ce dernier compte de début à fin par pas spécifié (pas de 1 par défaut). Pour chaque élément du groupe spécifié (tableau ou collection), exécute les instructions en utilisant le nom element pour désigner le n-ième élément. Exécute les instructions si la condition est vraie. Instructions conditionnelles (Le tout sur une seule ligne) 2 If condition Then instructions1 [Else instructions2] End If If condition1 Then instructions1 ElseIf condition2 Then instructions2 ElseIf condition3 Then instructions3 … [Else instructionsElse] End If Select Case expressionTestée Case listeValeurs1 instructions1 Case listeValeurs2 instructions2 … [Case Else instructionsElse] End Select Exécute les instructions1 si la condition est vraie. Si la clause Else est présente, alors exécute les instructions2 si la condition n’est pas vraie. Exécute les instructions1 si la condition1 est vraie ; dans le cas contraire, fait un nouveau test sur condition2. Si celle-ci est vraie, les instructions2 sont exécutées ; sinon, on fait un nouveau test sur condition3, et ainsi de suite. Si la clause Else est présente, alors les instructionsElse sont exécutées si toutes les conditions précédentes sont fausses. En fonction de la valeur d’une expressionTestée, branche le programme sur tel ou tel jeu d’instructions. Si l’expression a pour valeur l’une de celles contenues dans listeValeurs1, ce sont les instructions1 qui sont exécutées, et ainsi de suite pour toutes les listes de valeurs. Si la clause Case else est présente et qu’aucune liste de valeurs ne contient l’expressionTestée, alors ce sont les instructionsElse qui sont exécutées en définitive. Université de Lille - Sciences et Technologies Introduction à VBA 3 – Fonctions et procédures 3.1. Fonctions prédéfinies - de conversion : chaîne : Asc (char ASCII), Chr (ASCII char), Str (nb chaîne), Val (chaîne nb) • nombre • majuscules minuscules : LCase (en minuscules), UCase (en majuscules) • transtypage : CBool (en booléen), CDate (en date), CInt (en entier), CStr (en chaîne), … - sur les chaînes : • sous-chaînes : Left (partie gauche), Right (partie droite), Mid (sous-partie) • informations : Len (longueur), Instr (recherche de caractère), StrComp (comparaison) • modification : Mid (sous-partie), LTrim, Rtrim, Trim (élimination des espaces à G, à D, les 2) • génération de chaînes : Space (espaces), String (caractère répété) - autres : • maths : Sin, Atn, Exp, Sgn (signe), Rnd (nb aléatoire), Abs (val absolue), Sqr (√) • données système : CurDir (répertoire courant), Dir (contenu répertoire), Date, Time (date et heure) 3.2. Macros Type Procédure ("macro commande") Caractéristique Ne retourne aucune valeur Déclaration Sub nomProcedure ([arguments]) ' commentaires … instructions … End Sub Appel nomProcedure [args] ou Call nomProcedure ([args]) Fonction ("macro fonction") Retourne une valeur typée Function nomFonction ([arguments]) [As type] ' commentaires … instructions … nomFonction = expression End Function Sans utilisation du résultat : nomFonction [args] Utilisation du résultat : nomVar = nomFonction ([args]) 3.3. Arguments - Syntaxe d'un argument Passage par adresse (ou par référence) Passage par valeur La procédure accède à la variable proprement dite et La procédure accède à une copie de la variable et ne modifie donc la valeur réelle de cette dernière modifie donc pas la valeur réelle de cette dernière [ByRef] nomArg [As type] - - ByVal nomArg [As type] Déclaration • d'une liste d'arguments : les séparer par des virgules • d'argument(s) optionnel(s) (en queue de liste) : Optional [ByVal | ByRef] nomArg [As type] [= valDéfaut] Passage d'arguments lors de l'appel de procédure ou fonction : • sans utiliser les arguments nommés : nomMacro [(]valArg1, valArg2,… [)] • en utilisant les noms des arguments : nomMacro [(]nomArg2:=valArg2, nomArg1:=valArg1,… [)] 3.4. Gestion des erreurs - Schéma général : Sub nomProcédure (…) On Error Goto ligne … 'corps de la procédure Exit Sub 'évite d’exécuter la routine de gestion d’erreur en l’absence d’erreur ligne: 'début de routine de gestion d’erreur instructions si erreur Resume {0|Next|etiquette} 'etiquette doit se trouver dans le corps de la même procédure End Sub 3 Introduction à VBA Université des Sciences et Technologies de Lille 4 – Objets 4.1. Notion d'objet - Définition : composant d'une application défini par • ses propriétés (variables définissant les caractéristiques de l'objet – souvent elles-mêmes des objets) • ses méthodes (fonctions définissant le comportement de l'objet) - Exemples : • classeur Excel : { Nom As String, FeuilleActive As WorkSheet; Fermer(), Sauver() } • sélection dans Word : { Caractères As String, Document As Document; Copier(), Couper() } 4.2. Accès aux objets - Lecture d'une propriété : variable = Objet.Propriété - Ecriture d'une propriété (si elle est en lecture/écriture) : Objet.Propriété = expression - Exécution d'une méthode : même règle que pour les macros (cf. section 3) : Objet.Méthode [(Arguments)] où Objet désigne la hiérarchie (Application.Objet1.Objet2.⋯.ObjetN) permettant d'accéder à l'objet voulu. 4.3. Collections - Définition : ensemble d’objets connexes (de même “type” – on parle de classe en terminologie objet). La classe définit le nom de la collection, par ex. Worksheets. Chaque élément (ou item) porte un nom (clé, de type chaîne) et un numéro (index, numérique). - Accès à un item : • par son nom : Worksheets("Feuil2") • par son numéro : Worksheets(2) - Toutes les collections sont des objets possédant en commun : • les propriétés Count (nombre d'items), Application (Excel, Word, …) et Parent (objet supérieur) • les méthodes Add() (ajout d'un item) et Item() (accès à un item – privilégier l'accès par nom ou n°) 4.4. Hiérarchie des objets - Principe : certains objets (conteneurs) en contiennent d'autres. Le conteneur supérieur est Application. - Exemples ........................ Application EXCEL .... Classeurs de l'application (Collection) Feuilles de calcul de chaque classeur ................... Plage de cellules (sélection, ligne,…) - ......................Application WORD .....Documents de l'application ......................Zone contiguë de texte Propriétés et méthodes globales : accessibles directement, sans décrire leur hiérarchie. C'est le cas de la plupart des propriétés et méthodes de l'objet Application (cf. Explorateur d'objets (F2), liste Classes, premier élément <globales>). 4.5 Exemples - Excel NomFeuille$ = ActiveSheet.Name MsgBox (ActiveSheet.UsedRange.Address) Stocke le nom de la feuille de calcul courante Affiche dans une boîte de message l'adresse de la plage de cellules utilisées dans la feuille courante Worksheets(1).Range("B2").Borders(xlBottom).Weight=xlThin Définit une bordure inférieure fine pour la cellule B2 de la première feuille (du classeur courant) Worksheets("Feuille3").Range("A1:B2").Insert(xlShiftDown) Décale vers le bas la plage A1:B2 de la "Feuille3" Dim p As Range Stocke dans une variable (objet Range) les cellules Set p = Selection.SpecialCells(xlCellTypeConstants,xlNumbers) de la plage sélectionnée contenant des nombres - Word ActiveDocument.Range.InsertAfter("Salut") If Selection.Information(Type:=wdWithInTable) Then 4 Insère le mot "Salut" à la fin du document courant Teste si la sélection se trouve dans un tableau