Cours gratuits » Cours informatique » Cours programmation » Cours visual basic » Avancé avec Visual Basic pour Application

Avancé avec Visual Basic pour Application

Problème à signaler:

Télécharger



★★★★★★★★★★3.5 étoiles sur 5 basé sur 1 votes.
Votez ce document:

Formation pour avancé avec Visual Basic pour Application [Eng]

INTRODUCTION

Présentation des termes de base

Projet: Le projet agit comme un conteneur pour les modules, les modules de classe et les formulaires pour un fichier particulier.

Module, module de classe et forme: Ces trois éléments agissent comme des conteneurs pour les principaux éléments de programmation tels que les procédures et les fonctions. Nous traiterons des modules et des formulaires. Notez que chacun de ces éléments nécessite un nom unique. Dans un seul projet, il est possible d'

avoir plusieurs formes, modules et modules de classe différents.

Fonction et Sub: Les éléments Function et Sub contiennent des lignes de code individuelles. Une fonction renvoie une valeur, alors que Sub ne le fait pas. Vous utilisez toujours un Sub comme point d'entrée pour un programme. Un Sub est utilisé pour effectuer une tâche et ne pas recevoir de valeur de retour directe. Vous pouvez également l'utiliser pour afficher des informations. Une utilisation très importante est de les utiliser pour décomposer le code en morceaux plus petits effectuant chacun une tâche spécifique. Cela rend le code plus facile à lire et à gérer. Vous utilisez une fonction lorsque vous souhaitez renvoyer une valeur. Supposons que vous ayez besoin de calculer la valeur de Black-Scholes plusieurs fois dans un programme, vous pouvez ensuite créer une fonction qui renvoie le prix chaque fois que vous l'appelez.

Options de compilateur importantes

Vous ajoutez les deux options suivantes au tout début d'un module, d'un module de classe ou d'un formulaire avant tout autre code.

Base d'option <Number>: utilisez cette option pour modifier la façon dont les numéros VBA numérotent les éléments du tableau. Vous pouvez numéroter les éléments du tableau commençant à 0 ou 1. Attention, la valeur par défaut est 0.

Option Explicit: Toujours utiliser cette option! Il indique à VBA que vous voulez définir toutes les variables avant de les utiliser. Il rend le code plus facile à lire et vous aide à trouver des fautes de frappe dans votre code.

Présentation des objets VBA

En EXCEL nous avons des objets. Chaque objet EXCEL représente une fonctionnalité ou une fonctionnalité.

Des exemples d'objets sont: des classeurs, des feuilles de calcul, des gammes, des graphiques, des polices, etc.

  • Objets en collections

Par exemple, la collection de classeurs est constituée de tous les classeurs ouverts. Il est possible qu'un objet soit un objet singulier (une collection d'un seul membre). Par exemple l'objet Font pour n'importe quelle cellule de la feuille de calcul.

Les objets singuliers sont référencés directement par ex. Police de caractère.

Les objets individuels dans les collections sont référencés soit par nombre (Worksheets (1).) Soit par nom (Worksheets (feuille 1).).

L'objet Range bien qu'un objet singulier est référencé d'une manière similaire à celle d'une collection. Notez qu'une cellule n'est pas un objet en soi, c'est un objet Range.

  • Les objets sont disposés dans la hiérarchie

ActiveWorkbook.Sheets ("Test1") .Range ("A1: C10") Classeurs ("Lecture1") .Sheets (â € "Example1â €) .Grange (« A1: C10 »)

  • Les objets ont des propriétés

Les propriétés sont les attributs d'un objet, les valeurs ou les paramètres qui décrivent l'objet. Les propriétés d'un objet déterminent à quoi il ressemble, comment il se comporte et s'il est visible.

Application.ScreenUpdating = Faux Portée (â € "A2â €) = â € ¢ Input Valueâ € ™ Range (â €" A3Â) = 3000 Volatility = Plage (â € "A2â €) .Valeur Volatilité = Cellules (1,2) .Valeur

  • Les objets ont des méthodes

Une méthode est une action que vous effectuez avec un objet. Une méthode peut changer les propriétés d'un objet ou faire que l'objet fasse quelque chose. Notez que parce qu'une collection est aussi un objet, les collections ont aussi des méthodes.

Feuilles ("Sheet1") .Range ("A1: B3") .Sélectionner

ActiveRange.Copy

Feuilles ("Sheet2") .Gamme ("A1") .PasteSpecial

Classeurs (ã € "Model.xlsà ¢ â,¬) .Activer

Feuilles (â € "Sheets1â €). Supprimer

  • Les objets peuvent gérer des événements

Pour faire quelque chose de significatif avec un objet, vous devez faire l'une des deux choses suivantes:

(a) Lire ou modifier les propriétés d'un objet

(b) Spécifiez une méthode d'action à utiliser avec un objet

PRÉSENTATION DE DIVERS ÉLÉMENTS DE PROGRAMMATION

  1. Ouvrez Excel. Allez à la section «Macro» de Sécurité et sélectionnez «Niveau moyen».
  2. Commencez un nouveau classeur.
  3. Appuyez sur Alt + F11 ou allez dans Outils Visual Basic Editor pour activer VBE.
  4. Dans VBE, appuyez sur Ctrl + R pour ouvrir l'Explorateur de projet.
  5. Sélectionnez le nouveau nom du classeur dans la fenêtre de l'Explorateur de projet.
  6. Choisissez Module Insérez pour introduire un module VBA dans le projet

Tapez les lignes de code suivantes dans le module:

Présentation des sous-routines

Exemple

Nous créons un sous-programme qui copie une plage de cellules d'ActiveSheet à "feuille2".

Option explicite

"Nous devons déclarer toutes les variables

Sub CopyAll ()

Plage ("A1"). CurrentRegion.Copy

Feuilles ("Sheet2"). Range ("A1"). PasteSpecial

End Sub

Notez l'utilisation d'objets. Nous commençons en utilisant l'objet Range ( «A1 ») et nous utilisons CurrentRegion Method. CurrentRegion renvoie un objet Range représentant un ensemble de données contiguës. Tant que les données sont entourées d'une ligne vide et d'une colonne vide, vous pouvez sélectionner la table avec cette méthode.

A ce stade, pour exécuter le sous-programme, déplacez le curseur dans le sous-programme et appuyez sur F5 ou sélectionnez Exécuter le sous-formulaire d'exécution / utilisateur.

Vous pouvez également appuyer sur Alt + F11 ou sur Macro Macro ��� et choisir CopyAll.

Vous pouvez également l'exécuter en affectant une touche de raccourci comme suit:

  1. Outils Macro ÂÆ Macros Macros (voir la figure ci-dessous à gauche)
  2. Sélectionnez le sous-programme dans la zone de liste qui apparaît (voir la figure ci-dessous à droite)
  3. Cliquez sur les boutons d'options.
  4. Cliquez sur l'option Touche de raccourci et entrez une lettre dans la zone en regard de Ctrl +. Notez que si vous insérez petit c alors vous appuyez sur Ctrl + c pour exécuter le sous-programme, tandis que si vous insérez majuscule C vous devez appuyer sur Ctrl + Maj + c.
  5. Cliquez sur OK, puis quittez la boîte de dialogue Macro.

Attribution d'une touche de raccourci

Modification du sous-programme CopyAll ()

Plage ("A1"). CurrentRegion.Copy

À

Cellules (1,1) .CurrentRegion.Copy

ou pour

ActiveCell.CurrentRegion.Copy

Le premier et le second cas produisent le même résultat. Le troisième cas copie le CurrentRegion autour de l'ActiveCell (c'est-à-dire la cellule sélectionnée). Exécutez le sous-programme pour les trois cas et observez ce qui se passe.

 Introduisez le sous-programme suivant:

Sub BasicSub ()

Appelez CopyAll

End Sub

L'exécution de BasicSub () appelle et exécute le sous-programme CopyAll ().

Maintenant, rendons l'environnement de travail dans VB Editor plus convivial. Choisissez Outils OptionsÆ Options. Sélectionnez l'onglet Editeur et vérifiez les options suivantes:

Vérification automatique de la syntaxe: S'il y a une erreur de syntaxe lors de la saisie du code, VBE vous avertit.

  • Membres de la liste automatique: Il fournit au fur et à mesure que vous tapez une liste avec des objets / actions qui compléteraient logiquement la déclaration que vous tapez.

Auto Infos rapides: VBE affiche des informations sur la syntaxe et les arguments d'une fonction lorsque vous la saisissez.

 · Affichage par défaut du module complet: il présente toutes les fonctions et procédures d'un module dans une seule liste déroulante.

Essayons de créer un sous-programme qui crée une bordure autour d'un ensemble de données contiguës. Comme précédemment, nous utiliserons l'objet range CurrentRegion.

Sub CreateBorder ()

ActiveCell.CurrentRegion.BorderAround _

LineStyle: = xlDot, Poids: = xlThick, Couleur: = RGB (255, 0, 0)

End Sub

Notez que lorsque vous tapez ActiveCell. une boîte apparaît avec tous les membres d'objets possibles que vous pouvez utiliser. Faites défiler vers le bas et sélectionnez CurrentRegion. Après avoir tapé le "." La fenêtre pop-up apparaît à nouveau et lorsque vous faites défiler vers le bas, vous trouvez la méthode BorderAround. Malheureusement, vous ne savez pas comment utiliser la méthode BorderAround. Sélectionnez le mot BorderAround et appuyez sur F1. L'aide d'Excel apparaît avec une description détaillée de la méthode et un exemple de comment l'utiliser. Comparez l'exemple de l'aide Excel avec la syntaxe de la méthode BorderAround et l'exemple qui vous a été fourni.

Dans un module, vous pouvez sélectionner n'importe quel objet, méthode ou procédure et après avoir appuyé sur F1, l'aide Excel apparaît.

Une autre option pour parcourir les objets disponibles est le navigateur d'objets. Vous pouvez y accéder en appuyant sur F2 dans VBE ou en sélectionnant View ÆÆ 'Object Browser. À ce stade, le navigateur d'objets ne sera pas aussi utile que l'aide Excel en ligne. Habituellement, pour nos besoins de programmation, nous n'avons pas besoin de connaître un grand nombre d'objets, de méthodes et de procédures.

Dans les prochains exemples, nous présentons différentes façons de travailler avec des objets de portée. Un objet Range peut comprendre plusieurs lignes et colonnes.

Sub ProvideRowAndColumn ()

Dim EndRow As Integer, EndColumn As Integer

Dim i comme entier, j comme entier

EndRow = ActiveCell.CurrentRegion.Rows.Count EndColumn = ActiveCell.CurrentRegion.Columns.Count

Pour i = 1 à EndRow

Pour j = 1 à EndColumn

Cellules (i, j) .Value = i + j

Prochain

Prochain

End Sub

Supposons maintenant que nous ayons le tableau suivant dans Excel et que nous souhaitons remplir la troisième colonne avec le produit des colonnes A et B

à ¢ â,¬Â

Sub DoCalculation ()

Dim EndRow As Integer, EndColumn As Integer

Dim InitialRow As Integer, InitialColumn As Integer

Dim i comme entier

InitialRow = ActiveCell.Row

InitialColumn = ActiveCell.Column

EndRow = ActiveCell.CurrentRegion.Rows.Count EndColumn = ActiveCell.CurrentRegion.Columns.Count

Pour i = 1 à EndRow

Cellules (InitialRow + i - 1, InitialColumn + 2) .Value = Cellules (InitialRow + i - 1, InitialColumn) .Value _

* Cellules (InitialRow + i - 1, InitialColumn + 1) .Value

Prochain

End Sub

Sélectionnez la cellule supérieure gauche de la table et exécutez le sous-programme.

Dans la plupart des cas, les sous-programmes doivent avoir des arguments. Les arguments peuvent être des variables à valeur unique, des tableaux ou des chaînes. Un sous-programme a un nombre fixe d'arguments, qui sont une combinaison d'arguments facultatifs et obligatoires.

Dans un nouveau module, introduisez le sous-programme suivant:

Sub FillColumnA (NoOfRows As Integer)

Dim i comme entier

Pour i = 1 à NoOfRows

Cellules (i, 1) = i

Prochain

End Sub

Si vous essayez d'exécuter ce sous-programme, vous découvrirez que vous ne pouvez pas; la raison étant que vous devez passer un argument. Pour exécuter ce sous-programme, nous introduisons le sous-programme suivant:

Sub CallFillColumnA ()

Dim NoOfRows en tant qu'entier

NoOfRows = InputBox ("Entrez le nombre de lignes ...")

Appelez FillColumnA (NoOfRows)

End Sub

Si vous exécutez CallFillColumnA, il appelle le sous-programme FillColumnA et transmet l'argument requis. Maintenant, introduisons un argument optionnel. Les arguments facultatifs doivent toujours être du type de données variant (vous pouvez également introduire différents types de données mais ce n'est pas recommandé). Si vous introduisez un argument optionnel, tous les arguments suivants de la liste d'arguments doivent également être optionnels. Pour déclarer un argument optionnel, nous utilisons le mot optionnel avant l'argument. Dans la sous-routine, vous devez vérifier si une valeur a été affectée à un argument facultatif et si ce n'est pas le cas, vous devez lui affecter sa valeur par défaut.

Sub FillColumn (NoOfRows en tant qu'entier, NoOfColumn facultatif en tant que variante) Dim i en tant qu'entier

'Vérifier si l'argument optionnel est utilisé

Si IsMissing (NoOfColumn) Then NoOfColumn = 1

Pour i = 1 à NoOfRows

Cellules (i, NoOfColumn) = i

Prochain

End Sub

Pour exécuter le sous-programme FillColumn, introduisez:

Sub CallFillColumn1 ()

Appelez FillColumn (10)

End Sub

Sub CallFillColumn2 ()

Appelez FillColumn (10, 2)

End Sub

Le sous-programme CallFillColumn1 appelle FillColumn et ne transmet que l'argument requis. Dans le sous-programme FillColumn, l'argument facultatif étant manquant, la valeur par défaut 1 lui est affectée. En revanche, dans CallFillColumn2, les deux arguments sont passés.

 Présentation des fonctions

L'utilisation des arguments dans les fonctions est similaire à leur utilisation dans les sous-programmes. Nous pouvons avoir des arguments optionnels et requis qui sont définis exactement de la même manière que dans les sous-programmes. Rappelez-vous que les fonctions renvoient toujours une valeur.

Exemple

Créez une fonction qui renvoie la racine cubique d'un nombre.

Fonction CubicRoot (Number As Double) As Double 'Cette fonction renvoie la racine cubique CubicRoot = Number ^ (1/3) End Function

Vous pouvez exécuter une fonction en

  1. l'appeler depuis une autre fonction ou sous-routine
  2. utiliser la fonction dans une formule de feuille de calcul
  • Sélectionnez une cellule dans «feuille1» et tapez «cubilot» (8) et appuyez sur Entrée. Vous devriez avoir dans la cellule la valeur de retour 2.
  • Une autre façon d'appeler la fonction est en choisissant dans le menu principal Excel

Insérer des fonctions. Dans la zone sélectionnez la catégorie, choisissez Fonctions définies par l'utilisateur et double-cliquez sur CubicRoot.

Tapez le module

Sub CallingCubicRoot ()

MsgBox CubicRoot (8)

End Sub

Exécutez CallingCubitRoot. Modification du sous-programme CallingCubitRoot

MsgBoX CubicRoot (8) à

Cellules (1,1) .Value = CubicRoot (8) Ou

Cellules (2,1) .Value = CubicRoot (Cellules (1,1) .Value).

Notez que dans cette dernière instruction, vous lisez une valeur de la cellule A1 et renvoyez sa cubilot dans la cellule A2.

Présentation des variables, des commentaires, des constantes et des types de données

Lorsque vous nommez une variable, gardez à l'esprit que:

  • Le premier caractère devrait être une lettre
  • Vous ne pouvez pas utiliser d'espaces ou de points dans un nom de variable

 · VBA ne distingue pas entre majuscules et minuscules. Donc, InterestRate est identique à interestrate et INTERESTRATE.

  • Vous n'êtes pas autorisé à utiliser les caractères suivants: #, $,%, &,!.
  • Les noms ne peuvent pas dépasser 254 caractères

Lorsque vous nommez une variable, écrivez-la dans un format lisible et facile à comprendre. Utilisez un format de casse mixte tel que TimeToMaturity ou utilisez le caractère de soulignement Time_To_Maturity.

Il existe un certain nombre de mots réservés qui ne peuvent pas être utilisés pour les noms de variables ou les noms de procédure. Par exemple, vous ne pouvez pas utiliser les noms de fonctions intégrés tels que Ucase, Sqr, Exp, etc. ou les mots de la langue tels que if, then, sub, with, for, etc.

à ¢ â,¬Â

Choisissez toujours le type de données qui utilise le plus petit nombre d'octets, mais qui peut gérer toutes les données que le programme lui attribue. Nous verrons dans ce qui suit que nous devons faire très attention lorsque nous utilisons des fonctions intégrées d'Excel pour effectuer une tâche de calcul compliquée. Notez que plus vous réservez d'octets pour un calcul, plus il est lent.

Vous devez toujours inclure l'instruction suivante en tant que première instruction dans un module VBA: Option Explicit. Cela vous oblige à déclarer toutes les variables que vous utilisez. Pour vous assurer que cette option est toujours présente allez dans Visual Basic Editor, sélectionnez Outils OptionsÆ Options et cochez l'option Exiger une déclaration de variable.

Lors de la définition d'une variable, nous devons également décider de la portée de la variable. Cela signifie que nous devons décider quels modules et procédures peuvent utiliser une variable.

Disponible uniquement dans une procédure unique: Nous utilisons une instruction Dim ou Static dans la procédure qui utilise la variable. Ce type de variables ne peut être utilisé que dans la procédure dans laquelle elles sont déclarées.

Exemple: Dim i comme entier, j comme entier

NoOfIterations statiques comme nombre entier

Soyez prudent en utilisant: Dim i, j comme entier déclare j comme entier et i comme variante.

Notez qu'une variable statique conserve sa valeur même lorsque la procédure se termine, donc si vous revenez à la procédure, la valeur n'est pas réinitialisée. Cette valeur n'est cependant pas disponible pour les autres procédures. Vous pouvez l'utiliser, par exemple, pour suivre le nombre de fois que vous exécutez un sous-programme.

Disponible uniquement dans un module particulier: Nous utilisons une instruction Dim avant le premier sous-état ou la première instruction du module. Ce type de variable est disponible pour toutes les procédures d'un module. Par conséquent, il peut être utilisé dans toutes les procédures et il conservera sa valeur d'une procédure à l'autre.

Disponible dans toutes les procédures de tous les modules: Nous utilisons une instruction publique avant le premier sous-élément ou la première fonction d'un module. Ce type de variable est disponible dans tous les modules VBA d'un classeur.

Exemple: Public InterestRate en double

Pour déclarer une constante, nous utilisons la syntaxe suivante:

Const pi comme Double = 3.14159265359

Nous pouvons mettre une constante à la disposition d'une procédure, d'un module ou de toutes les procédures de tous les modules, exactement de la même manière que pour n'importe quelle variable.

Exemple: Public Pi pi comme Double = 3.14159265359

Dans de nombreux cas, vous devrez utiliser des chaînes pour utiliser et manipuler du texte. Lorsque vous traitez des chaînes, vous pouvez introduire une chaîne de longueur fixe ou une chaîne de longueur variable.

  • Une chaîne de longueur fixe est déclarée comme suit:

Dim NewString As String * 10

Dans cet exemple, nous spécifions NewString comme une chaîne de 10 caractères maximum. Le nombre maximal de caractères qu'une chaîne de longueur fixe peut contenir est de 65 526.

  • Une chaîne de longueur variable est déclarée comme suit:

Dim NewString en tant que chaîne

NewString possède un nombre indéterminé de caractères et peut théoriquement contenir jusqu'à deux milliards de caractères. En termes de mémoire efficace, il est recommandé d'utiliser des chaînes de longueur fixe.

Dans les applications de calcul, l'élément le plus important d'un langage informatique est le tableau (matrice).

Nous déclarons un tableau de la même manière que nous déclarons une variable. Nous pouvons déclarer un tableau comme suit:

Dim sous-jacent (1 à 100) comme double

Dim Sous-Jacent (100) Comme Double

Dim Sous-jacent () As Double

Notez que la première et la deuxième déclaration peuvent entraîner des tableaux différents. Visual Basic suppose par défaut que l'index inférieur est 0. Par conséquent, la deuxième déclaration est équivalente à:

Dim sous-jacent (0 à 100) comme double

Si nous voulons forcer VBA à utiliser 1 comme index inférieur, nous devons inclure juste en dessous de l'instruction Option Explicit, Option Base 1. Dans ce cas, les deux instructions suivantes sont équivalentes:

Dim sous-jacent (1 à 100) comme double

Dim Sous-Jacent (100) Comme Double

Utilisation de l'instruction Dim Underlying () As Double, déclare un tableau dynamique. Pour utiliser ce tableau, nous devons définir sa taille en utilisant:

ReDim Sous-jacent (100)

 Nous pouvons utiliser ReDim autant de fois et aussi souvent que nécessaire. Notez que chaque fois que nous utilisons ReDim, nous effaçons toutes les valeurs stockées dans le tableau. Si nous avons besoin de garder les 100 valeurs que nous avons trouvées, et aussi besoin d'augmenter la taille du tableau à 200 éléments, nous utilisons l'instruction suivante:

ReDim Preserve Sous-Jacent (200)

Dans ce cas, vous gardez les 100 premiers éléments intacts et vous avez de la place pour 100 autres.

Dans tous les codes, il est recommandé d'introduire des commentaires. Utilisez des commentaires quand et où vous pensez que vous en avez besoin. Un bon commentaire devrait être facile à comprendre et devrait aider à clarifier le fonctionnement du code. VBA traite comme un commentaire n'importe quoi sur une ligne qui suit l'apostrophe -. Une bonne pratique pour les bits de code dont vous n'avez pas besoin est de les commenter au lieu de les supprimer complètement. En outre, essayez de rendre votre code plus lisible. Si vous tapez toutes les instructions de votre programme l'une après l'autre, vous obtenez un résultat difficile à lire. Le code fonctionne toujours, mais il est difficile à gérer. Laissez un espace blanc entre des instructions ou des étapes particulières dans une fonction ou un sous-programme. En outre, utilisez indention pour rendre plus claire la partie principale d'un sous-programme ou d'une fonction.


190