Vous êtes sur la page 1sur 24

MASTERs SMaRT & GSI

PROGRAMMATION EVENEMENTIELLE sur EXCEL


Pierre BONNET
Masters SMaRT & GSI - Supervision Industrielle - 2012-2013 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 - 2012-2013 P. Bonnet

46

Programmation VBA/Excel Programmation vnementielle:

Evnement [front montant]

Retour de tche vnementielle

Masters SMaRT & GSI - Supervision Industrielle - 2012-2013 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 - 2012-2013 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 - 2012-2013 P. Bonnet

49

Programmation VBA/Excel Programmation vnementielle:


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

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

Masters SMaRT & GSI - Supervision Industrielle - 2012-2013 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 - 2012-2013 P. Bonnet

51

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 - 2012-2013 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 - 2012-2013 P. Bonnet

54

Programmation VBA/Excel Programmation vnementielle: exercice 4


Boutons de commande industriels On dsire prsenter un composant Excel de supervision reprsentant une commande Arrt/Marche deux boutons commandant une variable boolenne : - lors de l'appui sur "Marche", le bouton devient inactif,enfonc, texte en vert fonc normal, le bouton "Arrt" devient actif, relch texte rouge clair gras - lors de l'appui sur "Arrt", le bouton devient inactif,enfonc, texte en rouge fonc normal, le bouton "Marche" devient actif, relch texte vert clair gras - la variable boolenne est visualise par une cellule dont le texte et la couleur sont en concordance avec l'tat des boutons. Veiller dfinir l'tat initial des composants l'ouverture d'Excel (bouton d'initialisation ou mieux vnement ouverture classeur)

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

55

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 - 2012-2013 P. Bonnet

56

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 - 2012-2013 P. Bonnet

57

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 - 2012-2013 P. Bonnet

58

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 - 2012-2013 P. Bonnet

59

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 - 2012-2013 P. Bonnet

60

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 - 2012-2013 P. Bonnet

61

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 - 2012-2013 P. Bonnet

62

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 tre dsigne par son nom complet pour tre visible depuis Windows

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

63

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 - 2012-2013 P. Bonnet

64

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 - 2012-2013 P. Bonnet

65

Programmation VBA/Excel Contrle du temps d'excution d'une application Exercice 5: clignoteur


On dsire raliser un clignoteur bas sur une temporisation cyclique de 1s. La temporisation sera lance par un poussoir "marche" et arrte par un poussoir "arrt" Lorsque l'arrt est effectif, le clignoteur sera teint. Faire ensuite un clignoteur dont la dure l'tat allum est 2s et la dure l'tat teint 1s (utiliser deux tches s'appelant mutuellement) Propositions pour fiabiliser l'application : a) utiliser une variable boolenne tempo_en_marche qui sera teste pour viter le relancement de la tempo b) utiliser la proprit schedule = false de la mthode Application.OnTime pour l'arrt du clignoteur.

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

66

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
67

Masters SMaRT & GSI - Supervision Industrielle - 2012-2013 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 - 2012-2013 P. Bonnet

68

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 69

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