Programmation en VBA

47
Programmation en VBA Introduction au language Visual Basic for Applications dans le monde Excel

description

Programmation en VBA. Introduction au language Visual Basic for Applications dans le monde Excel. Ressources. FAQ : http://msdn2.microsoft.com/en-us/isv/bb190540.aspx R éférence : http://msdn2.microsoft.com/en-us/isv/bb190540.aspx Nombreux livres Aide en ligne d’Excel. - PowerPoint PPT Presentation

Transcript of Programmation en VBA

Programmation en VBA

Programmation en VBAIntroduction au language Visual Basic for Applications dans le monde Excel1RessourcesFAQ : http://msdn2.microsoft.com/en-us/isv/bb190540.aspxRfrence : http://msdn2.microsoft.com/en-us/isv/bb190540.aspxNombreux livresAide en ligne dExcel2Programmer sous ExcelPour accder lenvironement de programmation sous Excel, deux possibilitsPar les menusAlt F11

3Lenvironement de dvelopement

Explorateur de projetditeurEspions(dbogage) Proprits 4Ajouter une fonction ExcelClick droit sur Microsoft Excel objects :

Slctioner Module5Gnralits sur VBAVBA est un langage compil au moment de lexcution.Insensible la casse, lediteur VBA modifie texte tap de tel sorte quil ay la mme casse que des objets existants (fonctions, variables, sub, etc.)Une fonction peut se nommer MyFunction, on tape myfunction lditeur changera m et f an majuscules.Les commentaires dbutent par et terminent en fin de ligne.La barre doutils dition peut savrer pratique quand on programme.6Structure dune fonction

Dlimiteursde fonction Nom de la fonctionType de la fonctionNom de largumentType de largumentListe des argumentsCorps de la fonction:Attribution fonctionne comme valeur de retour7Utilisation dans Excel

8Conditions pour fonctions appeler dans ExcelNe pas changer la structure dune feuille Excel.Ne pas changer les proprits dune cellule.Toute fonction appele doit respecter les mmes restrictions.Si la fonction doit tre excut mme si ses arguments ne changent pas il faut appeler Application.Volatile.Doit retourner un type qui Excel sait traiter.9SubroutinesLes sub ne renvoient pas de rsultat, contrairement aux fonctions.Les sub ne peuvent pas tre appeles directement depuis les cellules de Excel.Si une sub est appele depuis une fonction qui est appele depuis une cellule, alors elle doit respecter les mmes restrictions que ces fonctions.10Valeurs par dfaut Les paramtres des Function et Sub peuvent tre optionnels. Si un paramtre est optionnel tous les paramtres suivants le sont aussi.Si un paramtre est de type Variant on peut tester que lappel na pas dfinit ce paramtre avec IsMissing.Sub ajoutEspace(ByRef str As String, Optional nb As Integer = 5) Dim prefix As String prefix = Space(nb) str = prefix & str Debug.Print strEnd SubSub ajoutEspace(ByRef str As String, Optional vnb As Variant) Dim prefix As String Dim nb As Integer If IsMissing(vnb) Then nb = 5 Else nb = CInt(vnb) End If prefix = Space(nb) str = prefix & str Debug.Print strEnd Sub11Paramtres nomms On peut appeler une fonction en nommant ses paramtres.ajoutEspace str:=res, nb:=10Sub ajoutEspace(ByRef str As String, Optional nb As Integer = 5) Dim prefix As String prefix = Space(nb) str = prefix & str Debug.Print strEnd Sub12Dclaration des variablesOn dclare une variable laide de Dim :Function surfCercle(x As Double) As Double Dim pi As Double pi = 3.1415279 surfCercle = x * x * piEnd Function

Par dfaut les variables nont pas besoin detre dclares, elles ont le type Variant. Il faut utiliser Option Explicitpour rendre la dclaration obligatoire.

13TypesString : Chaines de caractres.Types numriques : entiers, rels en virgule flottante (prcision simple ou double) et rels en virgule fixe (decimal).Dates : Reprsentation des dates en nombre de jours couls depuis le premier janvier 1900.Tableaux : une collection de variables dun autre type, lindexation est au choix de lutilisateur, par dfaut de 1 N.Variant : Type abritant tout autre type.Objets : Types dfinis dans des bibliothques ou par des utilisateurs.14StringsUne chaine de caractres se dclare comme String, par exemple :Dim message As StringDe nombreuses fonctions de manipulation de strings sont disponibles, exemples : Len, calcule la taille InStr, cherche dans une StringReplace, modifie une StringEtc.15Types numriquesEntiers :ByteInteger, entier 2 octetsLong, entier 4 octetsDecimal : CurrencyRels virgule flotante :Single, 4 octetsDouble, 8 octets16Boolens et datesBoolean, reprsente vrai ou faux.Date, reprsente une date, stocke comme nombre de jours depuis le premier janvier 1900. Il y a un jour de dcalage avec des dates Java. 17TableauxUn tableau (array) se dclare en ajoutant au nom dune variable des paranthses et une dimension.On accde aux lments dun tableau par indexation.Loption globale Option Base permet de fixer le premier indice de chaque tableau, par dfaut les tableaux commencent 1. Dim t(1 To 10) As IntegerSub arrTest(j As Integer) Dim t(1 To 10) As Integer Dim i As Integer i = 1 While i 0 Then Signe = 1 ElseIf x < 0 Then Signe = -1 Else Signe = 0 End IfEnd FunctionFunction sPlus(x As Double) As Double sPlus = IIf(x > 0, x, 0)End Function23BouclesWhileForFor Each, sutilise avec de collections.Sub arrTest(j As Integer) Dim t(1 To 10) As Integer Dim i As Integer i = 1 While i bibliothqueWorksheet -> classCells est une mthode de la class Worksheet 2 arguments (il a une Autre mthode de mme nom 1 argument) qui retourne un objetde type Excel.Range Value est une proprit dela class Range 30vnementsLe vnements sont des subroutines qui sexcutent assynchronement . Ils sont dclenchs automatiquement par des actions extrieures.Quelques exemples :Click de souris sur boutonChangement de contenu dune celluleChangement de la cellule courantePrivate Sub btnGo_Click() displaySquareEnd SubPrivate Sub Worksheet_Change(ByVal Target As Range) If Target.Cells.Count > 1 Or IsEmpty(Target) Then Exit Sub End If If Target.Address = "$A$1" Then calc.Cells(1, 4).Value = "A1 Changed" End IfEnd SubPrivate Sub Worksheet_SelectionChange(ByVal Target As Range) calc.Cells(2, 4).Value = "selection is now " & Target.AddressEnd Sub31vnements

Nom de la class,Dans certains cas nomDe lobjetNom de lvnement32ErreursDans son comportement par dfaut lexcution sarrte et un message est affich.On peut spcifier un autre comportement si une erreur se produit, trois comportemens sont possibles :On Error Goto 0, le comportement par dfautOn Error Resume Next, ignorer les erreurs et passer linstruction suivante.On Error Goto , sauter (ligne marqu de :) si une erreur se produit.Si une erreur se produit la variable Err est initialise.33Erreurs (suite)La variable Err contient plusieurs membres, les plus importants :Number, contient le numro unique de lerreur.Description, contient la description de lerreur.Raise, produit une erreur (utile pour signaler des erreurs dautres parties du programme.Clear, nettoye la dernire erreur.

34Erreurs (exemple)Sub ajoutEspace(ByRef str As String, Optional vnb As Variant) Dim prefix As String Dim nb As Integer On Error GoTo err_label If IsMissing(vnb) Then nb = 5 Else nb = CInt(vnb) End If prefix = Space(nb) str = prefix & str Exit Sub err_label: MsgBox Err.Description End SubModification dutraitement deserreurs.LabelAccs lerreur35Modules de classeDans un module de classe on peut dfinir ses propres classes.Une classe contient 3 types de membres :Des variables membresDes mthodesDes proprits2 types de visibilit pour les membres :PrivatePublic36Crer une classe

37Exemple : ActionOption Explicit

Public nom As StringPublic cours As Currency

Variables membres38Exemple : OptionOption Explicit

Private isCall As BooleanPublic strike As CurrencyPublic maturity As DatePublic sousjacent As Act

Public Property Let TypeContrat(tp As String) If LCase(tp) = "call" Then isCall = True Else isCall = False End IfEnd Property

Membre priv

Proprit : criture

Membres publiques39Exemple : OptionPublic Property Get TypeContrat() As String If isCall Then TypeContrat = "Call" Else TypeContrat = "Put" End IfEnd Property

Proprit : Lecture40Exemple : OptionPublic Function GetPrice(r As Double, vol As Double) As Double Dim td As Date Dim days2exp As Long td = Date days2exp = maturity - td If isCall Then GetPrice = Call_Eur(sousjacent.cours, strike, days2exp, r, vol) Else GetPrice = Put_Eur(sousjacent.cours, strike, days2exp, r, vol) End If End Function

Fonction membre41Utilisation dune classeSub test() Dim FT As New Act Dim CallFT As New Opt Dim price As Double FT.nom = "Fance Telecom" FT.cours = 15.3 CallFT.TypeContrat = "Call" Set CallFT.sousjacent = FT CallFT.strike = 15 CallFT.maturity = "20/12/2012" price = CallFT.GetPrice(0.01, 0.2) Debug.Print price End SubDclarations/allocationsUtilisation de propritsAppel de mthode42FormsLes forms sont des objets graphiques quon peut afficher dans Excel.On utilise des forms pour intragir avec un utilisateur.Une form est toujours compos dune fentre sur laquelle saffichent des contrles graphiques.La boite outils de Excel propose plusieurs contrles : boutons, zones de texte, liste de choix, etc.Chaque contrle propose des vnements qui permettent dinteragir avec lutilisateur.Chaque form gre son propre module.

43Crer une form

44Form et boite outils

45Design de la form

46Code associ une form

vnementclick du bouton Accs uneproprit dunautre contrle47