Cours gratuits » Cours informatique » Cours programmation » Cours visual basic » Cours d'introduction au VIsua Basic : les Fonctions et les procédures

Cours d'introduction au VIsua Basic : les Fonctions et les procédures


Télécharger



★★★★★★★★★★3.5 étoiles sur 5 basé sur 1 votes.
Votez ce document:

Cours d'introduction au VIsua Basic : les Fonctions et les procédures

...

L'expérience montre que le fait de fractionner un programme (important) en plusieurs parties facilite bien souvent son développement et sa maintenance. Cette approche, applicable, notamment, dans le cadre de Visual Basic, est appelée " diviser et conquérir ".

5.2 Les modules

Un projet est constitué de modules, tels que des modules feuilles, ou des modules standards (encore appelés modules codes). A la différence d'un module feuille, un module standard ne comporte pas d'IUG, il est uniquemen

t composé de codes de programme.

En dehors de déclarations, les modules sont constitués de procédures, quatre types de procédures existent :

- les procédures événementielles, en anglais event procedures, en réponse à des événements (appui sur une touche du clavier, clic de souris, etc.) ;

- les procédures Visual Basic, en anglais Visual Basic procedures, (Print, VarType, etc.), fournies par Microsoft pour effectuer des tâches courantes (le but cherché étant de réduire le temps de développement) ;

- les procédures conçues par le programmeur (car non fournies par Visual Basic). Elles sont de deux types : Les procédures Sub et les procédures Function.

Un programmeur peut écrire des procédures pour exécuter des tâches spécifiques pouvant être utilisées à différents endroits dans un programme. A des fins de réutilisation éventuelle (en anglais, on parle de software reusability), chaque procédure devra être limitée à la résolution d'une tâche bien définie, il est de coutume que la taille d'une procédure ne dépasse pas une demie page.

L'appel à une procédure se fait en spécifiant le nom de la procédure et en fournissant les informations (on parle de paramètres d'entrée) nécessaires à la procédure " appelée " pour réaliser le travail demandé (restitué au programme " appelant " via des paramètres de sortie).

5.3 Les procédures Sub

Voici un exemple de procédure Sub qui détermine la plus petite valeur parmi trois nombres entiers et l'affiche dans un Label (voir la recopie d'écran dans la figure qui suit) :

‘ Ce programme permet de trouver le minimum parmi trois nombres entiers Option Explicit ‘ Force les variables à être explicitement déclarées

Private Sub cmdPlusPetit_Click()

Dim valeur1 As Long, valeur2 As Long, valeur3 As Long

valeur1 = txtUn.Text

valeur2 = txtDeux.Text

valeur3 = txtTrois.Text

Call Minimum(valeur1, valeur2, valeur3) ‘ ou Minimum valeur1, valeur2, valeur3

End Sub

Private Sub Minimum (min As Long, y As Long, z As Long)

If y < min Then

min = y

End If

If z < min Then

min = z

End If

lblPlusPetit.Caption = "La plus petite valeur est" & min

End Sub

Le corps de la procédure Minimum est placé entre l'entête et End Sub. A chaque appel de cette procédure (cf. instruction Call Minimum(valeur1, valeur2, valeur3), ou de manière équivalente, Minimum valeur1, valeur2, valeur3), le corps de la procédure est immédiatement exécuté, puis l'exécution du programme se poursuit par l'instruction située immédiatement après l'appel de la procédure. Toutes les entêtes des procédures contiennent des parenthèses, éventuellement vides ou contenant une liste de déclarations de variables, appelée liste des paramètres qui comprend des paramètres d'entrée et de sortie. En fait, une procédure peut modifier le contenu des variables passées en paramètre (c'est le cas du paramètre min de la procédure Minimum).

Remarques :

- Le fait que les procédures opèrent sur des données, explique que leurs noms correspondent bien souvent à des verbes. Il serait d'ailleurs préférable de renommer la procédure Minimum par RechercherLeMinimum.

- Par convention, une procédure débute par une lettre majuscule (par exemple : Envoyer).

5.4 Les procédures Function

Les procédures Function partagent les mêmes caractéristiques que les procédures Sub si ce n'est que les procédures Function retournent une valeur, appelée valeur de retour. La plupart des procédures fournies par Visual Basic sont de ce type, par exemple, la fonction VarType (Name) (retourne un entier indiquant le type de la variable Name de type Variant).

Voici un exemple de procédure Function qui multiplie deux valeurs réelles et affiche le résultat dans un Label (voir la recopie d'écran dans la figure qui suit) :

‘ Ce programme permet de multiplier deux nombres

 Option Explicit ‘ Force les variables à être explicitement déclarées

Private Sub cmdMultiplier_Click()

Dim valeur1 As Single, valeur2 As Single

valeur1 = Val(txt1.Text) ‘ La fonction Val convertit une chaîne en un nombre

valeur2 = Val(txt2.Text)

lblMultiplication.Caption = "Le résultat de la multiplication est : " & _

Multiplication(valeur1, valeur2)

End Sub

Private Function Multiplication (x As Single, y As Single) As Single Multiplication = x*y

End Function

La valeur, retournée par la fonction Multiplication, est placée dans le nom de la fonction (on parle de pseudo-variable).

5.5          Appel par valeur, appel par référence

Le passage des paramètres d'une procédure peut se faire par valeur (en anglais by value) ou par référence (en anglais by reference). Dans les deux exemples précédents, chacun des arguments a été passé par référence, ce qui est le mode de passage par défaut. Avec un tel mode de passage, le programme " appelant " donne à la procédure " appelée " la possibilité d'accéder directement aux données de " l'appelant " et donc de modifier ces données. Quand un argument est passé par valeur, une copie de la valeur de l'argument est faite et passée à la procédure " appelée ". Cette dernière peut manipuler cette copie, mais ne peut pas manipuler la donnée d'origine de " l'appelant ". Notons que ce mode de passage amoindrit les performances vis-à-vis du temps d'exécution et de l'espace mémoire, dans le cas d'un grand nombre de paramètres à passer.

L'entête de la fonction suivante déclare deux variables :

Function Calcul (ByVal x As Long, y As Boolean) As Double

La fonction Calcul reçoit x par valeur et y par référence, cette entête peut aussi s'écrire :

Function Calcul (ByVal x As Long, ByRef y As Boolean) As Double

                5.6          Exit Sub et Exit Function

Le fait d'exécuter l'instruction Exit Sub (respectivement Exit Function) dans une procédure Sub (respectivement Function) provoque une sortie immédiate de la procédure. Le contrôle est retourné à " l'appelant " et l'instruction située immédiatement en séquence après l'appel est exécutée.

                5.7          Durée de vie d’une variable

Une variable possède différents attributs : Un nom, un type, une taille et une valeur. A cela s'ajoutent d'autres attributs : Une durée de vie (en anglais storage class), une portée (en anglais scope).

L'attribut durée de vie d'une variable détermine la période durant laquelle elle existe en mémoire, certaines existent brièvement, d'autres sont régulièrement créées et détruites, d'autres existent tout au long de la durée d'exécution du programme.

Les variables locales (i.e., déclarées dans une procédure ou une fonction) non statiques (aussi appelées variables automatiques) sont définies par défaut et sont créées quand la procédure devient active. Ces variables existent (seulement) jusqu'à la fin d'exécution de la procédure.

Le mot clé Static est utilisé pour déclarer des variables locales statiques. De telles variables sont toujours connues seulement dans la procédure dans laquelle elles ont été déclarées (on dit qu'elles ont la même portées), mais à la différence des variables automatiques, les variables statiques conservent leurs valeurs (i.e., celles acquises lors de la dernière sortie de la procédure). Ces variables sont implicitement initialisées à zéro lors du premier appel de la procédure. Ce type de variables permet de ne pas déclarer des variables globales lorsqu'une seule procédure en a besoin.

Exemple :

Private Sub Exemple_Click ()

Static N As Integer ‘ N est une variable entière statique Dim M As Integer ‘ M est une variable entière non statique

N = N + 1 M = M + 1 End Sub

Lors du premier appel de cette procédure, les variables N et M sont égales à 0, aussi lors de la première sortie de cette procédure, les variables N et M sont égales à 1.

Lors du second appel, la variable N est égale à 1 (valeur acquise lors de la précédente sortie) alors que la variable M est toujours égale à 0. Aussi lors de la seconde sortie de cette procédure, la variable N est égale à 2 alors que la variable M est toujours égale à 1.

                5.8          Portée d’une variable, d’une procédure, d’une fonction

L'étendue d'un identificateur (nom d'une variable, ou nom d'une procédure définie par le programmeur) est la région dans laquelle l'identificateur peut-être référencé. Par exemple, une variable déclarée en local dans une procédure peut seulement être référencée dans cette procédure. Les trois portées d'un identificateur sont la portée locale (en anglais local scope), la portée au niveau module (en anglais module scope) et la portée au niveau public (en anglais public scope).

La portée locale s'applique à des variables déclarées dans le corps d'une procédure. Les variables locales peuvent être référencées à partir de l'endroit où elles ont été déclarées jusqu'à la sortie de la procédure (ou de la fonction), i.e., End Sub (ou End Function).

La portée au niveau module, aussi appelée portée au niveau privé (en anglais Private scope), s'applique à des variables déclarées dans la partie " déclaration générale du module " via le mot clé Dim. Ces variables peuvent seulement être référencées dans le module dans lequel elles ont été déclarées.

La portée au niveau public fait référence à des variables déclarées en public dans un module. De telles variables sont accessibles pour tous les modules.

Remarque : Quand une variable est déclarée au niveau module et a le même nom qu'une variable déclarée en local, celle qui est déclarée au niveau module est " cachée " tant que la variable déclarée en local est active. Une alternative à cette source d'erreur consiste à ne pas utiliser des noms de variables dupliquées.

5.9          Les constantes

Visual Basic permet la création de variables dont la valeur ne peut pas changer durant l'exécution d'un programme. Ces variables, particulières, sont appelées des variables constantes1 et sont souvent utilisées pour améliorer la " lisibilité " d'un programme. La déclaration d'une variable constante se fait à l'aide du mot clé Const :

Syntaxe

[Public | Private] Const constname [As type] = expression

Private est utilisé au niveau module pour déclarer les constantes uniquement disponibles dans le module dans lequel la déclaration est effectuée. Ce mot clé n'est pas autorisé dans les procédures.

Public est utilisé au niveau module pour déclarer des constantes disponibles pour toutes les procédures de l'ensemble des modules. Ce mot clé n'est pas autorisé dans les procédures.

Remarque : Utiliser le mot clé Dim avec Const dans une déclaration est une erreur de syntaxe. A titre d'exemple, on peut donner les lignes suivantes :

Const pi As Double = 3.14159     ' il est obligatoire d'assigner une valeur

Const Deux_pi As Double = pi*2 Public Const RG = "Rouge"

En fait, de nombreuses constantes sont reconnues dans Visual Basic, elles sont généralement préfixées par les lettres vb. Par exemple, dans le cadre d'une boîte de dialogue, la constante vbOK (renvoyée par la fonction MsgBox) permet de détecter un appui (un clic) sur le bouton OK.

5.10 Paramètres optionnels

Il est possible de créer des procédures qui acceptent un ou plusieurs paramètres optionnels. Ces paramètres sont spécifiés dans l'entête de la procédure via le mot clé Optional. Considérons, par exemple, la procédure suivante :

Private Sub Ajout (x As Integer, Optional y As Integer = 1) x = x + y

End Sub

L'entête de cette procédure indique que le second argument peut ne pas être demandé lors d'un appel de la procédure Ajout, auquel cas il sera égal à 1. Considérons les appels suivants :

1 oxymoron : Figure de style qui réunit deux mots en apparence condratictoires (silence éloquent).

Call Ajout Call Ajout (a) Call Ajout (a, b)

Le premier appel génère une erreur de syntaxe car un argument au minimum est réclamé. Le second appel est valide, l'argument optionnel n'est pas fourni. Au retour de la procédure, la variable entière a est incrémentée par défaut de 1. Le troisième appel est aussi valide, la variable entière b est fournie en tant qu'argument optionnel. Au retour de la procédure, la variable entière a est incrémentée par défaut de b.

5.11 Fonctions mathématiques de Visual Basic

Certaines fonctions de calcul mathématique sont disponibles :

Fonction              Description        Exemple

Abs (x) Valeur absolue de x       Abs (-2) est égal à 2, Abs (3) est égal à 3

Atn (x)  Arc tangente (en radians) de x Atn (1) est égal à pi/4

Cos (x)  Cosinus (en radians) de x            Cos (0) est égal à 1

Exp (x)  Fonction exponentielle ë            Exp (1.0) est égal à 2.71828

Int (x)   Retourne le plus grand entier inférieur ou égal à x         Int (-5.3) est égal à — 6 Int (0.893) est égal à 0 Int (76.45) est égal à 76

Fix (x)   Partie entière de x         Fix (-5.3) est égal à —5 Fix (0.893) est égal à 0 Fix (76.45) est égal à 76

Log (x)  Logarithme népérien de x          Log (2.718282) est égal à 1.0

Round (x, y)       Retourne une valeur approchée de x avec y décimales (si y est omis, x est retourné comme étant un entier)  Round (4.84) est égal à 4

Round (5.73839, 3) est égal à 5.738

Sgn (x)  Signe de x           Sgn (-19) est égal à —1 Sgn (0) est égal à 0 Sgn (3.4) est égal à 1

Sin (x)   Sinus (en radians) de x Sin (0) est égal à 0

Sqr (x)  Racine carré de x             Sqr (9.0) est égal à 3

Tan (x)  Tangente (en radians) de x        Tan (0) est égal à 0

5.12 Module standard

Un module standard (ou module code) n'a pas d'IUG (au contraire des modules feuilles, en anglais form modules), il contient uniquement du code. Les procédures que le programmeur souhaite utiliser dans de nombreux projets (on parle de briques logicielles) sont souvent placées dans des modules standards. Comme pour un module feuille, un module code admet une partie " déclaration générale ".

Par défaut, les variables d'un module et les procédures événementielles sont privées (Private) au module dans lesquelles elles ont été définies : Une variable, ou une procédure, privée peut seulement être utilisée dans le module où elle a été déclarée. Si le programmeur souhaite permettre à un autre module l'utilisation d'une variable, ou procédure, le mot clé Public doit être utilisé dans la déclaration : Les variables, ou procédures, publiques sont accessibles dans chacun des modules du projet.

Remarques :

- Les modules standards sont tous placés dans un classeur nommé Modules, alors que les feuilles sont placées dans un classeur nommé Feuilles (cf. figure suivante).

- Les noms des fichiers de modules standards se terminent par .bas.

- Visual Basic ne propose pas de module standard par défaut dans un projet, il faut l'ajouter manuellement (voir le menu Projet | Ajouter un module).

- Un projet peut avoir plusieurs modules codes (aussi bien que plusieurs modules feuilles).

A titre d'exemple, le programme suivant contient un module feuille et un module code. Le fait de cliquer sur le bouton Ecrire de la feuille (voir la saisie d'écran dans la figure qui suit) appelle la procédure ModuleEcrire, déclarée en public et située dans un module standard.

.frm

‘ Utilisation d’un module code Option explicit

Private Sub cmdEcrire_Click ()

‘ La procédure ModuleEcrire est définie dans le module code (modModule.bas) Call ModuleEcrire

End Sub

.bas

‘ modModule.bas Option Explicit

Public Sub ModuleEcrire ()

frmFeuille.Print "ModuleEcrire" End Sub


627