Masters SMaRT & GSI - Supervision Industrielle - 2012-2013 P. Bonnet
PROGRAMMATION EVENEMENTIELLE
sur EXCEL
MASTERs SMaRT & GSI
Pierre BONNET
46Masters SMaRT & GSI - Supervision Industrielle - 2012-2013 P. Bonnet
Programmation VBA/Excel
Programmation vnementielle
Retour l'exploitation classique d'Excel
La programmation vnementielle permet un appel de procdure depuis l'interface HMI d'Excel (ou d'un User Form)
Attention: le nom de la procdure vnementielle est impos par l'objet source en MsOffice
47Masters SMaRT & GSI - Supervision Industrielle - 2012-2013 P. Bonnet
Programmation VBA/Excel
Programmation vnementielle:
Evnement [front montant]
Retour de tche vnementielle
48Masters SMaRT & GSI - Supervision Industrielle - 2012-2013 P. Bonnet
Programmation VBA/Excel
Programmation vnementielle sur front:
t
t
Tchevnementielle
Evnement
t
Tcheprincipale
activeactive suspendue suspendue ...
masquageappel
active activeactive
Attente TraitEvent
Conditionsvnementielles
Fin Traitvnement
Diagramme de commande
49Masters SMaRT & GSI - Supervision Industrielle - 2012-2013 P. Bonnet
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.
50Masters SMaRT & GSI - Supervision Industrielle - 2012-2013 P. Bonnet
Programmation VBA/Excel
Programmation vnementielle:
Les performances de l'application seront donc lies la qualit de la programmation des tches
Blocage temporaire de l'application dans la tche vnementielle
Blocage dfinitifdans la tache
sans fin
51Masters SMaRT & GSI - Supervision Industrielle - 2012-2013 P. Bonnet
Programmation VBA/Excel
Programmation vnementielle:
Appel forc au gestionnaire d'vnements: l'vnement suivant dans la pile est trait
Retour feuille Excel
Gestionnaire d'vnements
53Masters SMaRT & GSI - Supervision Industrielle - 2012-2013 P. Bonnet
Programmation VBA/Excel
Programmation vnementielle: principeExcel,VBC++...
Explorer
Bureau
Systme d'exploitation
HorlogeHMIInterruptions
Timers
Evnements Messages
Gestionnaire de fentres graphiques
E/S
Interruptionsmatrielles(cartes...)ordonnanceur
Chaque application possde son propre
gestionnaire d'vnement
54Masters SMaRT & GSI - Supervision Industrielle - 2012-2013 P. Bonnet
Programmation VBA/Excel
Programmation vnementielle: principe
Pile d'vnements
Fifo
vnementsvenants d'applications
externes (sources)
Gestionnaire d'vnements
Fonctions vnementielles
App
el
Fonc
tion
Retour fonction
Structure d'une application
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?
55Masters SMaRT & GSI - Supervision Industrielle - 2012-2013 P. Bonnet
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)
56Masters SMaRT & GSI - Supervision Industrielle - 2012-2013 P. Bonnet
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)
57Masters SMaRT & GSI - Supervision Industrielle - 2012-2013 P. Bonnet
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]
58Masters SMaRT & GSI - Supervision Industrielle - 2012-2013 P. Bonnet
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 = ApplicationEnd 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)
59Masters SMaRT & GSI - Supervision Industrielle - 2012-2013 P. Bonnet
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
60Masters SMaRT & GSI - Supervision Industrielle - 2012-2013 P. Bonnet
Programmation VBA/Excel
Contrle du temps d'excution d'une application
Lecture de l'heure et valuation d'une dureL'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 = NowDuree = Heure_Fin - Heure_Depart
Il existe de nombreuses fonctions de manipulation des date/ heure qui facilitent l'expression des calculs ou des rsultats
61Masters SMaRT & GSI - Supervision Industrielle - 2012-2013 P. Bonnet
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
62Masters SMaRT & GSI - Supervision Industrielle - 2012-2013 P. Bonnet
Programmation VBA/Excel
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 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)
Contrle du temps d'excution d'une application
63Masters SMaRT & GSI - Supervision Industrielle - 2012-2013 P. Bonnet
Programmation VBA/Excel
Principe de fonctionnement de la mthode OnTime
Enregistrement de la demande d'vnement auprs du systme d'exploitation [NT/XP]
La mthode OnTime n'est pas bloquante car elle est gre par le systme d'exploitation
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
Poursuite de l'excution de la tche appelante
Contrle du temps d'excution d'une application
64Masters SMaRT & GSI - Supervision Industrielle - 2012-2013 P. Bonnet
Programmation VBA/Excel
Tche cyclique
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.
Enregistrement de la demande d'vnement au systme d' exploitation [NT/XP]
Rappel de la tchecyclique par le systme d'exploitation
Poursuite de l'excution de la tche appelante
Contrle du temps d'excution d'une application
65Masters SMaRT & GSI - Supervision Industrielle - 2012-2013 P. Bonnet
Programmation VBA/Excel
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)
Contrle du temps d'excution d'une application
66Masters SMaRT & GSI - Supervision Industrielle - 2012-2013 P. Bonnet
Programmation VBA/Excel
Exercice 5: clignoteur
Contrle du temps d'excution d'une application
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.
67Masters SMaRT & GSI - Supervision Industrielle - 2012-2013 P. Bonnet
Programmation VBA/Excel
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
Contrle du temps d'excution d'une application
68Masters SMaRT & GSI - Supervision Industrielle - 2012-2013 P. Bonnet
Programmation VBA/Excel
Timer systme de la librairie user32Contrle du temps d'excution d'une application
Option ExplicitDim 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
69Masters SMaRT & GSI - Supervision Industrielle - 2012-2013 P. Bonnet
Programmation VBA/Excel
Timer systme de la librairie user32Contrle du temps d'excution d'une application
Option ExplicitDim IDTimer As LongDim 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 IfEnd Sub
'A mettre dans le module "This WorkBook"Private Sub WorkBook_Open() EtatTimer = False CommandButton1.Caption = "Start Timer"End Sub
Diapo 45Diapo 46Diapo 47Diapo 48Diapo 49Diapo 50Diapo 51Diapo 53Diapo 54Diapo 55Diapo 56Diapo 57Diapo 58Diapo 59Diapo 60Diapo 61Diapo 62Diapo 63Diapo 64Diapo 65Diapo 66Diapo 67Diapo 68Diapo 69