Vous êtes sur la page 1sur 47

Programmation VBA/Excel

Programmation VBA

Pierre BONNET
Masters SMaRT & GSI - Supervision Industrielle - 2011-2012 P. Bonnet

21

Programmation VBA/Excel La programmation VBA

Historiquement, la programmation sous Excel avait comme fonction d'automatiser une succession d'actions faites dans la feuille l'aide de la souris. D'o la notion de Macro Excel Le langage initial tait spcifique (versions en Anglais et en Franais)

A partir d'Excel 97, abandon du langage spcifique pour un langage unique adoptant la syntaxe du Basic :

Visual Basic for Application VBA


C'est un enrichissement de VB par des fonctions spcifiques chaque application (Excel, Word, Access....).

Excel comprend tous les outils d'criture et d'excution de VB, y compris les possibilits d'extension avec des bibliothques ou "contrles" supplmentaires. La diffrence essentielle est que l'affichage se fait dans les feuilles d'un classeur

Masters SMaRT & GSI - Supervision Industrielle - 2011-2012 P. Bonnet

22

Programmation VBA/Excel Accs la programmation VBA Alt F11

Masters SMaRT & GSI - Supervision Industrielle - 2011-2012 P. Bonnet

23

Programmation VBA/Excel VBA/VB6 VBA Excel VBA Excel


Appel de fonctions excutables DLL, OCX DLL, OCX
Bibliothque de fonctions utilisateur

VB6 VB6

RunTime VBA RunTime VBA


Bibliothque de base Office

RunTime VB6 RunTime VB6


Bibliothque de base VB6

msvbvm60.dll

FrameWork .NET VBA Excel VBA Excel


Visual Studio Visual Studio Tools for Office Tools for Office
http://morpheus.developpez.com/vsto2/

Visual Studio 2005 Visual Studio 2005


Code intermdiaire MSIL FrameWork .net FrameWork .net
Machine virtuelle CLR Common Langage RunTime

Environnement de dveloppement VB.NET, C#, C+ +.NET, Java, J#, Python...

RunTime VBA RunTime VBA


Bibliothque de base Office

http://fr.wikipedia.org/wiki/.NET

Masters SMaRT & GSI - Supervision Industrielle - 2011-2012 P. Bonnet

24

Programmation VBA/Excel Variables


Dclaration implicite
Par dfaut, l'usage d'une variable dans une affectation tient lieu de dclaration (comme en Matlab) Le type affect est dtermin automatiquement par l'valuation de la partie droite de l'valuation Danger de l'absence de dclaration : toute erreur de frappe du nom d'une variable cre une nouvelle variable!

Dclaration explicite
Utilisez la directive en dbut de programme Toute dclaration a la structure : Option Explicit Dim Nom_Variable as Type_Variable

Porte de la dclaration
Une variable n'est visible que pour la feuille o elle est dclare . Pour une visibilit des autres feuilles/classeur, utiliser Public Nom_Variable as Type_Variable Particularit : La notion de pointeur n'existe pas en VB/VBA d'o communication impossible avec des fonctions qui utilisent cette approche pour le dialogue
Masters SMaRT & GSI - Supervision Industrielle - 2011-2012 P. Bonnet

25

Programmation VBA/Excel Variables


Boolean
Prend les valeurs True et False. Par conversion depuis d'autres types numriques, la valeur 0 devient False et toutes les autres deviennent True. Dans le cas inverse, False devient 0 et True devient -1. Conversion d'une donne numrique en Boolean par la fonction Cbool exemple : A = CBool(10) 'A prend la valeur True.

Byte, Integer, Long


Types de donnes entiers 8, 16 ou 32 bits . Conversion d' une donne numrique en Byte, utilisez la fonction CByte, idem pour les autres types . Attention : l'adressage des lignes xls doit se faire en type long (valeur ventuellement suprieure 32 767)

Single, Double

Caractrise les nombres rels (ou flottants) simple et double prcision


Masters SMaRT & GSI - Supervision Industrielle - 2011-2012 P. Bonnet

26

Programmation VBA/Excel Variables


String
* Les chanes de longueur fixe peuvent contenir de 1 2^16 caractres. Dim ma_chaine as string ma_chaine = "Bonjour" MsgBox ma_chaine Dim ma_chaine$

Ou bien

Il existe en VBA toutes les fonctions de conversion nombre <--> chane voir str et val

concatnation de chane : ma_chaine = "Bon" + "jour" ma_chaine = "Amplitude :" & val(signal)

Masters SMaRT & GSI - Supervision Industrielle - 2011-2012 P. Bonnet

27

Programmation VBA/Excel
Tableaux
Tous les types peuvent tre tendus en tableau

Dim Tableau1(10) as double Tableau(3) = 3.14159 Dim MatriceXY(5,7) as Boolean MatriceXY(2,3) = True 'dimension 60 au maximum

L'indice de dbut est implicitement 0 par dfaut , 1 en utilisant la dclaration Option Base 1 ou en spcifiant les indices : Dim MonTableau(1 To 5, 10 To 20) As String Recherche des indices min et max par les fonctions LBound et Ubound NbElements = (Ubound(MatriceXY,1)-LBound(MatriceXY,1)+1)*(Ubound(MatriceXY,2)... ... -LBound(MatriceXY,2)+1) Tableau dynamique avec redimensionnement Dim Karnaugh() as boolean ReDim Karnaugh(20) attention, les anciennes valeurs sont effaces (utiliser ReDim Preserve) le type ne peut pas tre modifi (sauf dans le cas d'un tableau de variant) Le type Array permet de crer une liste de valeurs [de type tableau de variant] MonTableau = Array("a", "b", "c")
Masters SMaRT & GSI - Supervision Industrielle - 2011-2012 P. Bonnet

28

Programmation VBA/Excel Variables


Variant
Variant est le type de donnes attribu toutes les variables qui ne sont pas explicitement dclares comme tant d'un autre type ( l'aide d'instructions telles que Dim, Private, Public ou Static). Le type de donnes Variant ne possde aucun caractre de dclaration de type. Variant est un type de donnes spcial pouvant contenir des donnes de toutes sortes, l'exception des donnes de type String de longueur fixe. La valeur Empty dsigne une variable de type Variant qui n'a pas t initialise (c'est--dire laquelle aucune valeur initiale n'a t affecte). Un variant peut aussi contenir la valeur Null ou Error Lorsqu'un variant contenant une chane est utilis dans une opration requrant un type numrique, le variant est automatiquement converti en nombre. Exemple:
Dim MyVar As Variant MyVar = "20" Cells(1, 1) = MyVar + 10

La valeur affiche dans la cellule est 30


29

Masters SMaRT & GSI - Supervision Industrielle - 2011-2012 P. Bonnet

Programmation VBA/Excel Variables


Date (trs important pour la gestion des donnes industrielles horodates)
Les dates sont comprises entre le 1er janvier 1900 et le 31 dcembre 9999, les heures allant de 0:00:00 23:59:59. Le type date est stock dans un double. La partie entire correspond au nombre de jours couls depuis le 1er Janvier 1900; la partie fractionnaire correspond la fraction de jour coule (1h = 1/24 de jour, 1mn = 1/(24x60) de jour , 1s =1/(24x60x60) de jour ).

Exemple : Dim ma_date As Date Dim mon_heure, ma_dateheure As Double ma_date = "16/09/2008" mon_heure = 0.5 'une demi-journe de plus soit 12H ma_dateheure = ma_date + mon_heure Cells(3, 1) = ma_dateheure
donne comme rsultat 16/09/08 12:00 PM (dpend du format d'affichage choisi)

- la conversion de type est implicite depuis le format chane. - utilisez la fonction IsDate pour savoir si une valeur variant peut tre convertie en date ou en heure. - VBA propose des fonctions de conversion (DateSerial , TimeSerial)

Masters SMaRT & GSI - Supervision Industrielle - 2011-2012 P. Bonnet

30

Programmation VBA/Excel Variables


Type utilisateur
Un type utilisateur dfinit une structure contenant les types de base. Exemple: Dclaration du type
Public Type FicheEtudiant Nom As String*30 DateNaissance As Date Sexe As Boolean End Type 'variable type String contenant le nom. 'variable type Date contenant la date de naissance . 'variable type Boolean dfinissant le sexe (False=fm,True=masc.).

Usage du type : Dim NewEtudiant as FicheEtudiant NewEtudiant.Nom = "Dupont" NewEtudiant.DateNaissance = "25/10/82" NewEtudiant.Sexe = True Dim NewEtudiant as FicheEtudiant With NewEtudiant .Nom = "Dupont" .DateNaissance = "25/10/82" .Sexe = True End With

ou bien :

Masters SMaRT & GSI - Supervision Industrielle - 2011-2012 P. Bonnet

31

Programmation VBA/Excel Variables


Type objet
Un objet [ou classe] est une variable structure permettant de manipuler des concepts volus. Les valeurs associes un objet s'appellent des paramtres , les fonctions appliques un classe sont des mthodes Pour pouvoir utiliser un objet, il faut commencer par le dclarer puis l'instancier : Dim monObjet As MaClasse Set monObjet = New MaClasse monObjet.param1 = 10 monObjet.Afficher ... Dim monObjet As New MaClasse ...

Ou

Lorsque lobjet nest pas instanci mais seulement dclar, il est alors quivalent "Nothing" . Destruction d'un objet Set monObjet = Nothing Il existe de nombreux objets prdfinis dans Excel : WorkBook, Range

Masters SMaRT & GSI - Supervision Industrielle - 2011-2012 P. Bonnet

32

Programmation VBA/Excel Variables


Hirarchie des principaux objets Excel
Application Workbooks WorkBook Worksheets WorkSheet Range, Cells Exemple de rfrencement : Excel.Workbooks(1).Sheets(1).Range("A1").Value = "salut"

L'objet Cell n'existe pas au sens strict en Excel


Rfrence : http://rdorat.free.fr/Enseignement/VBA/VBA/ObjExcel.html

Masters SMaRT & GSI - Supervision Industrielle - 2011-2012 P. Bonnet

33

Programmation VBA/Excel Instructions de contrle

If (condition) Then instruction 1 instruction 2 ... Else instruction 1 ... End If If (condition) Then instruction 1 ... Elseif (condition) Then instruction 1 ... End If For (variable) = (dbut) To (fin) instruction 1 ... Next [nom de la variable d'incrment]

Expression des conditions

oprateur de comparaison a <= 10 a <> 3

a = b

ma_chaine = "Bonjour"

oprateur logique

(a = b) AND (a >= 10) ( a = b) OR NOT( a <= 10)

( a <> b ) XOR (a = c)

Masters SMaRT & GSI - Supervision Industrielle - 2011-2012 P. Bonnet

34

Programmation VBA/Excel Instructions de contrle

Do [while|until] (condition) instruction 1 ... Loop instruction 1 ... Loop [while|until] (condition) Do ou While (condition) instruction 1 ... Wend

Select Case (variable) case valeur1 instruction 1 ... case valeur2 instruction 1 ... case valeur3 To valeur4 instruction 1 ... case Is >= valeur5 instruction 1 ... case else instruction 1 ... End Select
Masters SMaRT & GSI - Supervision Industrielle - 2011-2012 P. Bonnet

35

Programmation VBA/Excel Macros


Une macro est une procdure dont l'excution est lance depuis : - le menu Outils/Macro/Excuter - par un raccourci clavier - par un bouton de la barre d'outils formulaire - une image - un bouton de la barre d'outils
Le code VBA d'une macro peut tre gnr automatiquement par l'enregistreur de macro

Masters SMaRT & GSI - Supervision Industrielle - 2011-2012 P. Bonnet

36

Programmation VBA/Excel Procdures


Une procdure commence par Sub et termine par End Sub. Elle excute des actions mais ne renvoie pas de valeurs . Exemple sans argument: procdure de recopie la cellule active 1 ligne vers le bas et 0 colonne
vers la droite, puis slection de cette nouvelle cellule Sub Copie_Decale() ActiveCell.Copy ActiveCell.Offset(1,0) ActiveCell.Offset(1,0).Select End Sub

Exemple avec argument d'entre: les rfrences de la cellule dcaler sont passes en
paramtre de type chane . Sub Copie_Decale_bis(AdressePlage As String) Dim Ma_Plage As Range Set Ma_Plage = Range(AdressePlage) Ma_Plage.Copy Plage.Offset(1,0) Ma_Plage.Offset(1,0).Select End Sub Pour excuter cette procdure, taper Copie_Decale_bis("C3") dans la fentre Excution

Masters SMaRT & GSI - Supervision Industrielle - 2011-2012 P. Bonnet

37

Programmation VBA/Excel Fonctions


Une fonction accepte un ou plusieurs arguments en entre et retourne un argument . Elle commence par Function et se termine par End Function Exemple: fonction retournant le code couleur de la cellule dont les coordonnes sont passes en
paramtre de type chane. La fonction retourne une chane .

Public Function Code_Couleur(AdressePlage As String) As String Dim Ma_Plage As Range Dim Index as integer Set Ma_Plage = Range(AdressePlage) Index = Ma_Plage.Interior.ColorIndex Code_Couleur = "Couleur de la cellule " & AdressePlage & " : " & str(Index) End Function Pour excuter cette fonction, taper range("B3") = Code_Couleur("A3") dans la fentre Excution. Le rsultat est donn dans la cellule B3 .

Masters SMaRT & GSI - Supervision Industrielle - 2011-2012 P. Bonnet

38

Programmation VBA/Excel Procdures/Fonctions


Passage de paramtres Par valeur (appel par dfaut): C'est la valeur de la variable qui est passe dans la fonction. Tout
calcul sur cette valeur est local la fonction et n'affecte pas la valeur dans la structure appelante. a = 5 increment(a) MsgBox a 'la valeur affiche est 5 ... Sub increment (ByVal var1 as Integer) var1 =var1 + 1 ' var1 prend la valeur 5 End Sub

Par rfrence : le paramtre pass est l'adresse de la variable. Il en rsulte que toute modification
de la valeur dans la fonction affecte la valeur de la variable dans la structure appelante a = 5 increment(a) MsgBox a 'la valeur affiche est 6 ... Sub increment (ByRef var1 as Integer) var1 =var1 + 1 ' var1 pointe sur a End Sub
39

Masters SMaRT & GSI - Supervision Industrielle - 2011-2012 P. Bonnet

Programmation VBA/Excel Exercice


Faire le calcul de la variance d'un tableau de donnes Excel et l'afficher dans une boite de dialogue (voir suite transparents). L'interface de saisie est une feuille Excel

Le contenu du tableau est rang partir de la cellule A5 , le nb de lignes en B2 et le nombre de colonnes en B3. 1) Faire un programme basique de calcul en VBA comprenant la rcupration des valeurs, le calcul puis l'affichage 2) Isoler le calcul dans une fonction STD(mon_tableau) dont le paramtre d'entre est le seul nom de variable du tableau (utiliser un tableau dynamique, rechercher les dimensions du tableau d'entre et appliquer le calcul)
A5

3) On souhaite que le tableau soit directement slectionn la souris. Utiliser les proprits de l'objet Selection pour rcuprer les donnes.
40

Masters SMaRT & GSI - Supervision Industrielle - 2011-2012 P. Bonnet

Programmation VBA/Excel Autres Fonctionnalits


Envoyer un message d'avertissement Dim Mon Message as string MonMessage = "Vous n'tes pas autoris mener cette action"+Chr$(13)+ "Opration annule" MsgBox MonMessage

Envoyer un message avec rponse type choix Dim MonMessage, Titre As String Dim Saisie As Integer MonMessage = "Lancement Impression ?" Titre = "Impression Rapport" Saisie = MsgBox(MonMessage, vbOKCancel, Titre) If Saisie = vbOK Then MsgBox"En cours"

Masters SMaRT & GSI - Supervision Industrielle - 2011-2012 P. Bonnet

41

Programmation VBA/Excel Autres actions


Saisie d'une valeur Dim Saisie as Variant Saisie = InputBox("Saisir la dure en s","test systme")

ATTENTION : Les fonctions MsgBox et InputBox sont blocantes jusqu' rponse de l'oprateur.

Masters SMaRT & GSI - Supervision Industrielle - 2011-2012 P. Bonnet

42

Programmation VBA/Excel Utilisation de UserForm


permet de crer une fentre dans une application, indpendamment des feuilles Excel.
En VB pur , la fentre est l'lment de base de l'IHM

Masters SMaRT & GSI - Supervision Industrielle - 2011-2012 P. Bonnet

43

Programmation VBA/Excel Utilisation de UserForm


les contrles usuels (curseur, case cocher, fentre texte...) peuvent tre insrs
dans un UserForm

Par programmation, toutes les proprits des contrles sont accessibles, ainsi que les
cellules des feuilles Excel (la valeur d'un contrle peut tre li directement celle d'une cellule)

par dfaut, le Userform n'est pas affich. Pour le faire passer en premier plan, il
faut utiliser la mthode :

My_UserForm. Show

Masters SMaRT & GSI - Supervision Industrielle - 2011-2012 P. Bonnet

44

MASTERs SMaRT & GSI

PROGRAMMATION EVENEMENTIELLE sur EXCEL


Pierre BONNET
Masters SMaRT & GSI - Supervision Industrielle - 2011-2012 P. Bonnet

Programmation VBA/Excel Programmation vnementielle


La programmation vnementielle permet un appel de procdure depuis l'interface HMI d'Excel (ou d'un User Form)

Retour l'exploitation classique d'Excel

Attention: le nom de la procdure vnementielle est impos par l'objet source en MsOffice
Masters SMaRT & GSI - Supervision Industrielle - 2011-2012 P. Bonnet

46

Programmation VBA/Excel Programmation vnementielle:

Evnement [front montant]

Retour de tche vnementielle

Masters SMaRT & GSI - Supervision Industrielle - 2011-2012 P. Bonnet

47

Programmation VBA/Excel Programmation vnementielle sur front:


Conditions vnementielles

Diagramme de commande

Attente

Fin Trait vnement masquage

Trait Event

appel

Evnement

t
Tche vnementielle
active active active

t
Tche principale

active suspendue

active

suspendue

...

t
Masters SMaRT & GSI - Supervision Industrielle - 2011-2012 P. Bonnet

48

Programmation VBA/Excel Programmation vnementielle: blocage temporaire par la tche vnementielle

Le retour la fentre de prsentation Excel se faite la fin de la boucle. Aucune activit apparente sur la fentre: le compteur reste la valeur 0; le bouton "Start" reste enfonc; le bouton "Stop" reste enfonc un clic sur "Stop" est pris en compte par le gestionnaire d'vnements de l'interface graphique (Windows).et transmis au gestionnaire d'vnements de l'application (Excel). Cet vnement est mis en pile dans le gestionnaire de l'appli et n'est trait qu'aprs la fin de traitement de l'vnement prcdent.
Masters SMaRT & GSI - Supervision Industrielle - 2011-2012 P. Bonnet

49

Programmation VBA/Excel Programmation vnementielle:


Les performances de l'application seront donc lies la qualit de la programmation des tches

Blocage temporaire Blocage dfinitif de l'application dans la tache dans la fin sans tche vnementielle

Masters SMaRT & GSI - Supervision Industrielle - 2011-2012 P. Bonnet

50

Programmation VBA/Excel Programmation vnementielle:

Retour feuille Excel

Gestionnaire d'vnements

Appel forc au gestionnaire d'vnements:

l'vnement suivant dans la pile est trait

Masters SMaRT & GSI - Supervision Industrielle - 2011-2012 P. Bonnet

51

Programmation VBA/Excel Programmation vnementielle sur niveau:


Conditions vnementielles Attente Fin Conditions vnementielles Trait Event

La dure d'excution de la tche vnementielle est lie la dure d'activation de l'vnement


appel appel

appel

Evnement

Tche vnementielle

active arrte

active arrte

active

t
Tche principale

active suspendue

active

...

suspendue

t
Masters SMaRT & GSI - Supervision Industrielle - 2011-2012 P. Bonnet

52

Programmation VBA/Excel Programmation vnementielle: principe


Excel,VB C++...

Chaque application possde son propre gestionnaire d'vnement


Gestionnaire de fentres graphiques

Explorer

Bureau Evnements Messages

Systme d'exploitation ordonnanceur Timers


Interruptions

Interruptions matrielles (cartes...)

HMI

E/S

Horloge
53

Masters SMaRT & GSI - Supervision Industrielle - 2011-2012 P. Bonnet

Programmation VBA/Excel Programmation vnementielle: principe


Structure d'une application

Fonctions vnementielles
Retour fonction Appel Fonction Pile d'vnements Fifo

vnements venants d'applications externes (sources)

Gestionnaire d'vnements

les vnements sont traits dans l'ordre d'apparition accs la gestion de pile [crasement volontaire]? Modification de l'ordre des vnements
dans la pile ? Appels multiples d'un mme vnement?
Masters SMaRT & GSI - Supervision Industrielle - 2011-2012 P. Bonnet

54

Programmation VBA/Excel vnements Classeur


Ouverture classeur Private Sub Workbook_Open() Call MaProdedure End Sub Fermeture classeur Private Sub Workbook_BeforeClose(Cancel As Boolean) Redimensionnement fentre classeur Private Sub Workbook_WindowResize(ByVal Wn As Window)

Masters SMaRT & GSI - Supervision Industrielle - 2011-2012 P. Bonnet

55

Programmation VBA/Excel vnements Feuille


Activation/dsactivation Feuille Sub WorkSheet_Activate() Sub WorkSheet_Deactivate() Changement de valeur sur feuille Sub WorkSheet_Change(ByVal Target As Range) [Target reprsente la plage modifie, elle peut contenir plusieurs cellules. ]
Attention : si la procdure vnementielle modifie elle-mme des contenus de cellule, il y aura rcursivit de l'vnement. Dans une telle application, il est ncessaire de bloquer [masquer] les vnements par Application.EnableEvents = False avant de modifier les contenus, puis de dbloquer les vnements par Application.EnableEvents = True voir http://www.cpearson.com/excel/Events.aspx

Changement de slection sur la feuille Sub Worksheet_SelectionChange(ByVal Target As Excel.Range) [Target reprsente la nouvelle plage slectionne]

Masters SMaRT & GSI - Supervision Industrielle - 2011-2012 P. Bonnet

56

Programmation VBA/Excel Evnements


Cration d'une nouvelle procdure vnementielle Se placer dans le module "Classeur" ( ThisWorkbook ), insrer le code suivant :
Public WithEvents Mon_Appli As Application Private Sub Workbook_Open() Set Mon_Appli = Application End Sub

L'application "Mon_Appli" dispose maintenant de proprits vnementielles associes certains lments du projet (classeur, feuilles...), tout comme une feuille, un classeur ou un module. La liste des vnements disponibles (onglet en haut de droite) est consultable aprs avoir slectionn l'application (onglet en haut gauche)

Masters SMaRT & GSI - Supervision Industrielle - 2011-2012 P. Bonnet

57

Programmation VBA/Excel Insertion d'autres contrles ActiveX


Les contrles activeX sont des composants externes crits conformment aux rgles COM (Component Objet Model); ces composants possdent des proprits, exposent des mthodes et gnrent des vnements. Pour tre utilisable dans une application, ces composants doivent tre enregistrs dans la base de registre (regserv32.exe). Un composant ActiveX s'excute dans l'espace mmoire de l'application principale appele conteneur. Un composant ActiveX comprend des proprits, des mthodes et des vnements. Exemple : calendrier Calendar Microsoft

Masters SMaRT & GSI - Supervision Industrielle - 2011-2012 P. Bonnet

58

Programmation VBA/Excel Contrle du temps d'excution d'une application


Lecture de l'heure et valuation d'une dure L'heure courante est directement accessible sous Excel/VBA par la fonction Now Le format est celui d'un flottant double prcision avec : - partie entire = nombre de jours depuis 1900 - partie fractionnaire = fraction de jour
(1h = 1/24 de jour, 1mn = 1/(24x60) de jour , 1s =1/(24x60x60) de jour )

Les calculs peuvent se faire directement avec les dates/heures par simple addition ou soustraction: Heure_Depart = Now Calculs.... Heure_Fin = Now Duree = Heure_Fin - Heure_Depart

Il existe de nombreuses fonctions de manipulation des date/ heure qui facilitent l'expression des calculs ou des rsultats
Masters SMaRT & GSI - Supervision Industrielle - 2011-2012 P. Bonnet

59

Programmation VBA/Excel Contrle du temps d'excution d'une application


Gestion du temps par mthode d'attente Sub Attente() Dim Fin_Tempo [as Variant] Fin_Tempo = Now + TimeSerial(0, 0, Duree_attente_s ) Application.Wait Fin_Tempo MsgBox "Attente termine" End Sub

La mthode Wait permet de faire intervenir la notion de temps dans l'excution d'une fonction L'attente est blocante pour la TOTALITE de l'application Excel

Masters SMaRT & GSI - Supervision Industrielle - 2011-2012 P. Bonnet

60

Programmation VBA/Excel Contrle du temps d'excution d'une application


Mthode fondamentale pour une gestion multitche non-blocante

Heure_Execution = Now + TimeSerial(0, 0, Duree_attente ) Application.OnTime Heure_Execution , "Procdure_a_executer"

[ la procdure <macro> doit tre crite dans un "module" pour tre accessible au systme d'exploitation] La mthode vnementielle OnTime permet de disposer d'une gestion multitche par appel de fonctions depuis le systme d'exploitation. La gestion de l'vnement est externe l'application Excel La tche s'excute mme en cas de fermeture du classeur (rouverture du classeur sous rserve qu'une instance d'Excel soit ouverte)
Masters SMaRT & GSI - Supervision Industrielle - 2011-2012 P. Bonnet

61

Programmation VBA/Excel Contrle du temps d'excution d'une application


Principe de fonctionnement de la mthode OnTime

Enregistrement de la

demande d'vnement auprs du systme d'exploitation [NT/XP]


Poursuite de

l'excution de la tche appelante


Appel de la tche

temporise par le systme d'exploitation

Attention: La tche appele doit se trouver dans un module (visibilit depuis Windows)

La mthode OnTime n'est pas bloquante car elle est gre par le systme d'exploitation
Masters SMaRT & GSI - Supervision Industrielle - 2011-2012 P. Bonnet

62

Programmation VBA/Excel Contrle du temps d'excution d'une application


Tche cyclique

Enregistrement de la

demande d'vnement au systme d' exploitation [NT/XP]


Poursuite de

l'excution de la tche appelante


Rappel de la tche

cyclique par le systme d'exploitation

La temporisation est relance sur elle-mme et cre une tche cyclique . L'arrt de la tche cyclique ne peut se faire que par son enregistrement avec le
paramtre de "Schedule" False, ce qui la supprime de la liste des vnements.
Masters SMaRT & GSI - Supervision Industrielle - 2011-2012 P. Bonnet

63

Programmation VBA/Excel Contrle du temps d'excution d'une application


Tche cyclique Des erreurs sont souvent constates dans le fonctionnement de l'exemple de la page prcdente : - l'activit s'excute deux fois (voire plus) pour une priodicit donne - la priodicit de la Tche cyclique apparat comme fausse (priode diminue) Explications : aprs le lancement initial de la tche cyclique, son fonctionnement n'est plus contrl par Excel mais par le systme d'exploitation. tout lancement supplmentaire de la tche cyclique (par le menu "macro" ou par programmation) gnre une nouvelle instanciation . Les instanciations multiples fonctionnent en boucles imbriques: les instants de dclenchements peuvent tre identiques (activit vnementielle rpte plusieurs fois au mme instant) ou dcals (activit relance au cours d'une priode de base)
Masters SMaRT & GSI - Supervision Industrielle - 2011-2012 P. Bonnet

64

Programmation VBA/Excel Contrle du temps d'excution d'une application


Timer VB Sous VB6, l'utilisateur dispose de Timer ajustable de 1 ms 65s . Sa programmation est trs simple (non disponible sous VBA)

Timer Windows Le systme d'exploitation Windows propose une fonction de type timer dans la librairie user32.dll . Elle permet de fixer une dure la dure (ou priode ) 1 ms prs. Les lments de programmation sont : dfinition de la fonction vnementielle lancement du timer avec passage du pointeur de la fonction vnementielle arrt du timer par la fonction killtimer
65

Masters SMaRT & GSI - Supervision Industrielle - 2011-2012 P. Bonnet

Programmation VBA/Excel Contrle du temps d'excution d'une application


Timer systme de la librairie user32

Option Explicit Dim Compteur As Integer

Declare Function SetTimer Lib "user32" _ (ByVal hwnd As Long, _ ByVal nIDEvent As Long, _ ByVal uElapse As Long, _ ByVal lpTimerFunc As Long) As Long Declare Function KillTimer Lib "user32" _ (ByVal hwnd As Long, _ ByVal nIDEvent As Long) As Long

Sub TimerProcess(ByVal hwnd As Long, _ ByVal uMsg As Long, _ ByVal idEvent As Long, _ ByVal dwTime As Long) Compteur = Compteur + 1 Feuil1.Cells(1, 1) = CStr(Compteur) End Sub

Masters SMaRT & GSI - Supervision Industrielle - 2011-2012 P. Bonnet

66

Programmation VBA/Excel Contrle du temps d'excution d'une application


Timer systme de la librairie user32
Option Explicit Dim IDTimer As Long Dim EtatTimer As Boolean Private Sub Commandbutton1_Click() 'Starts and stops the timer. If EtatTimer = False Then IDTimer = SetTimer(0, 0, 10, AddressOf TimerProcess) If IDTimer = 0 Then MsgBox "Timer non cr" Exit Sub End If EtatTimer = True CommandButton1.Caption = "Stop Timer" Else IDTimer = KillTimer(0, IDTimer) If IDTimer = 0 Then MsgBox "impossible d'arrter le timer" End If EtatTimer = False CommandButton1.Caption = "Start Timer" End If End Sub 'A mettre dans le module "This WorkBook" Private Sub WorkBook_Open() EtatTimer = False CommandButton1.Caption = "Start Timer" End Sub 67

Masters SMaRT & GSI - Supervision Industrielle - 2011-2012 P. Bonnet