You are on page 1of 10

Rappels d’algorithmique

• Nous avons vu :
Excel 2000 et VBA – Définition : Un algorithme est une suite finie
d’instructions qui, étant donné des paramètres typés,
calcule une solution d’un problème donné
VB et VBA pour Excel : – Variables Nom
Conclusion, révisions et extensions – Constantes
Valeur
– Opérateurs, fonctions
– Expressions
Philippe Pasquier
– Une instruction : l’affectation
– Une méthode de programmation utilisant tout
ça : la programmation événementielle
– Un environnement de programmation (Visual
Studio 6)
IFT-20403-A Basic et Visual Basic 2 Philippe Pasquier, Octobre 2003

Rappels d’algorithmique Les tableaux et VBA


• Exemples :
• Notion de tableau : Sub tablo1()
index Nom
'déclaration d’un tableau d’entiers
– Collection de valeurs d’un Dim mytab(1 To 5) As Integer
même type 0 Valeur
'initialisation du tableau
– Accessibles par indexation 1 Valeur mytab(1) = 1
– 1 ou plusieurs dimensions mytab(2) = 2
mytab(3) = 3
– De taille statique (fixe) ou 254 Valeur mytab(4) = 4
dynamique mytab(5) = 5
255 Valeur
– Généralement parcourus 'corps de la procédure
Worksheets(1).Range("A1").Value = "nombre :"
ou traités à l’aide de boucles
Worksheets("feuil1").Range("B1") =
Application.WorksheetFunction.Count(mytab)
End Sub

IFT-20403-A Basic et Visual Basic 3 Philippe Pasquier, Octobre 2003 IFT-20403-A Basic et Visual Basic 4 Philippe Pasquier, Octobre 2003
Les tableaux et VBA Objets Range comme tableaux de cellules
Sub tablo2() Sub Range1()
'déclaration des variables 'déclaration des variables locales
Dim mytab(1 To 5) As Integer Dim plagelocale As Range
Dim i As Integer 'initialisation
Set plagelocale = Worksheets(2).Range("A6:A16")
'initialisation du tableau 'accès aux éléments du Range comme à ceux d'un tableau
For i = 1 To 5
plagelocale(1).Value = 3
mytab(i) = i * i
plagelocale(2).Value = 4
Next i
plagelocale(3) = 8 'déconseillé
'corps de la procédure plagelocale(4) = 5
Worksheets(1).Range("A2").Value = "Moyenne : " 'indique le nombre d'éléments de l'objet Range manipulé
Worksheets("feuil1").Range("B2") = plagelocale(5) = plag.Count
Application.WorksheetFunction.Average(mytab)
End Sub End Sub

IFT-20403-A Basic et Visual Basic 5 Philippe Pasquier, Octobre 2003 IFT-20403-A Basic et Visual Basic 6 Philippe Pasquier, Octobre 2003

Notion de structure de contrôle Notion de structure de contrôle

• Branchement conditionnel : • Itérations et itérations conditionnelles :


For Compteur = Début To Fin [Step Incrément]
Select Case expression
If condition Then [Instructions]
Case ListeValeurs1
[instructions] [Instructions] Next [Compteur]
Else Case ListeValeurs2
[instructions] [Instructions] Do While Condition Do Until Condition
Case Else Instructions Instructions
End If
[Instructions] Loop Loop
End Select Do Do
Instructions Instructions
Loop While Condition Loop Until Condition

IFT-20403-A Basic et Visual Basic 7 Philippe Pasquier, Octobre 2003 IFT-20403-A Basic et Visual Basic 8 Philippe Pasquier, Octobre 2003
Notion de structure de contrôle Procédures et fonctions
Exemples d’utilisation de l’itération :
• Procédures :
i=exp2
– Sommes : i=exp1
– Une procédure est un ensemble d'instructions
résulat = 0 ‘élément neutre pour l’addition
qui participent à une même tâche.
For i=exp1 To exp2 [Public/Private][Static] Sub nom([liste_arguments])
résultat=résultat + exp(i) déclarations
Next i instructions
End Sub
i=exp2
– Produits : i=exp1 • Fonctions :
résulat = 1 ‘élément neutre pour la multiplication [Public/Private]Function Nom([liste_arguments])As type
For i=exp1 To exp2 déclarations
résultat = résultat * exp(i) instructions
Next i Nom = exp_du_bon_type
End Sub
IFT-20403-A Basic et Visual Basic 9 Philippe Pasquier, Octobre 2003 IFT-20403-A Basic et Visual Basic 10 Philippe Pasquier, Octobre 2003

Passage de paramètres/arguments Notion de portée / durée de vie


Nous avons vu différents niveaux de visibilité :
Option Explicit ‘ force la déclaration
Private Sub Affiche(Message As String) Public x As Integer ‘ variable publique
MsgBox(Message) Dim y As Integer ‘ variable globale
module
End Sub Private Sub CmdLancer_Click() ‘ procédure évènementielle
Dim x As Integer ‘ variable locale procédure
x = 3 ‘ initialisation
Private Sub cmdAllez_Click() y = 3 ‘ initialisation
Dim news As String Call calcul(x, (y)) ‘ appel de procédure
MsgBox ("x=" & x & " y=" & y) ‘ affichage
News=« cool ! » Call calcul(x, (y)) ‘ appel de procédure
Affiche(«Ift-20403») ‘ affiche ift-20403 MsgBox ("x=" & x & " y=" & y) ‘ affichage
End Sub ‘ destruction de x
Affiche News ‘ affiche cool !
Affiche (News) ‘ affiche cool ! Private Sub calcul(w As Integer, z As Integer) procédure
Static count As Integer ‘ variable static initialisée à 0
Call Affiche(«news») ‘ affiche news count = count + 1 ‘ incrémentation
Call Affiche News ‘erreur compilation MsgBox ("appel de calcul numero:" & count) ‘ affichage
w = w + 1 ‘ incrémentation
z = z + 1 ‘ incrémentation
End Sub Passage par référence End Sub ‘ destruction des identifiants z/w

Passage par valeur


IFT-20403-A Basic et Visual Basic 11 Philippe Pasquier, Octobre 2003 IFT-20403-A Basic et Visual Basic 12 Philippe Pasquier, Octobre 2003
Les variables locales / globales Récursivité
'déclaration des variables globales Visible dans tout
Dim plageGlobale As Range le module • Pas récursif : appel récursif
• Condition d’arrêt : bien définir le cas de base qui
Sub initialise()
terminera la séquence d’appels récursifs
Set plageGlobale = Application.InputBox("Entrer la
plage des cellules à compléter :", , , , , , , 8) • Exemple de la factorielle :
Private Function Factorial(Byval y As Double) As Double
End Sub
If y <= 1 Then
Factorial = 1 ‘Cas de base
Sub efface() Else
Factorial = y * Factorial(y-1) ‘Pas récursif
'efface le contenu sans toucher à la mise en forme
End if
plageGlobale.ClearContents
End function
End Sub

IFT-20403-A Basic et Visual Basic 13 Philippe Pasquier, Octobre 2003 IFT-20403-A Basic et Visual Basic 14 Philippe Pasquier, Octobre 2003

Gestion des erreurs Traitement des erreurs à l’exécution


• Routine de gestion d’erreur, syntaxe :
• Outils pour la mise au point de programme : Private Sub nom(arguments)
<déclarations>
– Faciliter l’écriture du code On error Goto <étiquette>
– Tester le code (pas à pas, variables <Traitement normal>
espionnes,…) Exit Sub
étiquette :
• Traitement des erreurs à l’exécution : <Traitement erreur>
resume/resume next/Exit Sub ‘mode de retour
– Certaines erreurs ne surviennent qu’à End Sub
Quitte la procédure
l’exécution, pas à la compilation : Ré-exécute l’instruction suivant la fautive
• Fichier absent Ré-exécute l’instruction fautive
• Division par zéro • Si une erreur se produit pendant traitement normal,
l’exécution est routée vers l’étiquette.
• Entrée de l’utilisateur erronée
• On peut consulter Err.number pour connaître la nature
de l’erreur
IFT-20403-A Basic et Visual Basic 15 Philippe Pasquier, Octobre 2003 IFT-20403-A Basic et Visual Basic 16 Philippe Pasquier, Octobre 2003
Gestion de fichiers VBA - Programmation orientée objet
• Classe : type abstrait encapsulant données et
• Fichiers à accès séquentiel : fichier de méthodes
données alphanumériques structuré • Objet : instance d’une classe, comprenant,
comme un texte – Propriétés : données internes à l’objet
– Méthodes : procédure et fonctions que l’on peut lui
• Structure d’enregistrement : type appliquer
utilisateur constitué de champs – Événements : des procédures événementielles
peuvent être définies pour les traiter
• Fichiers à accès direct / aléatoire :
• Collections : ensemble d’objets d’une même
ensemble d’enregistrement dont on classe
connaît la structure et donc la taille à • VBE : sorte de Visual Studio sous Excel
l’avance ce qui permet l’accès direct • Macros : procédures VB écrites automatiquement et
que l’on peut exécuter de différentes manières

IFT-20403-A Basic et Visual Basic 17 Philippe Pasquier, Octobre 2003 IFT-20403-A Basic et Visual Basic 18 Philippe Pasquier, Octobre 2003

Utiliser les procédures et fonctions VBA Utiliser les procédures et fonctions VBA
• Les fonctions VBA s’ajoutent aux fonctions
Excel pré-définies : • Il y a différentes manières de programmer une
– Exemple 1 : Fonction carré procédure ou fonction :
– Exemple 2 : Fonction MaPuiss – Lorsque rien ne le contre-indique, on peut utiliser les
– Exemple 3 : Fonction PrimeDeBase fonctions prédéfinies Excel :
• WorkSheetFunction
• Les procédures doivent être appelées de • .formula, .formulalocal, .formlaL1C1, …
manière spécifique : • Application.Evaluate
– Procédure = macro (on a vu pas mal de manières
d’appeler une macro au dernier cours : menu, • Directement dans la barre de formule
bouton de commande, bouton X, zone sensible – En écrivant le code détaillé du calcul lorsque l’on vous
d’élément graphique, …) indique de ne pas utiliser la classe WorkSheetFunction
– Exemple : exercice actuariel de Base • Exemples : sommeavecWorksheetFunction(),
• Procédures et fonctions peuvent être appelées sommeAvecFormula(), SommeCommeFonction,
à partir du code VBA, comme en VB SommeSansFormulaSansWorksheet()

IFT-20403-A Basic et Visual Basic 19 Philippe Pasquier, Octobre 2003 IFT-20403-A Basic et Visual Basic 20 Philippe Pasquier, Octobre 2003
Modèle Objet d’Excel - Extrait La programmation événementielle VBA
Application (Excel)
• Cela fonctionne comme en VB classique,
Workbooks (collection) Workbook (classeur) sauf que l’on peut utiliser les
Charts (graphique) évènements liés aux objets Excel
Worksheets (collection) Worksheet (feuille) • Un événement Excel déclenche la
procédure événementielle qui lui est
Range
associée, s’il y en a une.
Charts (graphique)
• Il faut sélectionner la fenêtre de code de
Styles l’élément auquel on souhaite associer le
Border traitement (Worksheet, Workbook, …)
WorkSheetFunction Pause….
puis déterminer l’événement à traiter

IFT-20403-A Basic et Visual Basic 21 Philippe Pasquier, Octobre 2003 IFT-20403-A Basic et Visual Basic 22 Philippe Pasquier, Octobre 2003

Exemple Événements de l’objet Application


' déclaration d'une variable globale publique
Public NbModifs As Integer • Ils sont plus complexes à faire fonctionner :
Private Sub Worksheet_Change(ByVal Target As Range)
• NewWorkBook : un nouveau classeur est créé
• SheetActivate : une feuille est activée
'À chaque modification de cellule, le compteur est
'incrémenté • WorkbookBeforePrint : survient avant une
NbModifs = NbModifs + 1
impression
End Sub • WorkbookBeforeSave : survient avant
Private Sub Worksheet_Deactivate() l’enregistrement d’un classeur
MsgBox ("Vous avez réalisé : " & NbModifs &
• WorkbookNewSheet : une feuille est créée
"modifications sur la feuille " & Worksheets(2).Name) • WorkbookOpen : un classeur est ouvert
NbModifs = 0 'réinitialise le compteur
• …
End Sub

IFT-20403-A Basic et Visual Basic 23 Philippe Pasquier, Octobre 2003 IFT-20403-A Basic et Visual Basic 24 Philippe Pasquier, Octobre 2003
Événements de l’objet Workbook Événements de l’objet WorkSheet

• Activate : survient quand le classeur est • Activate : survient lorsque la feuille est activée
activé • Deactivate : survient lorsque la feuille est désactivée
• Deactivate : survient lorsque le classeur est • BeforeDoubleClic : survient lorsque l’utilisateur
désactivé double clic sur la feuille
• BeforeClose : avant la fermeture • BeforeRightClic : survient lorsque l’utilisateur fait un
clic droit dans la feuille
• BeforePrint : avant l’impression
• Calculate : survient après le recalcul de la feuille
• BeforeSave : avant la sauvegarde
• Change : survient lors de la modification d’une cellule
• NewSheet : création d’une nouvelle feuille de la feuille
• Open : ouverture du classeur • SelectionChange : changement de sélection sur la
• SheetSelectionChange : changement de feuille
sélection sur une des feuilles • …
• …
IFT-20403-A Basic et Visual Basic 25 Philippe Pasquier, Octobre 2003 IFT-20403-A Basic et Visual Basic 26 Philippe Pasquier, Octobre 2003

Modèle Objet d’Excel - Extrait Les formulaires sous VBA


Application (Excel)
• Module de formulaire (correspond au .frm
Workbooks (collection) Workbook (classeur) dans VB classique), interface graphique,
Charts (graphique) boite de dialogue personnalisée, feuille
Worksheets (collection) Worksheet (feuille)
utilisateur ou UserForm) : bien étudié
pour la partie VB (Contrôles ActiveX +
Range
procédures évènementielles)
Charts (graphique) • Insertion dans VBE :
Styles – Dans VBE, Insertion>UserForm
Border – Bouton pour l’affichage des propriétés

WorkSheetFunction …
IFT-20403-A Basic et Visual Basic 27 Philippe Pasquier, Octobre 2003 IFT-20403-A Basic et Visual Basic 28 Philippe Pasquier, Octobre 2003
Exécution et fermeture d’un formulaire Exécution et fermeture d’un formulaire
• Méthode Show, syntaxe : • Exemple :
– objetUserForm.Show Private Sub CmdAjouter_Click()
– Affiche l’objet formulaire spécifié Static i As Integer 'COMPTEUR STATIQUE initialisé à 0
• Instruction Load, syntaxe : i = i + 1 'incrémentation du compteur statique
– Load objetUserForm
Worksheets(3).Columns(1).Cells(i + 1).Value =
– Charge le formulaire sans l’afficher TxtNum.Value
• Méthode Hide, syntaxe : Worksheets(3).Columns(2).Cells(i + 1).Value =
– objetUserForm.Hide txtVal.Value

– Masque le formulaire sans le décharger End Sub


• Instruction Unload, syntaxe : Private Sub CmdQuitter_Click()
– Unload ObjetUserForm End ‘ferme le formulaire
– Supprime le formulaire de la mémoire End Sub

IFT-20403-A Basic et Visual Basic 29 Philippe Pasquier, Octobre 2003 IFT-20403-A Basic et Visual Basic 30 Philippe Pasquier, Octobre 2003

Extensions Extensions

• Ce que nous ne verrons pas, mais dont il • Contrôles ActiveX : de nombreux


ne faut pas ignorer l’existence contrôles que nous n’avons pas vus
• VB et VBA sont des outils propriétaires • Il est possible de développer ses
mais très populaire : actuariat, propres contrôles
informatique de gestion, … • Ressources pour le multi-média :
• S’ils sont versatiles, il ne peuvent tout sons, images et vidéo
faire dans leur forme originale : de • Gestion de Bases de Données :
nombreuses extensions existent. – Microsoft Access
• Nous allons en survoler quelques-unes – SQL[Structured Query Language]

IFT-20403-A Basic et Visual Basic 31 Philippe Pasquier, Octobre 2003 IFT-20403-A Basic et Visual Basic 32 Philippe Pasquier, Octobre 2003
Extensions Extensions - Internet
– Objet HyperLink permet d’insérrer des liens HTML
• Liens entre les applications : dans vos feuilles, …
– La technologie Automation ou – Requêtes sur Internet :
• Insérer un tableau provenant d’un site Internet
OLE[Object Link and Embedding] permet • Plages de données externes (bases de données Access ou
de manipuler les objets d’une application SQL, requêtes internet) : Objet QueryTable
à partir d’une autre – Export de fichiers internet :
• XML[Extended MarkUp Language ] : langage de description et
– Piloter Word, Access, Outlook avec VBA de représentation des données
ou piloter Word depuis Excel • HTML[Hyper Text MarkUp Language] : langage de
présentation des pages Web.
– Le protocole DDE[Dynamic Data • Méthode saveAs
Exchange] permet l’échange dynamique – Publication de pages Web : il est possible de créer et
de données entre applications Windows de publier (en statique ou dynamique) une page Web à
en mode Client Serveur partir d’un classeur, d’une feuille, d’une plage de
cellule, …
IFT-20403-A Basic et Visual Basic 33 Philippe Pasquier, Octobre 2003 IFT-20403-A Basic et Visual Basic 34 Philippe Pasquier, Octobre 2003

Extensions .Net le nouveau frameWork


• Programmation Windows : • .Net est le nouvel environnement de
– Même si VB et VBA sont des langages très complets développement de Microsoft.
(car très utilisés) qui intègrent un grand nombres de • C’est un environnement intrusif, très complet
fonctions systèmes
qui permet de développer des applications
– Travailler avec les API [Application Programming
mêlant différents langages : C, C++, C#, VB.Net,
Interface] disponibles sous Windows. Les APIs sont
des série de fonctions contenues dans des …
DLL[Dynamic Link Librarie]. • C’est plus puissant, de nombreuses nouvelles
– Exemples : l’API Windows possibilités sont offertes, mais c’est plus
• Kerne32.dll : fonctions système de bas niveau complexe d’approche
• User32.dll : fonctions de gestion windows
• GDI32.dll : fonctions de gestion des périphériques VB6 et VBA seront encore utiles quelques
années car le transfert n’est pas toujours
possible ni souhaitable
IFT-20403-A Basic et Visual Basic 35 Philippe Pasquier, Octobre 2003 IFT-20403-A Basic et Visual Basic 36 Philippe Pasquier, Octobre 2003
Questions

IFT-20403-A Basic et Visual Basic 37 Philippe Pasquier, Octobre 2003