Professional Documents
Culture Documents
Programmation VBA
Pierre BONNET
Masters SMaRT & GSI - Supervision Industrielle - 2011-2012 P. Bonnet
21
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 :
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
22
23
VB6 VB6
msvbvm60.dll
http://fr.wikipedia.org/wiki/.NET
24
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
Single, Double
26
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)
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
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)
30
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 :
31
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
32
33
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]
a = b
ma_chaine = "Bonjour"
oprateur logique
( a <> b ) XOR (a = c)
34
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
36
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
37
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 .
38
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
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
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"
41
ATTENTION : Les fonctions MsgBox et InputBox sont blocantes jusqu' rponse de l'oprateur.
42
43
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
44
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
47
Diagramme de commande
Attente
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
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
Blocage temporaire Blocage dfinitif de l'application dans la tache dans la fin sans tche vnementielle
50
Gestionnaire d'vnements
51
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
Explorer
HMI
E/S
Horloge
53
Fonctions vnementielles
Retour fonction Appel Fonction Pile d'vnements Fifo
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
55
Changement de slection sur la feuille Sub Worksheet_SelectionChange(ByVal Target As Excel.Range) [Target reprsente la nouvelle plage slectionne]
56
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)
57
58
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
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
60
[ 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
Enregistrement de la
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
Enregistrement de la
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
64
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
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
66