Vous êtes sur la page 1sur 41

Université de Monastir

Ecole d’Ingénieurs de Monastir

Chapitre I
Introduction à la programmation événementielle
avec le VB.net

1. Généralités :
La programmation avec le langage VB.net est une programmation très semblable, dans son
principe, à la programmation avec d’autres langages. On obéit toujours au principe de l’analyse
puis codage.
Lors de la programmation d’un logiciel en VB, les étapes suivantes sont très importantes à
suivre :
o Spécification des besoins des futurs utilisateurs. (compréhension du problème à résoudre)
o Spécifications fonctionnelles : comment satisfaire aux besoins.
o Conception générale : division du logiciel en programmes.
o Conception détaillée : algorithme le plus adapté pour chaque programme.
o Assemblage des différents programmes.
o Codage à l'aide du langage le plus adapté.
o Validation et qualification.

La conception est beaucoup plus importante que le codage qui peut être sous-traité dans le cas de
gros logiciels.

2. Principes :
La programmation avec le langage VB.net se base sur 2 choses : la notion de l’orienté objets et
sur la programmation événementielle, pour exploiter via certains de ces objets, l'interface
graphique de Windows.
.
a. Orienté objets
On manipule des objets: ensembles groupés de variables et de méthodes.
• Un objet regroupe un ensemble de variables qui peuvent être de différents types. Et dans
ce cas, on ne parlera pas des "variables" d'un objet, ni des ses "caractéristiques", mais de
ses propriétés (ou encore, de ses attributs).
• Tous les objets possédant les mêmes caractéristiques et avec lesquels on peut faire les
même choses, forment un groupe qu'on appelle une classe.
• Les langages objet, permettent, en plus des traditionnels variables, tableaux et structures,
de gérer et de manipuler des objets (donc des classes). C'est-à-dire ils permettent
notamment :de créer des classes, en définissant leurs caractéristiques et leurs actions,
de fabriquer des objets à partir de ces classes, de manipuler les caractéristiques
individuelles de chacun de ces objets, et de leur faire accomplir les actions dont leur
classe est capable.
Exemple :
On peut déclarer plusieurs instances d’une même classe
Fichier PDF, DOCX, MP3
Voiture Clio, Carera, Fiesta
Etudiant A1,A2,A3

1
Université de Monastir
Ecole d’Ingénieurs de Monastir

b. La programmation événementielle
La programmation événementielle est fondée sur les événements, ses réactions aux
événements peuvent se produire soit par le système, soit par des événements provoqués par
l’utilisateur.

La programmation événementielle s’oppose à la programmation séquentielle, car cette


dernière est une exécution d’une suite d’instructions dans un ordre programmé .

3. Caractéristiques du langage Visual Basic :


Ci-dessous on site les caractéristiques les plus importantes du langage VB :
o Le langage VB puise ses sources du langage BASIC (Beginner's All purpose Symbolic
Instruction Code)
o Programmation par objets (briques logicielles)
o Programmation graphique (fenêtres, icônes, menus, souris…)
o Programmation événementielle (sollicitations : souris, clavier, autre événement…)
o Réutilisable (modules de code BASIC).

Le VB est dit langage de programmation évènementiel car l’exécution de n’importe quelle


action se fait suite à l’occurrence d’un évènement, contrairement à la programmation séquentielle
(langage C, Pascal etc.…).

Exemple : l’événement click avec la souris sur le bouton OK engendre la validation d’un choix.

4. Structure générale
La structure générale du logiciel Visual Basic .net est représentée dans la figure suivante :
Comme on le voit sur la première figure, l’interface VB.net contient 4 zones :
 A gauche : la barre des outils contenant les composants ou contrôles servant à peupler la
feuille (FORM) à programmer.
 En haut : barre des menus donnant accès à différentes fonctionnalités du logiciel.
 A droite : cette partie est constituée de 3 zones :
o Fenêtre explorateur des projets : ajout / suppression de feuille et/ou de modules.
o Fenêtre propriétés : contenant les propriétés du composant sélectionné.
o Fenêtre représentation des feuilles : sert à positionner les feuilles à l’exécution.
 Au milieu : c’est la feuille à programmer (FORM), cette feuille représente l’interface de
l’application à développer.
En visual Basic :
 Les objets manipulés sont appelés des contrôles (bouton de commande, boîte de dialogue,
zone de texte, zone d'image, etc.
 L'interface utilisateur créée est fenêtrée. Une fenêtre est appelée une feuille (Form). Une
feuille est elle-même un contrôle. Au lancement, la feuille qui apparaît est dite feuille de
démarrage.

2
Université de Monastir
Ecole d’Ingénieurs de Monastir

 Chaque contrôle peut réagir à des événements qui lancent des suites d'instructions codées
en BASIC.
 Des modules généraux de code BASIC peuvent porter sur tout le programme. Ces
modules sont réutilisables.

Explorateur
de solution

Formulaire
(Base de Properties
l’application) window (F4)

Toolbox :Boite à
outils 18

(Ctrl+Alt+x)

5. Quelques bonnes habitudes à suivre :


Dès qu'un objet est créé sur une feuille, lui donner un nom significatif (propriété Name)

Conseil N° 1 :
 N'utiliser que des lettres et des chiffres (exclure . - / _ "espace" etc.)
 Mettre en Majuscules les initiales des différents mots
 Préfixer selon la nomenclature suivante :
Une Form est préfixée par frm
Un Button est préfixé par bt
Un Label est préfixé par lbl
Une Image est préfixée par img
Une TextBox est préfixée par txt etc.

Exemples : lblAffichage, cmdEntréeDesDonnées, imgFondEcran, frmFeuilleAccueil etc.

6. Contrôles et propriétés

3
Université de Monastir
Ecole d’Ingénieurs de Monastir

Un objet (contrôle) peut posséder un grand nombre de propriétés par exemple sur sa forme, sa
couleur, sa position dans la feuille, sa visibilité, etc.
La plus importante est la propriété Name qui donne un nom au contrôle. Ce nom permet de
référencer le contrôle.

Syntaxiquement le nom d'un objet est séparé de la propriété par un point


objet . propriété = valeur
Exemple 1 : Command1.backcolor = Blue
On attribue à la propriété couleur de fond du contrôle command1 la valeur blue
Exemple 2 : Label1.Text = "Bonjour"
On attribue à la propriété caption c.a.d texte du label du contrôle label1, la valeur
"Bonjour"
Exemple 3 : Image.Visible = True
On attribue à la propriété visible du contrôle image, la valeur True. L’image
devient visible)
Exemple 4 : cmdQuitter.Enabled = False
On attribue à la propriété enabled (actif) du contrôle cmdQuitter la valeur false. Le
bouton devient inactif.

7. Contrôles et événements
Le syntaxe d’une procédure générale est :

Sub Nomprocedure()
Instruction 1
Instruction 2
……………
End Sub

Exemple :
Sub cmdQuitter_Click()
Unload Me
End
End Sub

4
Université de Monastir
Ecole d’Ingénieurs de Monastir

On trouve généralement cette procédure sous la forme suivante :


Private Sub NomContrôle_Evénement()
Instruction 1
Instruction 2
……………
End Sub

On remarque la présence du mot Private, ceci est dû au fait que cette procédure est privée à
une FORM donnée.

Comment on fait la liaison entre procédure et un événement ?


Le code d'un événement associé à un contrôle forme une procédure événementielle dont la
syntaxe générale est :

Public|Private 
 Sub 
nom_du_programme (paramètres) Handles évènements


‘séquences
d’instructions
End
 Sub
Exemple :
Pour que cette procédure s'exécute à chaque fois que l'on clique sur le bouton nommé
Résultat, il suffira que la procédure se présente ainsi :

Private Sub Calcul(ByVal sender As System.Object, ByVal e As System.EventArgs)


Handles Résultat.Click

instructions
End Sub

Exemple d’événements : Activate, Change, Load, KeyPress,…

Remarque :
Les objets réagissent à divers événements : Click, MouseUp, MouseDown, Change etc.
Pour implanter le code (suite d'instructions produisant des actions pré-définies) lié à un
événement il suffit d'opérer un double-clic sur l'objet qui déclenche cet événement.

8. Contrôles et Méthodes :
En plus des propriétés, un objet peut aussi accomplir des actions à travers les
méthodes.

5
Université de Monastir
Ecole d’Ingénieurs de Monastir

Une méthode permet à un objet de réaliser une tache particulière. Move et SetFocus sont des
exemples de méthodes.

9. La boite à outils (toolbox)


Elle contient des contrôles (controls) qui sont des classes dotées d’une interface graphiques et
des composants (components) qui eux en sont dénués et qui ne seront donc pas visible des
tilisateurs.
Nous nous intéresserons uniquement à la première famille d’objets pour le moment, les
contrôles visuels.

10. Exécution pour validation

Le mode création permet de construire le projet (ou application).


Le mode exécution permet de vérifier si les fonctionnalités prévues sont convenables.
Pour lancer l'exécution : soit le bouton soit menu Exécution - Exécuter (F5).
Pour arrêter l'exécution : soit le bouton soit menu Exécution - Fin.

N.B.
Ne pas oublier d'arrêter un programme sinon toute correction est impossible (notamment pour
un programme qui boucle…).

6
Université de Monastir
Ecole d’Ingénieurs de Monastir

Chapitre 2 Syntaxe de base

1. Notion de variable
Elles sont nécessaires pour stocker (conserver) une valeur dynamique et réutilisable.
C'est en fait une simple zone mémoire qui porte un nom choisi par le programmeur pour
faciliter sa programmation. Le nom de la variable correspond à une adresse mémoire.
Le langage Basic utilise plusieurs types de données dont les plus utilisés sont le type String
(chaîne de caractères), le type Integer (entier relatif) et le type Single (décimal).
Noms de variables:
1-Pas de longueur maximale
2-Commence par un caractère: 12xy
3-Pas d’espace: date_de_naissance date de naissance
4-Pas de sensibilité à la casse (toto=Toto=ToTO)

a. Déclarations des variables :


En VB la déclaration des variables n’est pas obligatoire tant que l’option Explicit n’est pas
activée: Option Explicit On
La déclaration des variables peut se faire de deux façons implicite et explicite.
Déclarations implicites :
Avec Visual Basic, Il n'est pas nécessaire de déclarer une variable avant de l'utiliser.
Exemple : Function SafeSqr(num)
TempVal = Abs(num)
SafeSqr = Sqr(TempVal)
End Function

Visual Basic crée automatiquement une variable qui porte ce nom. Il est donc possible de
l'utiliser comme elle était déclarée explicitement. Bien que la déclaration implicite de
variables soit pratique, elle peut engendrer des erreurs difficiles à identifier dans le code si un
nom de variable est mal orthographié. Supposons, par exemple, la fonction suivante :

Function racine(num)
TempVal = Abs(num)
racine = Sqr(TemVal)

7
Université de Monastir
Ecole d’Ingénieurs de Monastir

End Function
Ici, la variable TempVal ayant été mal orthographiée à la dernière ligne, cette fonction aura
toujours zéro pour résultat. Quand Visual Basic rencontre un nouveau nom, il ne peut
savoir si vous avez réellement déclaré une nouvelle variable implicite ou si vous avez mal
orthographié un nom de variable existant. Il crée donc une nouvelle variable portant ce
nom.
Pour remédier à ce problème, on peut forcer VB à vérifier la déclaration de toutes les
variables par : Menu Outils - Options - onglet Editeur - choisir : "Déclaration des variables
obligatoire".

Déclarations explicites :
La déclaration d’une variable d’une façon explicite fait appel à la commande Dim.
Syntaxe :
Dim <NomVariable> As <Type>
Pour la lisibilité du code on peut les commenter après une apostrophe ( ‘ )
Exemples :
Dim Taux As Single „ Taux de la TVA
Dim Réponse As String „ Mot proposé par le joueur
Si l’on veut une programmation cohérente il faut les déclarer avec leurs types.
Pour éviter tout problème il est préférable d’initialiser les variables déclarées.
Exemples : Compteur = 0
Taux = 20,6
b. Déclaration des constantes

Une constante est une valeur numérique ou valeur de chaîne invariable.

Exemples : Const x As Integer = 16


Const F As String = "Bonjour"

c. Les types

8
Université de Monastir
Ecole d’Ingénieurs de Monastir

Syntaxe de base: Les types

Type Plage des valeurs Taille conversion

Short -32 768 à 32 767 2 octets CShort

Integer - 2 147 483 648 à 2 147 483 647 4 octets CInt

-9 223 372 036 854 775 808 à


Long 8 octets CLng
-9 223 372 036 854 775 807 à

-3,4028235E+38 à -1,401298E-45 pour les valeurs négatives


Single 4 octets CSng
1,401298E-45 à 3,4028235E+38 pour les valeurs positives

-1,7976931348623157E+308 à -4,94065645841246544 E-324


pour les valeurs négatives CDbl
Double 8 octets
-4,94065645841246544E-324 à -1,7976931348623157E+308
pour les valeurs positives
36

+/- 79 228 162 514 264 337 593 543 950 335 sans chiffre
décimal

Syntaxe de base: Les types


Byte Entiers non-signés de 0 à 255 1 octets CByte

Boolean True / False 2 octets CBool

10 octets + (2 * nbr.
String de 0 à environ 230 caractères caractères de la CStr
chaîne)

char 0 à 65 535 (non signés). 2 octets CChar

Date 01/01/1 à 31/12/9999 8 octets CDate

4 octets
Object référence à un objet -
+ objet

37

d. Portée d'une variable

9
Université de Monastir
Ecole d’Ingénieurs de Monastir

Si une variable est déclarée au début de la procédure qui la manipule (Dim ou Private) elle
n’est alors valide que pour cette procédure. L'existence et la valeur de la variable disparaissent
avec l'instruction End Sub.
Toute référence à cette variable en dehors de cette procédure provoquera une erreur de
compilation.
Si une variable est déclarée dans la section des déclarations d’un module elle est valide dans
toutes les procédures du module.
Une variable peut aussi être déclarée Public ou Global et sera alors valide pour toute
l’application.
Exemple :
Global MotInitial As String „ premier mot à traiter
e. les Opérateurs
1. Opérateurs arithmétiques
Opérateurs numérique : + - * /
Opérateurs booléens : And Or Xor Not
Opérateur caractère : & (concaténation)
\ : Division entière
^ : puissance
Mod : reste de la division entière
2. Opérateurs
a. Opérateurs de concaténation
L'opérateur & permet de concaténer (réunir) deux chaînes. L'opérateur + peut être aussi utilisé
pour concaténer deux chaines de caractères. (pas pour 1e chaine et une autre chose, entier par
exemple)
Exemple : MsgBox "le périmètre est de " & Circonference & "mètres"
Notez que la variable concaténée « Circonference » est une valeur numérique et qu'il y a une
conversion implicite vers le type String.
b. Opérateurs logiques : And, Or, Xor, Not
c. Opérateur test d’égalité et affectation : =
3. Les tableaux de données
Les tableaux sont comme les variables soit locales, soit globales et obéissent aux mêmes
règles. Dans VB, il existe deux types de tableaux : les tableaux de taille fixe et les tableaux
dynamiques.
Déclaration d’un tableau de taille fixe

10
Université de Monastir
Ecole d’Ingénieurs de Monastir

 Tableau à une seule dimension


Syntaxe : Dim nomtableau(dimension) As type
Exemple : Dim table(4) As integer
On déclare un tableau nommé table de 5 éléments : de 0-> 4
On peut spécifier les limites inférieures et supérieures d’un tableau
Syntaxe : Dim nomtable (nbr_ligne-1 to nbr_col-1) As type
Exemple : Dim table(1 to 5) As integer „table commence de l‟indice 1 à 5
 Tableau à n dimensions
Syntaxe : Dim nomtableau(dimension1,dimension2, , dimension n) As type
Déclaration d’un tableau dynamique
Quand la taille exacte d’un tableau n’est pas connue, il est possible de créer des tableaux sans
spécifier leurs dimensions. IL s’agit alors de tableaux dynamiques
Syntaxe : Dim nomtableau() As type
Redim nomtableau(x)
Exemple : dim tab() as integer
On peut dimensionner un tableau dynamique déclaré en utilisant l’instruction Redim. Elle
n’est utilisée que dans le corps de la procédure.
Exemple:
Dim Dynarray() As Integer „on déclare un tableau dynamique Dynarray
Sub Calcul()
Redim Dynarray(5) „maintenant Dynarray possède 5 éléments
End Sub

11
Université de Monastir
Ecole d’Ingénieurs de Monastir

Chapitre 3 Procédures et Fonctions en VB. net

1. Introduction :
Comme dans le cas du langage Pascal, VB .NET permet l’utilisation des procédures et des
fonctions avec ou sans paramètres. Rappelez vous que la grande différence entre la procédure
et la fonction est que cette dernière retourne une valeur lorsqu’elle est appelée.
Lors de l’appel de la procédure, un paramètre peut être transmis soit par valeur, soit par
référence (variable).
2. Procédure (Transmission par valeur : ByVal)
Pour transmettre un paramètre par valeur, celui-ci doit être obligatoirement précédé par le mot
réservé ByVal. Sinon, il est considéré de passer par référence.
Syntaxe
Private Sub NomProcédure( ByVal argument As Type, … )
Instruction1
Instruction2

End Sub
Exemple
Private Sub Affectation( ByVal valeur1,valeur2 As integer)
Dim Chaîne As String
Chaîne = "La somme de " & valeur1 & " et " & valeur2 & " = "
valeur1 = valeur1 + valeur2
Chaîne = Chaîne & valeur1
MsgBox (Chaîne)
End Sub
L’appel de la procédure se fait soit en inscrivant call suivi du nom de la procédure, et des
paramètres à lui transmettre, soit en écrivant uniquement le nom de la procédure, suivi des
paramètres à lui transmettre.
Dim X As integer
Dim Y As integer
Call Affectation (X, Y) ‘ avec les parenthèses
MsgBox (" Et X = " & X & " n'a pas changé ")
3. Procédure (Transmission par référence : ByRef)

12
Université de Monastir
Ecole d’Ingénieurs de Monastir

Si ByVal n’est pas précisé ou si le paramètre est précédé par le mot réservé ByRef, la variable
est transmise par référence (c'est-à-dire transmise en tant que variable). Ainsi, toute
modification de la variable locale correspondante dans la procédure se répercute sur la
variable utilisée lors de l’appel. VB suppose que la transmission se fait par référence si le mot
réservé ByVal est omis.
Exemple
Private Sub Transvase ( valeur1 As Integer, valeur2 As Integer )
Dim variable As Integer
variable = valeur1
valeur1 = valeur2
valeur2 = variable
End Sub
L’appel suivant transvase le contenu de X dans Y et inversement.
Exemple
Dim X As Integer, Y As Integer
X = 100
Y = 200
MsgBox (" X = " & X & " et Y = " & Y)
Transvase(X, Y)
MsgBox (" Alors que maintenant X = " & X & " et Y = "& Y &)

Il est possible de quitter prématurément une procédure en inscrivant simplement l’instruction


Exit Sub.

4. Procédures événementielles

Dans Visual Basic, lorsqu'un objet reconnaît qu'un événement s'est produit, il appelle
automatiquement la procédure d'événement dont le nom correspond à l'événement. Comme le
nom associe les objets et le code, on dit que les procédures d'événement sont attachées aux
feuilles et aux contrôles.

Syntaxe :

Private Sub nomprocedure (ByVal sender As System.Object, ByVal e As System.EventArgs)


Handles Button1.Click

13
Université de Monastir
Ecole d’Ingénieurs de Monastir

Remarque :

 Bien qu’on peut construire les procédures d’évènement de toutes pièces (écriture
directe de leurs noms, définition des paramètres…) il est préférable d'utiliser les
procédures de code fournies par Visual Basic, car elles incluent automatiquement le
nom correct des procédures.

 Il est aussi conseillé de définir la propriété Name des contrôles avant de commencer à
écrire les procédures d'événement qui leur sont associées. Si on modifiez le nom d'un
contrôle après lui avoir associé une procédure, on devra également modifier le nom de
la procédure afin qu'elle corresponde au nouveau nom du contrôle.

 Principaux Événements

a- Click

Se produit lorsque l’utilisateur appuie puis relâche le bouton gauche de la souris (ou entrée si
le contrôle a le focus)

Private Sub Button1_Click (ByVal sender As System.Object, ByVal e As


System.EventArgs) Handles Button1.Click

b- DblClick

Se produit lorsque l’utilisateur réalise un double click

Private Sub Label1_DoubleClick(ByVal sender As Object, ByVal e As


System.EventArgs) Handles Label1.DoubleClick

c- GotFocus

Se produit lorsqu’un contrôle reçoit le focus (click ou tabulation ou par code :


Objet.SetFocus)

Private Sub Objet_GotFocus( [Index As Integer])

d-KeyPress >>>

Se produit lorsque l’utilisateur appuie et relâche une touche du clavier

Private Sub Objet_KeyPress( [Index As Integer], KeyAscii As Integer)

Codes : 0 : 48 | 9 : 57 | A : 65 | Z : 90 | a : 97 | z : 122 | entrer : 13 … >>>

e- Change

14
Université de Monastir
Ecole d’Ingénieurs de Monastir

Se produit lorsque le contenu d’un contrôle change

Private Sub Objet_Change( [Index as Integer])

5. Fonction
Lors de la déclaration d'une fonction, la valeur qui doit être retournée par celle-ci doit être
affectée au nom de la fonction. La déclaration de la fonction se termine par les mots réservés
”End function”.
Syntaxe
Private function NomFonction( Argument As Type, … ) As Type
Instruction1
Instruction2

NomFonction = RésultatDeLaFonction
End function
Exemple
Private function Somme( valeur1 As Integer, valeur2 As Integer ) As integer
Somme = Valeur1 + valeur2
End function
L’appel suivant retourne la somme de X et Y et affecte le résultat à la variable Z.
Exemple
Dim X As Integer, Y As Integer, Z As Integer
X = 10
Y = 20
Z = somme(X, Y)

Il est possible de quitter prématurément une fonction en inscrivant simplement l’instruction


Exit Function.

5. Transmission d’un tableau comme argument d’une procédure ou d’une fonction


Pour transmettre un tableau comme argument d’une fonction ou d’une procédure, il suffit de
déclarer (à l’intérieur des parenthèses) une variable (le nom local du tableau) sans type, ni
dimension. Lors de l’appel de la fonction ou de la procédure, VB donne à cette variable le
type et la taille du tableau envoyé. Comme tout variable, un tableau peut être envoyé par
valeur ou par référence.

15
Université de Monastir
Ecole d’Ingénieurs de Monastir

Exemple
Private Sub Init(vec)
Dim i As Integer
For i = 1 To 10
vec(i) = 0
Next
End Sub
L’appel de la procédure avec un vecteur comme argument se fait comme pour toute variable.
Exemple
Dim vecteur(10) As Integer
Call Init(vecteur)
6. Portée des variables, procédures et fonctions
Une application VB peut être composée d’un ou de plusieurs formulaires et d’un ou de
plusieurs modules. Dans chaque module ou formulaire, des variables, des procédures et/ou
des fonctions peuvent être déclarées. Dans chaque procédure et fonction, des variables locales
peuvent être déclarées.
Une fonction ou une procédure peut être déclarée soit Privée (Private), soit Publique (Public).
Le sens de Privé ou Public se comprend par rapport au formulaire ou au module dans
lesquelles elles sont déclarées.
Se pose alors le problème de la portée des variables, des fonctions et des procédures.
Si une variable est déclarée au début de la procédure (fonction) qui la manipule (Dim ou
Private), elle n’est alors valide que pour cette procédure (fonction). L'existence et la valeur de
la variable disparaissent avec l'instruction End Sub (End Function). Toute référence à cette
variable en dehors de cette procédure (fonction) provoquera une erreur de compilation. Si une
variable est déclarée dans la section des déclarations d’un module (formulaire), elle est valide
dans toutes les procédures (fonctions) du module (formulaire).
Une variable peut aussi être déclarée Public ou Global et sera alors valide pour toute
l’application.
Exemple :
Global MotInitial As String ‘ premier mot à traiter
7. Quelques fonctions globales
Les deux tableaux suivant résument quelques fonctions mathématiques et quelques fonctions
pour la manipulation des chaînes de caractères.

16
Université de Monastir
Ecole d’Ingénieurs de Monastir

8. Interruption de séquences
Pour interrompre l’exécution d’une séquence d’instructions (dans une fonction, procédure ou
boucle For), on utilise l’instruction Exit. Le tableau suivant résume son utilisation.

Dans Visual Basic, il est important de faire la distinction entre les deux types de procédures
Sub, à savoir les procédures générales et les procédures d'événement.

17
Université de Monastir
Ecole d’Ingénieurs de Monastir
Chapitre 4 Les structures conditionnelles

1. Nécessité des structures conditionnelles :


Les structures conditionnelles servent à tester des valeurs et à orienter le programme selon
ces valeurs ou à faire des choix que le programme doit prendre en compte. Plusieurs
structures décisionnelles permettent ces traitements, Il s'agit d'utiliser la structure la plus
adaptée au problème à résoudre.
2. Structure If … Then … Else …
Cette structure décisionnelle revêt 2 formes :
a. Sur une seule ligne :
Syntaxe :
If condition Then instruction1 [Else instruction2]
Où : Condition est une expression dont la valeur est booléenne (True ou False).
Si cette expression est une valeur numérique, la valeur 0 (zéro) correspond à False et toute
autre valeur correspond à True.
Exemple :
If MotDePasse <> "Admin" Then msgbox “mot de passe
correct”

b. Sous forme de bloc :


Syntaxe :
If condition Then
[instructions]
Else
[instructions]
End If
Exemple :
If NombreProposé > NombreATrouver Then
MsgBox("Votre nombre est trop grand !")
Essai = Essai + 1
Else
MsgBox("Votre nombre est trop petit !")
Essai = Essai + 1

18
Université de Monastir
Ecole d’Ingénieurs de Monastir

End If

3. Insuffisance de cette structure


Cette structure n'est vraiment valable que pour une alternative (2 possibilités).
Pour traiter 3 possibilités il faudra imbriquer un autre If après l'instruction Else.
Exemple :
If NombreProposé > NombreATrouver Then
MsgBox("Votre nombre est trop grand !")
Else
If NombreProposé < NombreATrouver Then
MsgBox("Votre nombre est trop petit !")
Else
MsgBox("Gagné !")
End If
End If

Au-delà de 3 possibilités on a besoin d'une autre structure qui peut gérer plusieurs cas.
4. Structure Select … Case …
C’est une extension du If … Then … Else … Elle permet une programmation plus claire en
évitant une trop grande imbrication de If successifs.
Syntaxe :
Select Case Expression
Case ListeValeurs1
[Instructions1]
Case ListeValeurs2
[Instructions2]
[Case Else
Instructions]
End Select
ListeValeurs peut être :
- une suite de valeurs : 1, 3, 5, 7, 9
- une fourchette : 0 To 9
- une plage : Is >= 10

19
Université de Monastir
Ecole d’Ingénieurs de Monastir

Une seule Expression (ou une simple variable) est testée au début puis est comparée avec les
listes de valeurs. A la première concordance les instructions correspondantes sont exécutées
puis le programme sort de la structure. Si aucune concordance n’est trouvée les instructions
placées après le Else sont exécutées.
Exemple :
Select Case CodeASCIICaractère
Case 65, 69, 73, 79, 85
MsgBox(" C‟est une voyelle ")
Case 66 To 90
MsgBox(" C‟est une consonne ")
Case Else
MsgBox(" Ce n‟est pas une lettre ")
End Select

5. Structure Iif
C'est exactement la fonction IF d'EXCEL.
Syntaxe :
IIf (Condition, ValeurSiVrai, ValeurSiFaux)
Exemple :
Dim Note As Single
Dim Réponse As String
Note = InputBox (" Tapez votre note ")
Réponse = IIf (Note >= 10, " Admis ", " Ajourné ")
MsgBox (Réponse)
Il existe d’autres outils décisionnels (Switch, With, Choose ...) qui ne sont pas nécessaires
pour un module de niveau 1.

20
Université de Monastir
Tableau récapitulatif
Ecole d’Ingénieurs de Monastir
des structures conditionnelles

Si Condition IF Condition
Alors THEN
Traitement 1 Traitement 1
Finsi ENDIF
Si Condition IF Condition
Alors THEN
Traitement 1 Traitement 1
Sinon ELSE
Traitement 2 Traitement 2
Finsi ENDIF
Si Condition 1 IF Condition 1
Alors THEN
Traitement 1 Traitement 1
Sinon ELSEIF Condition 2
Si Condition 2 THEN
Alors Traitement 2
Traitement 2 ELSE
Sinon Traitement 3
Traitement 3 ENDIF
Finsi
Finsi
Si Condition 1 IF Condition 1
Alors THEN
Traitement 1 Traitement 1
Sinon ELSE
Si Condition 2 IF Condition 2
Alors THEN
Traitement 2 Traitement 2
Sinon ELSE
Traitement 3 Traitement 3
Finsi ENDIF
Finsi ENDIF

Selon Expression Faire Select Case Expression


Cas Valeur : Case Valeur :
Traitement 1 Traitement 1
Case Is OP Val :
Cas Condition : Traitement 2
Case Val1 To Valn
Traitement 2 Traitement n
Cas Intervalle : …
Traitement 3 Case Else
… Traitement 0
Autre : Traitement 0 End Select
Fin Selon

Chapitre 5 Les procédures en Visual Basic

21
Université de Monastir
Ecole d’Ingénieurs de Monastir

9. Introduction :
Nous pouvons simplifier la programmation des tâches en divisant les programmes en
plusieurs éléments logiques de plus petite taille. C'est en combinant ces éléments, appelés
procédures, qu’on peut améliorer et élargir les possibilités offertes par Visual Basic.
L'utilisation de procédures lors de la programmation présente deux avantages :
Grâce à elles, nous pouvons diviser les programmes en différentes unités logiques discrètes,
qu’on pourrait déboguer individuellement, plus facilement que la totalité d'un programme
entier dépourvu de procédures.
Les procédures utilisées dans un programme peuvent être reprises dans d'autres programmes,
moyennant peu ou pas de modifications.
Visual Basic comporte plusieurs types de procédures :
 Les procédures Sub ne renvoient pas de valeur.
 Les procédures Function renvoient une valeur.
 Les procédures Property peuvent renvoyer ou affecter des valeurs, et définir des
références à des objets.
1. Procédures Sub :
Ces procédures ne renvoient pas de valeurs à la procédure appelante. Une procédure Sub est
un bloc de code qui est exécuté en réponse à un événement. La syntaxe d'une procédure Sub
est la suivante :
[Private|Public][Static] Sub Nom_proc (arguments)
Instructions
End Sub
 L’appel de la procédure se fait soit en inscrivant call suivi du nom de la procédure, et
des paramètres à lui transmettre, soit en écrivant uniquement le nom de la procédure,
suivi des paramètres à lui transmettre.
 Chaque fois que la procédure est appelée, les statements comprises entre Sub et End
Sub sont exécutées.
 Pour transmettre un paramètre par valeur, celui-ci doit être obligatoirement précédé
par le mot réservé ByVal. Sinon, il est considéré de passer par référence.
 Par défaut, les procédures Sub sont des procédures Public dans tous les modules, ce
qui signifie qu'elles peuvent être appelées à partir de n'importe quel endroit de
l'application.

22
Université de Monastir
Ecole d’Ingénieurs de Monastir

 Les arguments d'une procédure ressemblent à une déclaration de variable, déclarant


des valeurs qui sont passées à partir de la procédure appelante.

Dans Visual Basic, il est important de faire la distinction entre les deux types de procédures
Sub, à savoir les procédures générales et les procédures d'événement.

a) Procédures générales

Une procédure générale indique à l'application la façon de mener à bien une tâche
particulière. Une fois qu'une procédure générale est définie, elle doit être invoquée
spécifiquement par l'application. Une procédure d'événement, au contraire, reste inactive
jusqu'au moment où elle est appelée pour réagir à des événements provoqués par
l'utilisateur ou déclenchés par le système.

Une des raisons de l'utilisation des procédures générales réside dans le fait que différentes
procédures d'événement peuvent requérir les mêmes actions. La meilleure stratégie de
programmation consiste alors à placer les instructions communes dans une procédure distincte
(une procédure générale), elle-même appelée par les procédures d'événement. Cela évitera de
dupliquer le code et simplifiera la gestion de l’application.

Exemple 1 :

Dim resultat As Integer

Sub Proc_Sub_Gen()
LblResult.text = resultat
End Sub

Private Sub CmdActiveProc1_Click()


resultat = Val(Text1.Text) +
Val(Text2.Text)
Proc_Sub_Gen
End Sub
Private Sub CmdActiveProc2_Click()
resultat = Val(Text1.Text) - Val(Text2.Text)
Proc_Sub_Gen
End Sub

Exemple 2 :
Private Sub Affectation( ByVal valeur1,valeur2 As integer)
Dim Chaîne As String

23
Université de Monastir
Ecole d’Ingénieurs de Monastir

Chaîne = "La somme de " & valeur1 & " et " & valeur2 & " = "
valeur1 = valeur1 + valeur2
Chaîne = Chaîne & valeur1
MsgBox (Chaîne)
End Sub
Remarques :
Si ByVal n’est pas précisé ou si le paramètre est précédé par le mot réservé ByRef, la variable
est transmise par référence (c'est-à-dire transmise en tant que variable). Ainsi, toute
modification de la variable locale correspondante dans la procédure se répercute sur la
variable utilisée lors de l’appel. VB suppose que la transmission se fait par référence si le mot
réservé ByVal est omis.

b) Procédures d'événement

Dans Visual Basic, lorsqu'un objet reconnaît qu'un événement s'est produit, il appelle
automatiquement la procédure d'événement dont le nom correspond à l'événement. Comme le
nom associe les objets et le code, on dit que les procédures d'événement sont attachées aux
feuilles et aux contrôles.

 La procédure d'événement associée à un contrôle combine le nom du contrôle (spécifié


dans la propriété Name), un trait de soulignement (_) et le nom de l'événement. Par
exemple, si on souhaite que le bouton de commande CmdActiveProc1 appelle une
procédure d'événement lorsque l'utilisateur clique sur ce bouton, utilisez la procédure
CmdActiveProc1_Click.

Remarque :

 Bien qu’on peut construire les procédures d’évènement de toutes pièces (écriture
directe de leurs noms, définition des paramètres…) il est préférable d'utiliser les
procédures de code fournies par Visual Basic, car elles incluent automatiquement le
nom correct des procédures.

 Il est aussi conseillé de définir la propriété Name des contrôles avant de commencer à
écrire les procédures d'événement qui leur sont associées. Si on modifiez le nom d'un
contrôle après lui avoir associé une procédure, on devra également modifier le nom de
la procédure afin qu'elle corresponde au nouveau nom du contrôle.

 Principaux Événements

24
Université de Monastir
Ecole d’Ingénieurs de Monastir

a- Click

Se produit lorsque l’utilisateur appuie puis relâche le bouton gauche de la souris (ou entrée si
le contrôle a le focus)

Private Sub Button1_Click (ByVal sender As System.Object, ByVal e As


System.EventArgs) Handles Button1.Click

b- DblClick

Se produit lorsque l’utilisateur réalise un double click

Private Sub Label1_DoubleClick(ByVal sender As Object, ByVal e As


System.EventArgs) Handles Label1.DoubleClick

c- GotFocus

Se produit lorsqu’un contrôle reçoit le focus (click ou tabulation ou par code :


Objet.SetFocus)

Private Sub Objet_GotFocus( [Index As Integer])

d-KeyPress >>>

Se produit lorsque l’utilisateur appuie et relâche une touche du clavier

Private Sub Objet_KeyPress( [Index As Integer], KeyAscii As Integer)

Codes : 0 : 48 | 9 : 57 | A : 65 | Z : 90 | a : 97 | z : 122 | entrer : 13 … >>>

e- Change

Se produit lorsque le contenu d’un contrôle change

Private Sub Objet_Change( [Index as Integer])

2. Procédures Fonction :

25
Université de Monastir
Ecole d’Ingénieurs de Monastir

Lors de la déclaration d'une fonction, la valeur qui doit être retournée par celle-ci doit
être affectée au nom de la fonction ou en utilisant l’instruction Return. La déclaration
de la fonction se termine par les mots réservés ”End function”.

 Il est possible de quitter prématurément une fonction en inscrivant simplement


l’instruction Exit Function.

La syntaxe d'une procédure Fonction est la suivante :

[Private|Public][Static]Function Nom_Procedure (arguments) [As type]

Instructions

End Function

À l'instar d'une procédure Sub, une procédure Fonction est une procédure distincte capable de
prendre des arguments, d'exécuter une série d'instructions et de modifier la valeur de ses
arguments. Contrairement à une procédure Sub, une procédure Fonction peut renvoyer une
valeur à la procédure appelante. Trois éléments de syntaxe distinguent les procédures Sub des
procédures Fonction :

 D'une manière générale, une fonction est appelée en plaçant le nom de la procédure de
fonction ainsi que ses arguments à droite d'une instruction ou d'une expression plus
longue (returnvalue = function()).

 Tout comme les variables, les procédures Fonction possèdent des types de données qui
déterminent le type de valeur qu'elles renvoient. (En l'absence de clause As, il s'agit
par défaut du type Variant.)

 Pour qu'une valeur soit renvoyée, vous devez l'affecter à Nom_Procedure. Lorsque la
procédure Fonction renvoie une valeur, celle-ci peut être utilisée au sein d'une
expression plus longue.

Par exemple, vous pouvez écrire une fonction qui permet le calcul de l'hypoténuse d'un
triangle rectangle à partir des deux autres côtés :

Function Hypotenuse (A As Integer, B As Integer) As String


Hypotenuse = Sqr(A ^ 2 + B ^ 2)
End Function

26
Université de Monastir
Ecole d’Ingénieurs de Monastir

Pour appeler une procédure Fonction, procédez comme pour n'importe quelle fonction
intégrée dans Visual Basic :

Label1.Caption = Hypotenuse(CInt(Text1.Text), CInt(Text2.Text))


strX = Hypotenuse(longueur, largeur)

Remarque : L’appel d’une procédure Sub ou procédure fonction peut se faire en utilisant
l’instruction call ou directement en plaçant le nom de la procédure.

Exemple : Call MyProc (FirstArgument, SecondArgument)

MyProc FirstArgument, SecondArgument

1. Passage des arguments :


a) Passage d'arguments par valeur
Quand un argument est passé par valeur, seule une copie de la variable est passée à la
procédure. Si celle-ci modifie la valeur, le changement affecte uniquement la copie et non la
variable proprement dite. Utiliser le mot clé ByVal pour indiquer qu'un argument est passé
par valeur.
Par exemple :
Sub PostAccounts(ByVal intAcctNum as Integer)
.
. ' Placez des instructions ici.
.
End Sub

b) Passage d'arguments par référence


Quand on fait passer des arguments par référence, la procédure peut accéder à la variable
proprement dite au niveau de l'emplacement de son adresse mémoire. La valeur de la variable
peut ainsi être modifiée de manière permanente par la procédure à laquelle elle est passée. Le
passage par référence est utilisé par défaut dans Visual Basic.
Exemple:
Sub CallingProcedure()
Dim x As Integer
intX = inputbox(“Donner un entier”)
Affiche(x)
End Sub

27
Université de Monastir
Ecole d’Ingénieurs de Monastir

Sub Affiche (valeur As String)

MsgBox(valeur) ' La valeur de Bar correspond

End Sub

2. Les modules :

Si on a besoin d’une même procédure dans plusieurs feuilles d’un même projet, on peut
l’écrire dans les deux feuilles ou la décrire dans un module et elle sera vue par toutes les
feuilles de l’application. Ce module est ajouté de la même façon qu’on ajoute une nouvelle
feueille.

3. Quelques fonctions prédéfinies :

Les tableaux suivant résument les fonctions de types de données, les fonctions mathématiques
et quelques fonctions pour la manipulation des chaînes de caractères, les fonctions de
traitement des dates et de l’heure et les fonctions de traitement des fichiers et des répertoires.

28
Université de Monastir
Ecole d’Ingénieurs de Monastir

29
Université de Monastir
Ecole d’Ingénieurs de Monastir

30
Université de Monastir
Ecole d’Ingénieurs de Monastir

31
Université de Monastir
Ecole d’Ingénieurs de Monastir

32
Université de Monastir
Ecole d’Ingénieurs de Monastir

Programmation des contrôles


En VB.NET, il est possible de créer de toute pièce une application. Sans passer par l’étape de
design du formulaire, les composants peuvent être placés et paramétrés par programmation
uniquement. Cette méthode est très utilisée si l’application contient un grand nombre de
composants du même type présentant une relation entre eux.
Exemple : jeux démineur : contient un grand nombre de boutons sous forme de matrice.
Dans ce cas tous les composants sont ajoutés lors de l’exécution de l’application (formulaire
de base).
1. Déclaration d’un contrôle avec New :
Les instances de classes sont déclarés avec le mot clé New : un objet ne peut pas être déclaré
de la même façon qu’une variable simple, il faut créer une référence à l’objet en utilisant la
syntaxe suivante : Dim Instance_Objet As New Type_Objet
Exemple :
Dim BtnTest As New Button 'un bouton est un objet par
référence
Si on fait « Dim BtnTest As Button » on crée une référenc e vide, mais pas d'objet
Button.
Remarque : tout contrôle peut être déclaré avec new et ajouté à l’application (Form, Button,
PictureBox...)
2. Modification des propriétés du contrôle :
Avant d’être placé sur le Form, un contrôle est paramétré : on lui donne l’allure finale qu’il
doit avoir.
BtnTest.Location = New System.Drawing.Point(56,
144)
BtnTest.Name = "BtnTest"
BtnTest.Size = New System.Drawing.Size(104, 24)
BtnTest.TabIndex = 0
BtnTest.Text = "Test"
Mais même après ça, le bouton n’est pas sur Form1. En fait Le bouton
existe mais il faut l'ajouter à la collection Controls de la fenêtre (Cette
collection contient tous les contrôles contenus dans la fenêtre Form1):
Me.Controls.Add(BtnTest)
3. Ajouter des évènements au contrôle :
A ce niveau du code, le bouton existe mais il ne gère aucun évènement. En fait le bouton ne
commence à exister qu’au moment du démarrage de l’application. Pour lui attribuer un
évènement, Il faut inscrire le bouton dans une méthode de gestion d'évènements. En

33
Université de Monastir
Ecole d’Ingénieurs de Monastir

d'autres termes, VB.NET doit savoir quelle procédure doit être déclenchée quand un évènement
survient sur l’objet créé.
Pour cela, il faut commencer par écrire une procédure qui contient les instructions à faire en cas
d’occurrence de l’évènement sur le contrôle :
Private Sub BouttonClique(sender As Object, e As EventArgs)
Msgbox("je suis un nouveau bouton")
End Sub
Pour être évènementielle, cette procédure doit être liée à l’évènement en question (par exemple
BtnTest.click) mais surtout à l’objet à manipuler (BtnTest).
Pour cela on utilisera l’instruction AddHandler qui sera écrite comme suit:
AddHandler BtnTest.Click, AddressOf BouttonClique
 AddHandler permet d’affecter une procédure à un évènement.
 AdressOf permet de désigner la procédure à utiliser en cas d’évènement.
De cette façon le bouton « BtnTest » a été ajouté rien qu’avec du code, aussi nous lui avons
attribué une procédure qui sera exécuté s’il est cliqué. Voici le code complet :
Public Class FrmTest
Dim BtnTest As New Button
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles
MyBase.Load

BtnTest.Location = New System.Drawing.Point(56, 144)


BtnTest.Name = "BtnTest"
BtnTest.Size = New System.Drawing.Size(104, 24)
BtnTest.TabIndex = 0
BtnTest.Text = "Test"
Me.Controls.Add(BtnTest)

AddHandler BtnTest.Click, AddressOf BouttonClique

End Sub

Private Sub BouttonClique(ByVal sender As Object, ByVal e As EventArgs)

MsgBox("Je suis un nouveau bouton")


End Sub
End Class
Bien sûr cette opération peut être faite pour n’importe quel évènement qu’on veut ajouter, il suffit
de programmer une procédure à lier à l’évènement et d’utiliser AddHandler pour faire la liaison
entre la procédure et l’évènement.

34
Université de Monastir
Ecole d’Ingénieurs de Monastir

Noter bien:
- le mot clé « Handles » permet d'associer un événement à une procédure au moment de la
conception.
- le mot clé « Addhandler » permet d'associer un événement à une procédure au moment de
l'exécution.
Remarque :
 L’instanciation d’un nouvel objet est faite en dehors de toute procédure pour que l’objet
soit vu par tous les sous programmes (objet global).
 Le paramétrage ainsi que l’attribution des évènements (les instructions AddHandler
faisant les correspondances des différents évènements aux différents objets) se fait dans la
procédure Form_Load pour que ce soit exécuté au démarrage de l’application.
 Une procédure attribuée à un évènement d’un objet peut être réattribué à un autre objet
et/ou un autre évènement.
4. Utilisation des paramètres « sender » et « e »:
Si on déclare deux boutons BtnTest1 et BtnTest2, on devra paramétrer les deux boutons comme
fait ci-dessus. On utilisera la même procédure « BouttonClique » pour l’évènement « click ».
Dans ce cas, à moins qu’on veuille faire les mêmes instructions lors du clic sur les deux boutons,
ce qui est illogique, il faut faire la différence entre l’objet qui a initié l’évènement. Ceci peut être
fait en testant sur le paramètre « Sender » de la procédure qui représente l’objet qui a initié
l’évènement en utilisant l’opérateur de comparaison d’objet « IS ». Ainsi on écrit ce code :
Private Sub BouttonClique(sender As Object,e As EventArgs)
If sender Is BtnTest1 Then
MsgBox("Je suis le premier bouton")
ElseIf sender Is BtnTest2 Then
MsgBox("Je suis le deuxième bouton")
End If
End Sub
En ce qui concerne le deuxième paramètre « e », c’est un objet qui contient les arguments de
l’évènement.
Exemple : pour un textbox, les évènements suivant sont relatifs à la touche appuyée :
 KeyDown : survient quand on appuie sur la touche.
 KeyPress : quand la touche est enfoncée.
 KeyUp : quand on relâche la touche.

35
Université de Monastir
Ecole d’Ingénieurs de Monastir

Ces évènements surviennent dans cet ordre.


 KeyPress permet de récupérer la touche tapée dans e.KeyChar (le code unicode mais pas
les touches de fonction de direction comme CTRL,F1, F2, flèche haut...).
 KeyDown et KeyUp permettent de voir ce qui a été tapé physiquement, le code clavier
(dans e.KeyCode) et aussi si MAJ ALT CTRL ont été pressés (dans e.Shift, e.Alt..)

Private Sub TextBox1_KeyUp(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs)


Handles TextBox1.KeyUp
If e.Shift And e.KeyCode = Keys.A Then
MsgBox("La lettre 'A' a été tapée")
End If
End Sub

5. Déclaration d’un tableau de contrôle :


Public Class FrmTest

Dim TabBouton(5) As Button


Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Dim i As Integer
For i = 0 To 5
TabBouton(i) = New Button
TabBouton(i).Location = New System.Drawing.Point(56, 50 + 40 * i)
TabBouton(i).Name = "TabBouton" & i
TabBouton(i).Size = New System.Drawing.Size(104, 24)
TabBouton(i).TabIndex = i
TabBouton(i).Text = i
Me.Controls.Add(TabBouton(i))

AddHandler TabBouton(i).Click, AddressOf BouttonClique


Next
End Sub
Private Sub BouttonClique(sender As Object, e As EventArgs)

MsgBox("Je suis le bouton Num " & Strings.Right(sender.name, 1))

End Sub

End Class

36
Université de Monastir
Ecole d’Ingénieurs de Monastir

37
Université de Monastir
Ecole d’Ingénieurs de Monastir

Gestion des erreurs

1. Introduction
La gestion d’erreur représente une partie importante à réaliser lors de la programmation d’un
logiciel. Une application qui ne contient pas de gestion d’erreur crashera obligatoirement.
Il y existe plusieurs types d'erreurs : de syntaxe, d'exécution, de logique, de manipulation etc...
2. Les erreurs de syntaxe
On peut aussi les nommer 'les erreurs du compilateur', elles se produisent lorsque le compilateur
rencontre un code non reconnaissable, erreur de saisie ou méconnaissance du langage. Comme
les erreurs du compilateur empêchent un programme de s'exécuter, il faut être averti de ces
erreurs avant de tenter d'exécuter un programme, car elles surviennent en mode conception quand
on tape le code.
Les erreurs les plus communes sont:
 Utilisation d'un mauvais nom de variable (La déclaration obligatoire des variables évite
cela)
 Erreur dans la portée d'une variable.
 Erreur dans le passage de paramètres (Attention au By Val et By Ref)
 Erreur dans la conception de l'algorithme.
Exemple: la Propriété Text d'un label mal orthographiée:

Dans ce cas VB souligne en


ondulé bleu le code. Il faut
mettre le curseur sur le mot souligné, l'explication de l'erreur apparaît. Il faut les corriger
immédiatement en tapant le bon code (ici 'Text').
En bas de l’interface de programmation, il y a aussi une fenêtre; "liste des erreurs" (figure1). Elle
affiche tous les problèmes. Pour Un double clic sur la ligne expliquant l’erreur dans la liste
permet d’atteindre le code correspondant.

Figure1 : Liste des erreurs


3. Les erreurs d'exécution
Elles surviennent en mode « Run » ou lors de l'utilisation de l'exécutable: Une instruction ne
peut pas être effectuée. En cours de test, s'il y a une exception, le logiciel s'arrête, l'instruction
qui a planté apparaît en jaune et VB donne une explication (figure2).
L'erreur est:
• Soit une erreur de conception (Ex : ouvrir un fichier qui n'existe pas, division par zéro, utiliser
un index d'élément de tableau supérieur au nombre d'élément, envoyer un mauvais paramètre à
une fonction.)

38
Université de Monastir
Ecole d’Ingénieurs de Monastir

• Soit une erreur de l'utilisateur (Ex : On demande de taper un chiffre, l’utilisateur tape une lettre
ou rien puis valide.)
Normalement, lorsqu’une erreur survient, l’exécution du code s’interrompt. Les instructions de
gestion d’erreurs (comme : Try Catch Finally, On Error Resume ) intrinsèques à Visual Basic
permettent de désactiver ce comportement et de passer outre les instructions soulevant des
erreurs. Nous allons voir maintenant plus en détail chaque instruction de gestion d’erreurs.

Figure2 : Exemple d’erreur d’exécution

a. Capter les erreurs avec Try Catch Finally


Plutôt que de laisser le
logiciel 'planter', il faut
anticiper et essayer de
capter l'erreur au niveau
des lignes de code qui
peuvent la provoquer.
Avant l'instruction
supposée provoquer une
erreur : On introduit
l'instruction (Try), si une
erreur se produit on
intercepte l'erreur par
(Catch) puis on poursuit
(après Finally) Figure 3.
Exemple: Figure3 : Capter les erreurs avec Try Catch Finally
Private Sub
Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
Button3.Click
Dim i As Integer
Try 'on veut convertir un texte tapé
i = CType(TextBox1.Text, Integer) en integer la conversion est
Catch impossible si pas de texte ou non
MsgBox("saisir un nombre") valeur numérique
End Try
End Sub

39
Université de Monastir
Ecole d’Ingénieurs de Monastir

Il est possible d'utiliser Catch pour récupérer l'objet 'Exception' qui est généré par l'erreur.
Exemple : Catch ex As Exception
L’objet Exception à des propriétés:
 Message qui contient le descriptif de l'erreur
 Source qui contient l'objet qui a provoqué l'erreur
Exemple 1:
Public Sub Exempledivision()
Dim x As Integer = 5
Dim y As Integer = 0
Try
x = x \ y ' division par zero.
MessageBox.Show("end of Try block")
Catch ex As Exception
MessageBox.Show(ex.Message) ' affiche le message de l’exception.
y = Val(Inputbox("donner une autre valeur de y"))
Finally
MessageBox.Show("fin du programme")
End Try
End Sub

Exemple 2:
On ouvre un fichier par StreamReader, comment intercepter les exceptions suivantes :
Répertoire non valide, Fichier non valide, Autre.
Try
sr= New StreamerReader (NomFichier)
Catch ex As DirectoryNotFoundException ‘Répertoire non valide
MsgBox("Répertoire invalide")
Catch ex As FileNotFoundException ‘Fichier non valide
MsgBox("Fichier invalide")
Catch ex As Exception ‘Catch intercepte toutes les autres exceptions
MsgBox(ex.Message)
End Try Try
Remarque: Exit Try permet de sortir prématurément. Quitte <Instructions>
[Exit Try]
immédiatement le bloc Try ou Catch dans lequel il est. L'exécution Catch <DéfinitionErreur>
<Instructions>
continue avec le bloc Finally s'il y en a un, ou avec l'instruction qui suit [Finally]
<Instructions>
End Try. End Try

b. Capter les erreurs avec On error


On Error Goto permet en cas d'erreur de sauter à une étiquette (un emplacement dans le code)
emplacement ou une portion de code traite l'erreur. Quand l'erreur est corrigée, on peut revenir
de nouveau à la ligne qui a provoqué l'erreur grâce à Resume ou poursuivre à la ligne
suivante grâce à Resume Next

40
Université de Monastir
Ecole d’Ingénieurs de Monastir

L’objet Err représente l’erreur produite par la dernière instruction exécutée et vous permet d’en
connaître la source, le numéro, la description, etc. En testant adéquatement l’objet Err à l’aide
d’une simple structure if, il est possible de savoir si l’instruction précédemment exécutée a
générée une erreur ou non.
• On peut lire le numéro de l'erreur qui s'est produite, ce numéro est dans Err.Number.
• Err.Description contient le texte décrivant l'erreur.
• Err.Source donne le nom de l'objet ou de l'application qui a crée l'erreur.
Exemple :
On Error GoTo RoutineErreur 'Si une erreur se produit se rendre à 'RoutineErreur'
Dim x As Integer = 33
Dim y As Integer = 0
Dim z As Integer
z = x / y ' Crée une division par 0 !!
RoutineErreur : ' La Routine d'erreur est ici (remarquer ':' indiquant une etiquette).
Select Case Err.Number ' On regarde le numéro de l'erreur.
Case 6 ' Cas : Division par zéro interdite
y = 1 ' corrige l'erreur.
Case Else
' autres erreurs....
End Select
Resume ' Retour à la ligne qui a provoqué l'erreur.
 L’instruction On Error Resume
Cette instruction permet au code de faire fit d’une erreur et de recommencer l’exécution de
instruction ayant générée l’erreur jusqu’à ce que le problème soit réglé. l’instruction On Error
Resume précisera à Visual Basic de ne pas en tenir compte et de ré-exécuter l’instruction.
 L’instruction On Error Resume Next
Cette instruction précisera à Visual Basic que si une instruction 'plante', la sauter et passer à
l'instruction suivante.
On Error Resume Next
Exemple: On veut effacer un fichier :
Kill (MonFichier)
 L’instruction On Error Goto 0
Cette instruction permet d’annuler tout traitement des erreurs. Ainsi, si une erreur survient après
cette instruction, le code sera interrompu et un message d’erreur sera affiché à l’utilisateur.
l’instruction On Error Goto 0 ramène le comportement initial de Visual Basic.

41

Vous aimerez peut-être aussi