Académique Documents
Professionnel Documents
Culture Documents
Visual studio
Objectif du cours
Au cœur de ce cours, il poursuit un double objectif :
constituer un vade-mecum de départ pour le langage Visual Basic, dans ses versions .net (mais
cela vaut tout aussi bien pour la version 6).
présenter certains des concepts fondamentaux de la programmation objet,
Nous offrir des méthodes et procédures appliquées en visual basic 2010.
Nous familiariser à la programmation des objets visual basic net
Créer la connexion aux bases des données avec visual basic .net
Visual Basic étant, comme tout langage moderne, richissime en fonctionnalités, il va de soi que les
quelques pages qui suivent ne remplaceront ni une consultation intelligente de l’aide du logiciel, ni le
recours à des ouvrages de référence d’une toute autre ampleur (mais d’un tout autre prix. On n’a rien
sans rien). En revanche, elles visent à brosser à grands traits les spécificités de Visual Basic, posant
ainsi les fondations d’un apprentissage technique plus approfondi.
Ajoutons que ce cours serait vide de sens sans les exercices – et les corrigés – qui l’accompagnent.
1. Particularités des langages objet
En quoi un langage objet diffère-t-il d’un langage normal ? On peut résumer l’affaire en disant qu’un
langage objet possède toutes les caractéristiques d’un langage traditionnel, avec deux grands aspects
supplémentaires. Donc, c’est un premier point, on peut tout à fait programmer dans un langage objet
comme on programmerait du Fortran, du Cobol ou du C. Selon le vieil adage, qui peut le plus peut le
moins. En pratique, cela voudrait dire négliger tout ce qui fait la spécificité d’un tel langage, comme -
entre autres - la prise en charge de l’environnement graphique Windows.
Cela implique également que toutes les notions fondamentales que le programmeur a mises en
pratique en algorithmique ou en programmation dans un langage traditionnel conservent leur validité
pleine et entière : comme tout langage, un langage objet ne connaît que quatre grands types
d’instructions : affectations de variables, tests, boucles et entrées / sorties (encore que, nous le verrons,
ce dernier type puisse y connaître de fait un certain nombre de bouleversements). Comme tout langage,
un langage objet connaît des variables de différents types (numérique, caractère, booléen), et des
variables indicées (tableaux). Donc, encore une fois, tout ce qui était vrai dans la programmation
traditionnelle demeure vrai dans la programmation objet. Mais celle-ci offre comme on vient de le dire
deux nouveaux outils, redoutables de puissance, à la trousse du programmeur.
1.1 Les Objets
1.1.1 Présentation
La première particularité d’un langage objet est de mettre à votre disposition des objets. Etonnant,
non ? Un objet peut être considéré comme une structure supplémentaire d’information, une espèce de
super-variable. En effet, nous savons qu’une variable est un emplacement en mémoire vive, caractérisé
par une adresse – un nom – et un type (entier, réel, caractère, booléen, etc.). Dans une variable, on ne
peut stocker qu’une information et une seule. Même dans le cas où l’on emploie une variable indicée –
un tableau – les différents emplacements mémoire ainsi définis stockeront tous obligatoirement des
informations de même type. Un objet est un groupe de variables de différents types. Il rassemble ainsi
couramment des dizaines d’informations très différentes les unes des autres au sein d’une même
structure, rendant ainsi ces informations plus faciles à manier. A la différence de ce qui se passe avec
un tableau, les différentes variables d’un même objet ne sont pas désignées par un indice, mais par un
nom qui leur est propre. En l’occurrence, ces noms qui caractérisent les différentes variables au sein
d’un objet s’appellent des propriétés de l’objet. Conséquence, toute propriété d’objet obéit strictement
aux règles qui s’appliquent aux variables dans tout langage (type, taille, règles d’affectation…). On dira
également que plusieurs objets qui possèdent les mêmes propriétés sont du même type, ou encore
pour mieux frimer, de la même classe. Clââââsse ! A titre d’exemple, prenons un objet d’usage
courant : un ministre. Les propriétés d’un ministre sont : sa taille, son poids, son âge, son portefeuille, le
montant de son compte en Suisse, son nom, sa situation par rapport à la justice, etc. On peut retrouver
aisément le type de chacune de ces propriétés :
le portefeuille, le nom, sont des propriétés de type caractère.
la taille, le poids, l’âge, le compte en Suisse, sont des propriétés de type numérique.
la situation judiciaire (mis en examen ou non) est une propriété booléenne.
1.1.2 Syntaxe
La syntaxe qui permet de désigner une propriété d’un objet est :
objet.propriété
Par exemple, nous pouvons décider que le montant du compte en Suisse du ministre Duchemol s’élève
modestement à 100 000 euros. Si la propriété désignant ce compte pour les objets de type (de classe)
ministre est la propriété CompteSuisse, on écrira donc l’instruction suivante :
Duchemol.CompteSuisse = 100 000
Pour affecter à la variable Toto le montant actuel du compte en Suisse du ministre Duchemol, on
écrira :
Toto = Duchemol.CompteSuisse
Pour augmenter de 10 000 euros le montant du compte en Suisse de Duchemol, on écrira :
Duchemol.CompteSuisse = Duchemol.CompteSuisse + 10 000
Et, vraiment juste histoire d’utiliser une propriété booléenne, et parce que Duchemol n'est pas le seul
objet de la classe ministre :
Pasqua.MisEnExamen = True
On répète donc qu’hormis ce qui concerne la syntaxe, l’usage des propriétés des objets ne se
différencie en rien de celui des variables classiques.
1.1.3 Méthodes
Les langages objet ont intégré une autre manière d’agir sur les objets : les méthodes. Une méthode est
une action sur l’une – ou plusieurs - des propriétés d’un objet. Une méthode va supposer l’emploi d’un
certain nombre d’arguments, tout comme une fonction. On trouvera donc des méthodes à un argument,
des méthodes à deux arguments (plus rares), et aussi des méthodes sans arguments. Ce n’est pas le
seul point commun entre les méthodes et les fonctions. On sait qu’une fonction peut : soit accomplir une
tâche impossible si elle n’existait pas, soit accomplir une tâche possible par d’autres moyens, mais
pénible à mettre en œuvre.
De la même manière, certaines méthodes accomplissent des tâches qui leur sont propres, et qui ne
pourraient pas être accomplies si elles n’existaient pas. D’autres méthodes ne sont là que pour soulager
le programmeur, en permettant de modifier rapidement un certain nombre de propriétés. Par exemple,
reprenons le cas notre ministre. Une méthode pourrait être AugmenterPatrimoine, qui supposerait un
argument de type numérique. On pourrait ainsi écrire: Duchemol.AugmenterPatrimoine(10 000)
Ce qui aurait en l’occurrence exactement le même effet que de passer par la propriété
correspondante :Duchemol.CompteSuisse = Duchemol.CompteSuisse + 10 000
Pour terminer sur ce sujet, il faut bien faire attention à une chose lorsqu’on utilise des objets.
certains objets sont fournis par le langage de programmation lui-même. Il s’agit en particulier
(mais pas seulement) de ce qu’on appelle des contrôles, c’est-à-dire d’objets possédant pour la plupart
une existence graphique ; ce sont des éléments de l’interface Windows. Pour tous ces objets que le
programmeur utilise alors qu’ils ont été créés par d’autres, les propriétés et les méthodes ne s’inventent
pas : chaque type (chaque classe) d’objet possède ses propres méthodes et arguments, qu’il s’agit
donc de connaître pour utiliser l’objet en question. Quitte à insister, je répète : connaître, et non
inventer.
d’autre part, un langage objet ouvre la possibilité de créer soi-même ses propres objets, et donc
de programmer leurs propriétés et leurs méthodes. On se situe alors à tout autre niveau, celui de la
programmation objet proprement dite. Nous n’aborderons ce domaine que pour mémoire, tout à la fin
du cours. Ne soyons pas prétentieux, et commençons par le commencement.
En attendant, l’essentiel de nos efforts va consister à comprendre comment on peut se servir des objets
(en particulier des contrôles) écrits par d’autres. Et pour ceux qui trouveraient- ils auraient raison - que
ces quelques lignes sont loin d'épuiser le sujet, je leur donne rendez-vous au dernier chapitre de ce
cours.
1.2 Procédures événementielles
On en arrive à la deuxième grande possibilité supplémentaire des langages objet par rapport
aux langages traditionnels. En PASCAL ou en C, par exemple, une application est constituée d’une
procédure principale contenant la totalité du code (y compris par l’appel indirect à des sous-
programmes). Les instructions qu’elle contient sont exécutées les unes après les autres, jusqu’à la fin
(je passe pudiquement sous silence l’improbable hypothèse d’un arrêt prématuré pour cause d’erreur).
Le point fondamental est que dans un tel langage, l’ordre d’exécution des procédures et des sous-
procédures est entièrement fixé d’avance par le programmeur lui-même, par le biais des instructions
d’appel des sous-procédures. Par ailleurs, et ce n’est pas un hasard, ces procédures portent des noms
arbitraires fixés par le programmeur, hormis le cas particulier de la procédure principale, qui se doit de
porter un nom particulier, fixé par le langage (généralement, Main).
Dans un langage objet, on peut, si on le désire, conserver intégralement ce mode de fonctionnement.
Mais ce n’est plus le seul possible.
En effet, dans un langage objet, il n’y a donc plus à proprement parler de procédure principale ; en tout
cas, l’existence d’une procédure principale n’a rien d’obligatoire.
Chaque procédure est liée à la survenue d’un événement sur un objet, et sera donc automatiquement
exécutée lorsque cet événement se produit. Le nom de la procédure est alors, de manière obligatoire, le
nom de la combinaison objet-événement qui la déclenche.
On vient de parler des objets, et en particulier des contrôles. Répétons qu’un contrôle est un
des éléments de l’interface graphique de Windows, éléments que VB met à la disposition du
programmeur pour qu’il constitue ses propres applications. Ainsi, les contrôles les plus fréquents sont :
la feuille, le bouton de commande, la liste, la case à cocher, le bouton radio, etc.
Quant aux événements, ils peuvent être déclenchés par l’utilisateur, ou par déroulement du
programme lui-même. Les événements déclenchés par l’utilisateur sont typiquement : la frappe au
clavier, le clic, le double-clic, le cliquer-glisser. Les événements déclenchés par le code sont des
instructions qui modifient, lors de leur exécution, une caractéristique de l’objet ; par exemple, le
redimensionnement, le déplacement, etc.
Résumons-nous. Un petit dessin vaut parfois mieux qu’un grand discours :
Le lien entre l'objet, la survenue de l’événement et le déclenchement de la procédure est établi par
le nom de la procédure lui-même. Ainsi, le nom d’une procédure événementielle répond à une syntaxe
très précise :
Par exemple, la procédure suivante :
D’autre part, je tiens à signaler dès maintenant qu’il est extrêmement périlleux de procéder à des
"copier – coller" de Form, car le fichier structure (vbp) possède une tendance affirmée à se mélanger
complètement les crayons en pareil cas.
Conclusion, on crée un nouveau projet à chaque nouvelle application, et on ne déroge jamais à cette
règle d’or. Il ne doit jamais y avoir deux projets ouverts en même temps dans la même fenêtre VB, sous
peine de graves représailles de la part du logiciel.
Tant que votre projet est ouvert sous cette forme d’une collection de fichiers vbp et frm, vous pouvez
naturellement l’exécuter afin de le tester et de jouer au célèbre jeu des 7 777 erreurs. Lors de
l’exécution, le langage est alors ce qu’on appelle « compilé à la volée ». C’est-à-dire que VB traduit vos
lignes de code au fur et à mesure en langage machine, puis les exécute. Cela ralentit naturellement
considérablement l’exécution, même si sur de petites applications, c’est imperceptible. Mais dès que ça
commence à grossir…
Voilà pourquoi, une fois l’application (le "projet") mis au point définitivement, VB vous propose de le
compiler une bonne fois pour toutes, créant ainsi un unique fichier *.exe. Ce fichier contient cette fois à
lui seul l’ensemble de votre projet, form, code, et tutti quanti. Et il peut naturellement être exécuté sans
l’ouverture – donc la possession - préalable de Visual Basic (à un détail près, que nous réexaminerons
plus loin dans ce cours).
Un projet terminé est donc un projet compilé.
3. L’interface VB
Je ne me lancerai pas ici dans la description exhaustive de l’interface très riche (trop ?) de ce langage.
Vous pourrez trouver ce type de descriptif dans n’importe quel manuel du commerce. Cette partie a
pour seul but de signaler les points importants.
le langage possède un vérificateur de syntaxe en temps réel. C'est-à-dire que l’éditeur de code
détecte les instructions non légitimes au fur et à mesure que vous les entrez, et il les signale par un
texte mis en rouge, et pour faire bonne mesure, par un message d’erreur. Il est donc impossible de
laisser traîner des erreurs de syntaxe en VB, ce qui je n’en doute pas, rendra les amateurs de langage
C inconsolables. Qu’ils se rassurent toutefois, VB ne corrige ni les fautes de logique, ni les fautes
fonctionnelles. Il reste donc tout de même de quoi se faire plaisir.
De même, le code est immédiatement mis en couleurs par l’éditeur.
o le bleu correspond aux mots réservés du langage (instructions, mots-clés...)
o le vert correspond à un commentaire (toute ligne commençant par un guillemet simple – quote
– est considérée comme un commentaire).
tout mot reconnu par l'éditeur (nom d'objet, instruction) voit sa première lettre transformée
automatiquement en majuscule.
tout nom d’objet suivi d’un point voit s’afficher une liste déroulante contenant l’intégralité des
propriétés et des méthodes disponibles pour cet objet. A contrario, cela signifie qu’un objet ne faisant
pas apparaître une liste déroulante dans le code est un objet non reconnu (qui n’existe pas). De même,
une instruction ne prenant pas automatiquement de majuscule initiale est une instruction non reconnue.
il est possible de réaliser une exécution pas à pas via la commande appropriée du menu.
il est possible d’insérer des points d’arrêt pour faciliter le déboguage.
dans le cas d’un pas à pas comme d’un point d’arrêt, il est possible de connaître la valeur
actuelle d’une variable en pointant (sans cliquer !) la souris sur une occurrence de cette variable dans le
code.
Fenêtre d'une application VB en exécution Pas à Pas
On a le choix entre: -Nouveau projet... -Ouvrir un projet.. -Projets récents Pour créer un nouveau projet Visual
Basic, il faut choisir 'Nouveau projet' dans le menu démarrage ou passer par le menu 'Fichier' puis 'Nouveau
Projet'. La fenêtre suivante s'ouvre:
Il faut choisir 'Application Windows Forms' ou 'Application WPF'. On peut aussi choisir 'Modèle en ligne' à gauche
pour avoir une liste (courte) de modèle de programme. On a donc le choix (à partir de VB 2008) de créer
l'interface utilisateur: En Windowsforms (basé sur GDI+), interface habituelle, bien connue ou en WPF interface
vectorielle élaborée n'existant pas avant VB 2008. Choisir l'icône 'Application Windows forms', puis donner un
nom au projet, enfin valider sur 'Ok'. (Le chemin de l'emplacement du projet n'est pas modifiable ici, il est par
défaut ' C:\Documents and Settings\Nom Utilisateur\Mes documents\Visual Studio 2010\ Projects\MonProjet')
C:/Utilisateurs/Philippe/Mes document/ Visual Studio 2010/Projet sous Windows 7 Avec l'explorateur:
Documents=> Visual Studio 2010=>Projet On remarque qu'on aurait pu choisir 'Application WPF', on y reviendra.
2-1-a. Fenêtre Projet
Vous pouvez ancrer les fenêtres correspondant aux onglets aux extrémités de la fenêtre de l'IDE ou les déplacer
n'importe où sur le Bureau (sur un second moniteur aussi). Ci-dessus la fenêtre de Form2 est détachée de l'IDE
(il suffit de cliquer déplacer l'onglet).
Cela permet d'ajouter un formulaire mais aussi un module standard, un module de Classe. Cliquer sur Windows
Form, une fenêtre (un formulaire) Form2 vide apparaît (Form1 était le nom du premier formulaire). Il y a des
fenêtres toutes faites pour accélérer le travail (les templates) comme les 'Ecran de démarrage' les 'Formulaire
Explorateur'...
2-1-c. Le concepteur (Designer) C'est la zone permettant de dessiner l'interface utilisateur: les fenêtres,
controles.. La zone de travail se trouve au centre de l'écran: C'est l'onglet Form1.vb[Design] ci-dessous qui
donne donc accès au dessin de la feuille (du formulaire); on peut ajouter des contrôles, modifier la taille de ces
contrôles..
Modifier les propriétés d'un contrôle ou du formulaire. Quand un formulaire ou un contrôle est sélectionné
dans la fenêtre Design, ses propriétés sont accessibles dans la fenêtre de 'Propriétés' (Properties) à droite en
bas: Ici ce sont les propriétés du contrôle 'Button1' qui sont visibles (Text, Location..) on peut modifier
directement les valeurs.
Considérant que vous savez normalement déjà allumer un PC et l'éteindre, utiliser une souris et un
clavier de préférence, et que vous êtes motivé pour écrire des programmes en Visual Basic.NET, que
ce soit pour le plaisir ou le travail, vous êtes donc prêt à débuter la programmation en VB.NET ! En plus
d'un PC, il vous faut un exemplaire de Visual studio.NET. Dans le cas où vous douteriez de vos
capacités à apprendre la programmation, souvenez-vous d'Albert Einstein (le célèbre physicien qui a
inventé la théorie de la relativité). Un de ses instituteurs avait déclaré qu'il apprenait si lentement qu'il
était sans doute attardé ! Peut-être en réponse à cela, Albert Einstein a dit un jour : " L'imagination est
plus importante que le savoir ". Certaines personnes soutiennent qu'il aurait aussi dit : " Si mon
instituteur est si intelligent, où est son prix Nobel ? " (Ce qui reste à vérifier !!) Avec de l'imagination, un
ordinateur et VS.NET (Visual Studio qui est l'outil de développement), vous êtes fin prêt pour le grand
saut dans le monde de la programmation…
pour les très gros programmes. Quant au Java, il est utilisé dans la conception de sites Internet
sophistiqués. Microsoft a donc développé quelque chose baptisé " .NET Framework ", qui agit comme
couche intermédiaire entre le système d'exploitation (Windows) et tous les programmes que vous
écrivez. Cela résout deux problèmes majeurs. Le premier problème résolu par le .NET est la possibilité
pour différents langages de coopérer entre eux. Au lieu d'octroyer à chaque langage un accès direct au
système d'exploitation de l'ordinateur, l'infrastructure .NET Framework force les langages qui ont été
conçus pour travailler avec .NET (comme VB.NET) à stocker leurs chaînes et nombres exactement de
la même manière. De la sorte, vous pouvez écrire un programme utilisant différents langages sans vous
préoccuper du fait qu'un langage stocke et manipule les données de façon différentes d'un autre
langage de programmation. Le second problème résolu par le .NET Framework concerne la distribution
du programme. Actuellement, la plupart des utilisateurs exécutent des programmes stockés sur leurs
disques durs… Bref passons enfin aux choses plus intéressantes !
Sélectionnez
'exemple pour créer 'MaVoiture' à partir de la class " LesVoitures "
C'est habituellement une 'ligne de code exécutable'. Une instruction est exécutée lorsque le programme
marche. Plusieurs instructions peuvent se suivre sur une même ligne, séparées par ':'
Sélectionnez
Dim B As String : B="Bonjour"
Si une ligne est très longue, on peut passer à la ligne grâce à '_'
Sélectionnez
Dim B As String = "Bonjour monsieur ": C= _"le professeur"
'Equivaut à :
Dim B As String = "Bonjour monsieur ": C= "le professeur"
Quand un programme tourne, les instructions sont effectuées ligne après ligne.
Sélectionnez
1 Dim B As String
2 B="Bonjour"
3 Dim A As Integer
4 A= 3
5 A= A + 1
La ligne 1 est exécutée puis la ligne 2 puis la 3, la 4... Bien que l'on puisse avoir des numéros de ligne,
ils ne sont plus utilisés actuellement et ils sont invisibles. Pour mettre des commentaires dans un
programme, on le fait précéder d'une apostrophe. À la différence d'une instruction, le commentaire ne
sera pas exécuté.
Sélectionnez
'Ceci est un commentaire, ce n'est pas une instruction.
Une procédure est un ensemble d'instructions qui effectue une fonction précise. En Visual Basic.NET, il
existe deux sortes de procédures : les 'sub' et les 'function' . Les 'sub' commencent par le mot clé 'sub'
puis finissent par 'end sub' et ne retournent aucune valeur contrairement aux fonctions qui débutent par
'function' puis finissent par 'end function' et qui retournent une valeur précise.
Sélectionnez
'Exemple de sub
Sub DemarrerProgramme()
'la procédure ne retournera aucune valeur.
End Sub
'Exemple de fonction
Function CalculerPi()
'la fonction va retourner la valeur de PI après une série de calculs…
End Function
Pour appeler une fonction ou un sub on utilise le mot clé " Call ". Il n'est pas obligatoire et est devenu
inutile en .Net (c'est un reste de VB6).
Sélectionnez
'Exemple d'appel de fonction ou sub
Call DemarrerProgramme 'déconsillé
CalculerPi() 'OK
'Ces deux appels sont identiques
Sub Remplissage()
Dim MonCopain As Coordonnee
MonCopain.Nom = "Dupont"
MonCopain.Prenom = "Jean"
MonCopain.Age = 40
MsgBox MonCopain.Prenom
End Sub
Voilà comment on peut ainsi créer des variables composées : C'est déjà une sorte d'objet. Passons
maintenant aux choses sérieuses !
Nous allons d'abord créer une Classe, grace à l'insertion d'un nouveau module de classe :
Imaginons le concept d'un simple bistrot
Insertion/Module de classe (et pas nouveau module, sinon, ce n'est pas un module de classe)
Le sauvegarder sous Bistrot
Dans ce module, installer le code (Minable, j'en conviens) suivant :
Public NombreClient
Sauvegardez.
Voici notre première classe réduite à sa plus simple expression : En effet : Elle ne comporte ni
procédure ni fonction, ni rien d'autre qu'une simple variable : NombreLitre
Nous allons la tester. La manière la plus simple consiste à créer un module (normal cette fois), et à y
insérer le code suivant : Il s'agit de créer une variable de type Bistrot (As New Bistrot). C'est comme une
variable normale, mais c'est cette fois une variable dite OBJET, c'est à dire qu'elle sera d'une structure
beaucoup plus complexe qu'un type de données String, ou Single qui sont considérées comme des
variables de type SCALAIRES (Simples)
Sub TesterLaClasse()
Dim CafeDeLaGare As New Bistrot
End Sub
Exécutez cette procédure TesterLaClasse : Il ne se passe rien, mais il n'y a pas d'erreur.
Nous allons maintenant placer la valeur 5 dans cette variable NombreLitre, et l'afficher à l'aide d'un
MsgBox. Nous pouvons nous permettre cela uniquement grâce au fait d'avoir déclaré NombreLitre en
Public, sinon, une erreur de compilation aurait eu lieu :
Sub TesterLaClasse()
Dim CafeDeLaGare As New Bistrot
CafeDeLaGare.NombreClient = 5
MsgBox CafeDeLaGare.NombreClient
End Sub
Plusieurs instances d'une classe
Ouvrons un bistrot : Le Café de la Gare
De cette même façon, il est donc possible de déclarer 2 INSTANCES de Bistrot, chacune étant
indépendante de l'autre, comme ceci :
Sub TesterLaClasse()
Dim CafeDeLaGare As New Bistrot
Dim ChezGaston As New Bistrot
CafeDeLaGare.NombreClient = 5
ChezGaston.NombreClient = 10
MsgBox CafeDeLaGare.NombreClient' 5
MsgBox ChezGaston.NombreClient' 10
End Sub
Méthodes simples
Cuisinons
Maintenant, il est possible de créer des Subs directement dans la Classe. Modifiez votre module de
classe Bistrot comme ceci :
Public Sub Cuisiner()
MsgBox "Je cuisine"
End Sub
Et dans votre autre module de test TesterLaClasse, faites un appel :
Sub TesterLaClasse()
Dim CafeDeLaGare As New Bistrot
CafeDeLaGare.Cuisiner ' Affichera "Je cuisine"
End Sub
Nous avons pu appeler ce sub grâce au fait qu'il est déclaré comme Public, sinon, une erreur de
compilation serait survenue. Un Sub dans un module de classe est appelé alors une METHODE.
Méthodes paramétrées
Cuisinons un bon repas
Il est possible de paramétrer la méthode comme ceci :
Modifications à faire dans le module de classe Bistrot (Appelons désormais ce module de classe
simplement "La classe bistrot") :
Public Sub Cuisiner(QuelRepas)
MsgBox "Je cuisine " & QuelRepas
End Sub
Modifications à faire dans TesterLaClasse :
Sub TesterLaClasse()
Dim CafeDeLaGare As New Bistrot
CafeDeLaGare.Cuisiner "Un steack"
CafeDeLaGare.Cuisiner "Une omelette"
End Sub
Constatez l'absence de parenthèses. Vous allez donc maintenant pouvoir appeler la méthode Cuisiner
de la classe Bistrot avec un paramètre.
Fonctions (Sortes de méthodes avec renvoi de valeurs)
Mettons les tables en place
On peut également placer des fonctions dans les classes. Ajoutez la fonction PreparerLesTables() dans
la classe Bistrot :
Public Function PreparerLesTables()
PreparerLesTables = "Les tables sont préparées"
End Function
Cette fonction s'appelle comme une fonction normale. A nouveau, pour qu'elle puisse s'appeler depuis
ailleurs que dans un MEMBRE de la classe elle-même, il est nécessaire de la précéder de Public. Un
membre est une fonction, une procédure, une variable ou une propriété de la classe (Nous n'avons pas
encore abordé les propriétés)
Modifiez TesterLaClasse pour appeler cette nouvelle fonction :
Sub TesterLaClasse()
Dim CafeDeLaGare As New Bistrot
MsgBox CafeDeLaGare.PreparerLesTables()
End Sub
Constatez l'apparition des parrenthèses vides indispensables en cas d'appel à une fonction, par
opposition aux procédures Sub. Constatez également l'obligation du MsgBox. En effet, on DOIT
récupérer la valeur "Les tables sont préparées" :
CafeDeLaGare.PreparerLesTables()
donnerait une erreur. On aurait pu également stocker cette valeur "Les tables sont préparées" dans une
variable, comme ceci :
Dim EtatDesTables
EtatDesTables = CafeDeLaGare.PreparerLesTables()
Fonctions paramétrées
Mettons les tables en place plus consciencieusement !
Imaginons la même fonction mais avec 3 paramètres : Le genre de la nappe, sa couleur, et s'il faut
mettre des bougies. Modifiez Bistrot.PreparerLesTables comme suit :
Public Function PreparerLesTables(GenreDeNappe, CouleurNappe, MettreBougie)
Dim JePrepare
JePrepare = "Je met des nappes en " & GenreDeNappe
JePrepare = JePrepare & " " & CouleurNappe & "s "
If MettreBougie = True Then
JePrepare = JePrepare & "avec une bougie"
End If
PreparerLesTables = JePrepare
End Function
Et appelez maintenant cette nouvelle fonction comme ceci :
Sub TesterLaClasse()
Dim CafeDeLaGare As New Bistrot
MsgBox CafeDeLaGare.PreparerLesTables("papier", "rouge", True)
End Sub
Il va afficher :
Je met des nappes en papier rouges avec une bougie
Propriétés
Property Let
Mettons de la musique dans le café de la gare
Les propriétés permettent une certaine syntaxe d'appel aux membres de Bistrot.
Corrigez la classe Bistrot comme suit :
Property Let Musique(QuelGenre)
End Property
Les Property sont par défaut Publiques : On pourra donc les appeler sans problème depuis l'extérieur.
QuelGenre est un paramètre OBLIGATOIRE. On ne peut PAS créer une property sans paramètre.
Nous verrons plus tard comment mettre plusieurs paramètres tels que Property Let
Musique(QuelGenre, QuelVolume) par exemple.
Le Let veut dire qu'il s'agit d'une propriété qui va ACCUEILLIR un paramètre lors de l'appel. Ce qui veut
dire que cette propriété sera dite EN ECRITURE, puisqu'on va pouvoir ECRIRE dedans, comme ceci :
Sub TesterLaClasse()
Dim CafeDeLaGare As New Bistrot
CafeDeLaGare.Musique = "Jazz"
End Sub
Voilà. En exécutant ce code, il ne va pas se passer grand chose, c'est le moins qu'on puisse dire : En
effet, Il se contente d'envoyer "Jazz" dans le paramètre QuelGenre.
Le but étant bien évidemment de traiter ce paramètre, en le gardant en mémoire, par exemple en
mémorisant le résultat dans une variable locale comme ceci :
Dim GenreMusique
Property Let Musique(QuelGenre)
GenreMusique = QuelGenre
End Property
Peut-on utiliser une Property Let avec plus d'un paramètre ?
On peut effectivement se poser la question puisque l'appel à une Property Let à comme forme
NomDeLaClasse.NomDeLaPropertyLet = QuelqueChose
Et bien oui, on peut, et l'appel se fera alors comme ceci :
Prenons l'exemple d'une Property Let qui allume le bistrot (Un certain nombre de lustres, de chandelles,
le tout à une certaine puissance) :
Property Let Allumer(Lustre, chandelle, Puissance)
MsgBox "Lustre : " & Lustre
MsgBox "Chandelle : " & chandelle
MsgBox "Puissance : " & Puissance
End Property
Qui s'appelle de la manière suivante :
Sub MettreLaLumiere()
Dim CafeDesAmis As New Bistrot
CafeDesAmis.Allumer(2, 10) = "60 Watts"
End Sub
Différence entre variable et Property
Mais alors, on est en droit de se demander pourquoi créer une propriété, et pas simplement déclarer
GenreMusique comme étant une variable Public, et directement injecter le genre de musique dedans,
comme ceci :
CafeDeLaGare.GenreMusique = "Jazz"
Ce qui reviendrait effectivement au même. Mais en fait, la propriété étant carrément tout un bout de
code visual Basic, on peut se permettre de faire beaucoup plus que d'attribuer une simple valeur à une
variable, comme par exemple, définir automatiquement le volume sonore suivant le genre de musique
choisie, ou simplement s'il y a de la musique. Changez la classe Bistrot comme ceci :
Dim AvecMusique
Dim GenreMusical
Dim VolumeMusical
Voyez comme le simple envoi d'une valeur à une propriété peut engendrer des grands changements.
Si vous réfléchissez un peu, vous constaterez qu'on aurait pu faire la même chose avec une procédure
Musique (Sub), comme ceci :
Dim AvecMusique
Dim GenreMusique
Dim VolumeMusical
CafeDeLaGare.Musique = "Jazz"
End Sub
Maintenant, dans la classe Bistrot, ajoutez la MEME propriété Musique, mais avec GET, pour que
finalement votre Classe ressemble à ceci :
Dim GenreMusique
3. Créez encore ailleurs une procédure que vous appellerez Sub Tralala. Placez y le code
suivant :
Sub Tralala()
Dim CafeDeLaGare As New Bistrot
' Appel à une variable dans Bistrot :
CafeDeLaGare.NombreClient = 12
' Appel à une variable dans Salle, elle-même définie comme Salon dans la classe Bistrot :
CafeDeLaGare.Salon.NombreTable = 4
End Sub
Le constructeur et le destructeur
Ce que l'on appelle le constructeur en POO (Programmation Orientée Objet) désigne simplement une
procédure exécutée automatiquement immédiatement lors du premier appel à quoi que ce soit dans la
classe en question en utilisant le nom de procédure-clé Class_initialize. Exemple :
1. Créez une autre classe que vous appellerez Bistrot. Placez-y le code suivant :
Public NombreClient
Private Sub Class_initialize()
MsgBox "Début"
End Sub
2. Créez ailleurs une procédure sub Tralala :
Sub Tralala()
Dim Impact As New Bistrot
' Dès l'exécution de la ligne suivante, juste avant, sera exécutée Class_initialize (ok ok)
Impact.NombreClient = 2
End Sub
Même commentaire avec le destructeur qui s'exécutera à la fin du code VBA
Private Sub Class_Terminate()
MsgBox "Fin"
End Sub
Sélectionnez
'Exemple de module
Module NomDeMonModule
Sub Test1()
'Procédure 1
Function Test_1()
'Fonction 1
End Function
Function Test_2()
'Fonction 2
End Function
Sub Test2()
'Procédure 2
End Sub
End Module
Les 'sub' et 'fonctions' ne peuvent pas avoir les mêmes noms sauf si le nombre de paramètres est
différent.
Récapitulatif : Une instruction est une ligne de code qui va être exécutée par le programme. Une
fonction retourne une valeur contrairement à la procédure qui n'en retourne pas. Un module n'est en fait
qu'une feuille contenant de nombreuses procédures et fonctions.
Exercice
1. Ecrire une fonction en vb studio qui permet de calculer la surface d’un carrée sitôt que vous entrez le
cote. Le label affichant le résultat doit être en couleur.
End Sub
End Class
Module
Module surfacecalc
Public Function surfacescalc(ByVal R As Single)
Return R * R
End Function
End Module
2. Ecrire une module qui permet de produire la surface d’un cercle en entrant le rayon.
Code
Public Class frmsurface
End If
End Sub
End Class
Module
Module surfacecercles
Function surfcercle(ByVal Rayon As Single)
Return 3.14 * Rayon * Rayon
Exit Function
End Function
End Module
3. Faire un programme qui affiche dans un msgbox le resultat des operations addition effectuer dans le
modeule :
5. fdffdfdfd
III. Le langage Visual Basic
III-A. Les variables
En programmation, une des choses essentielle est l'utilisation des variables. Une variable est
une sorte de boîte qui contient une valeur. Par exemple, je mets une chaussure dans une boite. La
'boite' représente la variable et la valeur est la 'chaussure'. L'intérêt principal des variables est leur
utilisation ultérieure. En effet, on peut utiliser une variable à n'importe quel moment dans le programme
en fonction de la portée de cette variable. (Voir chapitre sur la portée des variables)
III-A-1. Les variables
En ce qui concerne les noms des variables, on peut utiliser des majuscules, minuscules et chiffres. Les
espaces et autres caractères spéciaux ne sont pas acceptés (accents, @, ...).
Sélectionnez
'Exemple avec les variables précédentes
Dim Ma_Variable As String = " toto "
Dim Nombre As Integer = 45
Dim Compteur As Integer = 1000
Une variable peut aussi être instanciée par une fonction :
Sélectionnez
'Exemple de variable instanciée par une fonction
Dim Pi As Decimal = Fonction_pour_calculer_pi()
Exemple des variables
1. Ecrire un programme qui vous permet d’entrez votre nom et affiche « bonjour Monsieur » associe de votre nom.
Solution
En cet exercice nous apprenons la concatenation par le signe &. Ainsi le code deviens :
Public Class controle
End Sub
End Class
2. faire
Type de Mémoire
Plage de nombres acceptés Utilisation principale
variable occupée
+ / - 79 228 162 514 264 337 593 543 950 335 sans
Pour les nombres
Decimal 16 octets séparateur décimal sinon + / - 7.9 228 162… avec 28
décimaux
chiffres après le séparateur décimal
Integer 4 octets De - 2 147 483 648 à 2 147 483 647 Pour les nombres entiers
Dans tous les langages de programmation, il peut être utile voire même nécessaire de convertir des
variables d'un type dans un autre type. Cela permet d'éviter la création de nouvelles variables qui
alourdiraient le programme.
Tableau récapitulatif des fonctions permettant de convertir des variables
Fonction de Convertir vers le
conversion type...
CBool Boolean
CByte Byte
CChar Char
CDate Date
CDbl Double
CDec Decimal
CInt Integer
CLng Long
CObj Object
CShort Short
CSng Single
CStr String
Sélectionnez
'Exemples
Dim Pi As Decimal = 3.14 'crée la variable Pi qui vaut 3.14
Dim a As Integer = 15 'crée la variable a qui vaut 15
Une variable peut être utilisée que si elle est visible dans le programme. Pour définir le niveau de
visibilité de chaque variable, il existe un mot clé propre à chaque cas.
Les membres Protected sont similaires aux Private, mais ils ont une
Protected
particularité en cas d'héritage. Ce point ne sera pas abordé
Sélectionnez
'Exemple avec des sub et fonctions
Module Test_Portee
End Sub
End Sub
End Function
End Module
Cependant, il est déconseillé d'utiliser des variables globales (publics) car cela est une source
importante d'erreurs. Pour affecter une valeur à une variable public, il est préférable de passer par une
procédure d'affectation.
Sélectionnez
'Exemple
Module Test
Public Nombre As Integer
'Quelque part d'autre dans le programme on appel la procédure avec un argument de type Integer
Call Routine_Qui_Va_Affecter_La_Variable(45)
Sélectionnez
Nombre = 45
Mais cela est source d'erreurs... En effet, vous pouvez modifier la variable à tout moment sans même
vous en rendre compte ! A utiliser à vos risques et périls
Sélectionnez
If condition 1 vraie Then
'exécuter instructions
Else
'exécuter autre intructions
En français : Si la condition 1 est vraie alors on exécute le bloc Then sinon on exécute le bloc Else.
Sélectionnez
'Exemple
Dim code As Integer = 1739
Sélectionnez
If Not A=B Then MsgBox("A est différent de B") 'Si A et B sont différents (Not A=B signifie NON égaux) afficher "A est
différent de B".
Il peut y avoir des opérateurs logiques dans la condition:
Sélectionnez
If A=B And C=D Then.. 'Si A égal B et si C égal D
Des structures If - Then peuvent être imbriquées. C'est-à-dire que l'on peut emboîter plusieurs
conditions dans une seule condition :
Sélectionnez
'Exemple
If condition_1 vraie Then
If condition_2 vraie Then
MsgBox("Condition_1 Vraie et Condition_2 Vraie")
Else
If condition_3 Vraie Then
MsgBox("Condition_1 Vraie et Condition_2 Fausse et Condition_3 Vraie")
Sélectionnez
If Condition1 vraie Then
..
ElseIf condition2 Then 'sinon on teste la condition 2
..
ElseIf condition3 Then 'la condition 3
..
End If
Structure générale :
Sélectionnez
Select Case X
Case 1 : 'faire Y
Case 2 : 'faire Z
Case Else : 'faire A
End Select
Select Case : Mot clé permettant d'ouvrir la structure
Case : Représente les différents cas (Case 1 = cas 1, Case 2 = cas 2, Case Else = autre cas...)
End Select : Mot clé permettant de fermer la structure
X : Expression à évaluer (nombre, chaîne de caractères, booléen…)
faire Y : Exécute le cas 1
faire Z : Exécute le cas 2
faire A : Exécute le cas "else"
Prenons un exemple : Un serveur envoie un certain code mais on ne sait pas si c'est le 1, le 2 ou un
autre (comme 1000, 453, 876…) et vous voulez vous connecter si le code envoyé correspond au 1,
vous déconnecter s'il correspond au 2 et afficher un message d'erreur si c'est un autre code autre que
le 1 et le 2. Voilà la structure :
Sélectionnez
Select Case code
Case 1 : 'se connecter
Case 2 : 'se déconnecter
Case Else : 'erreur code non reconnu
End Select
La structure précédente est relativement simple mais limitée. On peut aussi utiliser d'autres types
d'expressions plus complexes et plus pratiques : Plusieurs expressions peuvent être séparées par des
virgules. Le mot-clé To permet de définir les limites d'une plage de valeurs correspondantes pour N. Le
mot-clé Is associé à un opérateur de comparaison (=, <> < <=, > ou >=) permet de spécifier une
restriction sur les valeurs correspondantes de l'expression. Si le mot-clé Is n'est pas indiqué, il est
automatiquement inséré. Vous pouvez aussi mixer les différents cas précédents. Enfin, vous pouvez
aussi indiquer des plages et des expressions multiples pour des chaînes de caractères. Dans l'exemple
suivant, Case correspond aux chaînes qui sont absolument identiques à " ttt ", aux chaînes comprises
entre "bbb" et "eee" dans l'ordre alphabétique, ainsi qu'à la valeur de " Nombre " :
Sélectionnez
'Exemple avec les virgules
Select Case N
Case 8, 9, 10
'Effectuer le code si N=8 ou N=9 ou N=10
End Select
'Exemple avec une plage de valeurs
Select Case N
Case 8 To 20
'Effectuer le code si N est dans la plage 8 à 20
End Select
'Exemple avec un opérateur de comparaison
Select Case N
Case Is >= 15
'Effectuer le code si N supérieur ou égal à 15.
End Select
Sélectionnez
For Variable = Debut To Fin
'Execute la boucle
Next Variable
For : Mot-clé permettant d'ouvrir la boucle.
To : Mot-clé signifiant " jusqu'à "
Next : Mot-clé pour fermer la boucle.
Variable : Variable qui va servir de compteur pour la boucle.
Debut : Début du compteur.
Fin : Fin du compteur.
Sélectionnez
'Exemple de boucle
Dim i As Integer
For i = 3 To 10
'Exécute la boucle pour i variant de 3 à 10
Next i
La variable i va s'incrémenter automatiquement de 1 à la fin de chaque boucle.
On peut aussi définir un pas, le compteur s'incrémente de la valeur du pas à chaque boucle :
Sélectionnez
'Exemple de boucle
Dim i As Integer
For i = 3 To 10 Step 2
MsgBox(i.ToString) 'affiche 3 puis 5 puis 7 et enfin 9
Next i
On peut aussi utiliser un pas négatif mais cela est plus compliqué.
La variable de la boucle peut être déclarée en même temps que la boucle. De plus, la variable après le
Next est facultative.
Sélectionnez
'Exemple
For Test As Integer = 0 To 43
'boucle de 0 à 43
Next
Dernière chose, on peut quitter la boucle prématurément :
Sélectionnez
'Exemple de sortie de boucle
For Test As Integer = 0 To 43
If Test = 3 then Exit For 'Quand Test sera égale à 3 alors on sort…
Next
Sélectionnez
Do
'Instructions
Loop Until Condition
Do
'Instructions
Loop While Condition
Do : Mot-clé qui ouvre la boucle.
Loop : Mot-clé qui ferme la boucle.
While : Mot-clé qui signifie " Tant que "
Sélectionnez
'Exemple avec Until
Dim i As Integer = 0
Do
i = i + 1 'incrémente i de 1
MsgBox(i.ToString) 'affiche la valeur de i
Loop Until i = 10 'Quand i = 10 on sort de la boucle.
Sélectionnez
While Condition
'Execute la boucle
End While
While : Mot-clé permettant d'ouvrir la boucle.
End While : Mot-clé qui ferme la boucle.
Condition : La condition pour rester dans la boucle.
Sélectionnez
'Exemple :
Dim Compteur As Integer = 0
While Compteur < 20 'Dès que Compteur = 20, on sort de la boucle.
Compteur = Compteur + 1 'incrémente le compteur de 1
Msgbox(Compteur.ToString) 'affiche le compteur
End While
Sélectionnez
For Each Item In Collection
'boucle
Next Item
For : Mot-clé pour ouvrir la boucle.
Each : Mot-clé signifiant " Chaque ".
In : Mot-clé signifiant " Dans ".
Next : Mot-clé pour fermer la boucle.
Item : Objet à récupérer dans la collection.
Collection : Tableau qui contient des Objets.
Sélectionnez
'Exemple
Dim Var_Item As String
For Each Item As Object In MonTableau
Var_Item = Var_Item + Item 'Var_Item va contenir tous les éléments du tableau en admettant que le tableau soit déjà
remplit.
Next Item
'Autre exemple
Dim Chaine As String = "Toto va bien"
Dim Caractere As String
For Each Caractere In Chaine
Msgbox(Caractere.ToString) 'affiche chaque caractère de Chaine
Next
"For Each - Next" est donc très utile pour tester une chaîne de caractère.
Sélectionnez
'Exemples
Dim x, y, Somme As Single
X = 10
Y = 15.4
Somme = X + Y 'Somme retourne 25,4
Dim a, b, c As Integer
a = 12
b=3
c = a Mod b 'c = 0 car la division tombre juste donc le reste = 0
Sélectionnez
'Exemples
Dim a, b As Integer
Dim Var, Var_1 As String
a = 13
b = - 15
Var = "Cool"
Var_1 = "Snif"
If (a Or b) < 0 Then
'Evalue la condition si a ou b est négative : ici c'est Vrai
End If
Opérateurs Signification
<> Différent de
= Egal à
Sélectionnez
'Exemples
Dim Age, AgeMin, AgeMax As Integer
Dim EntreeBoiteDeNuit As Boolean
Age = 12
AgeMin = 16
AgeMax = 45
Sélectionnez
'Exemples de constantes
Private Const Pi As Decimal = 3.14
Public Const Plat_Prefere As String = "Pates"
AireCercle = Pi * Rayon ^ 2
PerimetreCercle = 2 * Pi * Rayon
Sélectionnez
'Exemple
Private Enum Erreur
Logique
Execution
Syntaxe
Grammataire
End Enum
Sélectionnez
'On crée une énumération
Enum Action
Ajouter
Supprimer
Inserer
Selectionner
Sélectionnez
'Exemple création tableau
Dim Tableau(6) As Integer 'déclare un tableau de 7 entiers
Le premier élément d'un tableau est toujours à l'indice 0. Le dernier élément d'un tableau est toujours à
l'indice Length - 1 (dans l'exemple 7 - 1 = 6)
On peut modifier des valeurs dans le tableau.
Sélectionnez
'Exemple d'assignations
Tableau(2) = 3 'assigne la valeur 3 à l'élément d'indice 2
Tableau(0)= 98 'assigne la valeur 98 à l'élément d'indice 0
Tableau(7) = 3 'provoquera une erreur car l'indice est supérieur à 6
Le tableau contient donc :
98
0
Pour assigner un élément du tableau à une variable, on procède comme ceci :
Sélectionnez
'Affectation à une variable
Dim Var As Integer
Var = Tableau(0) 'Var contient donc 98
Pour effacer un tableau et récupérer la mémoire allouée par le tableau :
Sélectionnez
'Efface le tableau
Erase Tableau
Tableau = Nothing
'Ces deux commandes sont équivalentes.
Pour réinitialiser le tableau (remise à zéro des éléments) :
Sélectionnez
'Réinitialisation du tableau de l'index 0 au dernier index du tableau
Array.Clear(Tableau, 0, Tableau.Length)
Pour parcourir un tableau, rien de plus simple. On utilise une boucle :
Sélectionnez
'Lister les éléments d'un tableau
Dim Tableau(5) As Integer
For Each Item As Object In Tableau
MsgBox(Item.ToString) 'affiche chaque valeur du tableau
Next Item
Il existe des classes spéciales pour les tableaux 'ArrayList et SortedList' mais cela ne sera pas abordé
dans ce cours.
Le contrôle "CheckBox" (case à cocher)
La plupart des applications laissent une certaine marge de choix à l'utilisateur.
Sélectionnez
If CheckBox1.Value = 0 Then
'Instructions
Beep 'Emet un son sur le haut parleur du PC lorsque le "Beep" est activé
Else
'Instructions
Beep
End If
1 Activée vbChecked
En règle générale, et si vous ne savez pas quelle instruction écrire ou dans le cas d'un traitement
conditionnel, ou si vous ne savez pas quelle direction va prendre votre pointeur(surtout si vous utilisez
"Else" dans votre procédure), saisissez l'instruction "Beep" qui n'aura aucune influence sur votre
programme mais qui vous indiquera exactement ou se dirige votre pointeur, puis, si vous lancez
l'application et que vous entendez le Beep, vous aurez la confirmation que l'instruction aura été prise en
compte. Vous n'aurez plus qu'à remplacer "Beep" par les instructions définitives. Si vous voulez fixer en
interne l'état d'une case à cocher comme étant "non cochée", c'est à dire en écrivant du code, vous
écrirez l'instruction suivante :
CheckBox1.value = 0
Pour quelle soit cochée, vous écrirez :
CheckBox1.Value = 1
Pour quelle apparaisse en grisé, vous écrirez :
CheckBox1.Value = 2
Le texte affiché à coté de la case à cocher est déterminé par la propriété "Caption".
Vous pouvez modifier l'alignement du texte à droite ou à gauche avec la propriété "Alignment"
Exemple
Code
Public Class checkbox
End Sub
Cbodoll.Items.Add("dollars")
Cbodoll.Items.Add("Euro")
Cbodoll.Items.Add("Shilling")
End Sub
End Class
2. Ecrire un programme qui permet à l’utilisateur de saisir un montant en franc et de choisir la monnaie de
destination pour convertir (C) en affichant le résultat dans les Labels.
Sélectionnez
Sub Option1_Click ( )
If Option1.Value = True Then
'Instructions si l'option1 est activée
Else
'Instructions si l'option2 est activée
End If
End Sub
Exploitation d'un événement utilisateur avec 3 boutons d'option :
Sélectionnez
Sub Option1_Click ( )
If Option1.Value = True Then
'Instructions si l' option1 est activée
Sélectionnez
Sub Option1_Click ( )
Fichier1.Pattern = "*.exe"
End Sub
Exercice
Faire un programme en Visual basic qui permet de convertir le montant en dollars, en euro et en shilling aux taux
respectifs : dollar =500, euro =800, livre = 900 et affiche dans un label l’intitule de la monnaie.
Code
Public Class frmconversion
Else
If optdol.Checked = True Then
lblconv.Text = Val(txtmont.Text) / 600
lbldev.Text = "Dollars"
Else
If optEur.Checked = True Then
lblconv.Text = Val(txtmont.Text) / 750
lbldev.Text = "Euro"
Else
If optShill.Checked = True Then
lblconv.Text = Val(txtmont.Text) / 0.8
lbldev.Text = "shilling"
Else
lblconv.Text = ""
lbldev.Text = ""
optdol.Checked = False
optEur.Checked = False
optShill.Checked = False
End Sub
End Class
Resultat
Travail pratique
ou plusieurs éléments. Si le nombre d’éléments contenus dans la liste dépasse celui qui peut être
affiché, une barre de déplacement (ascenseur) s’affiche automatiquement.
Une zone de liste peut être créée en mode "Conception" comme décrit dans l'exemple exo2, dans ce
cas le remplissage de la zone de liste est réalisé par la procédure événementielle "Load" qui est
appelée lors du chargement de la feuille. En mode "Exécution" nous utiliserons la méthode "AddItem".
Sélectionnez
Objet.AddItem "Element"
L'argument "Objet" désigne le nom du contrôle, c’est à dire celui de la zone de liste.
L'argument "Element" est l’entrée qui doit être ajoutée.
Ex : lstZonedeliste.AddItem "Help System Restorer" L'application décrite montre l’utilisation d' une
zone de liste. Elle comprend une "TextBox", une zone de liste, deux "Label", 4 boutons poussoirs.
Nous avons utilisé dans ce module les "Méthodes" "RemoveItem" et "Clear" La méthode
"RemoveItem" nous permet après avoir sélectionné la ligne qui nous intéresse de pouvoir
sélectivement la supprimer. La méthode "Clear" quant à elle efface complètement le contenu de la liste.
Nous avons également utilisé les propriétés "ListCount" La propriété "List" est liée à la propriété
"ListCount", qui renvoie le nombre d'entrées de la liste. Dans l’exercice Exo2 la propriété "ListCount"
renvoie le nombre d'entrée que vous saisissez et rectifie le nombre indiqué lorsque vous effacez une ou
plusieurs entrées. Vous pourrez étudier tous les autres contrôles dans les cours que nous diffusons sur
notre site.
chap : MsgBox -inputbox- Instruction ou fonction
I. Introduction
Cette instruction très utilisée dans Visual Basic permet de poser une question à l’utilisateur au travers
d’une boîte de dialogue. Celle-ci peut être paramétrée en définissant le nombre de boutons poussoir,
l’icône de la boîte et le bouton par défaut, c’est à dire celui qui sera enfoncé quant vous appuyez sur la
touche "Entrée".
Sélectionnez
M$ = M$ + " suite du message" (vous pouvez aussi utiliser le caractère "&" à la place du caractère "+")
Reponse% = MsgBox(M$, 4 + 32, T$)
et voici la réponse que vous pouvez éventuellement utiliser :
Sélectionnez
If Reponse% = 6 Then End 'Sortie du programme
J’utilise depuis Vb 3.0 la fonction précédente qui fonctionne sous toutes les versions connues à ce jour.
Nous allons les étudier en détail avec les tableaux suivants.
Les constantes pour les boutons :
Constante Chiffre Description
Chaque bouton lorsqu'il est activé, renvoie une valeur que l'on pourra interpréter au travers de la
variable. Si vous ne mettez pas le paramètre "Type" l' instruction MsgBox n'affichera que le bouton "OK"
Les constantes renvoyées par MsgBox :
Constante Chiffre Description
vbOk 1 OK
vbCancel 2 Annuler
vbAbort 3 Abandonner
vbRetry 4 Réessayer
vbIgnore 5 Ignorer
vbYes 6 Oui
vbNo 7 Non
Le code suivant montre un exemple de paramétrage de boîte de dialogue MsgBox avec retour de valeur
d’une variable
Sélectionnez
Private Sub Button_Supprime_Click ( )
Dim Sup
Sup = MsgBox("Veuillez confirmer la suppression du fichier", vbCritical + vbYesNo + 256, "Attention")
If Sup = vbYes Then
MsgBox "Suppression confirmée"
Messagebox
Vous allez entrer vos premières instructions, pour donner un comportement à la fenêtre. Double-cliquez sur le bouton de la
fenêtre. Vous vous retrouvez sous un nouvel onglet, face à ce texte :
Une boîte de dialogue est affichée ; elle contient le message "Bonjour" suivi de votre prénom. Cliquez sur OK et fermez la
fenêtre de votre programme. Analysons maintenant ce que vous avez fait
InputBox()
La fonction MsgBox() permet d'envoyer des messages a l'utilisateur, et donne la possibilité, à celui-ci de
répondre en cliquant sur des boutons de commande. La suite du code s'exécute en fonction du bouton
sélectionné. Mais il arrive que la question à poser ne se réponde pas par "oui", "non", ou autre. On peut
alors faire appel à la cousine de MsgBox() : InputBox() ! La fonction InputBox() est une de boîte de
message qui s'affiche avec un bouton "ok", "annuler" (comme MsgBox ), et une zone de texte ! (qui
permet à l'utilisateur de répondre par une chaine de caractères (comme son âge, adresse etc...) et non
de cliquer sur un bouton se limitant à "oui" ou "non".)Cette combinaison d'une boite de message et
d'une zone de texte est appelée boite d'entrée ( en anglais, input-->entrée, box--> boite). La boite
d'entrée n'affiche pas non plus d'icône.Voici son format : nomquelconque = inputbox("message", "titre", "defaut",
placement X, placement Y)
le "nomquelconque" doit être spécifié si l'on veut placer une instruction "if"....
"message" est l'argument spécifiant le message. (le message est situé entre deux guillemets "") "titre"
est l'argument spécifiant le titre de la boite d'entrée. (le titre est situé entre deux guillemets "") "defaut"
est l'argument indiquant la chaine de caractères qui apparait en premier dans la zone de texte. (defaut
est situé entre deux guillemets ""). Il est utilisé pour les reponses évidentes, comme ça l'utilisateur n'a
plus qu'a cliquer sur "ok". placement X et Y indique la position sur l'écran de la boite d'entrée. Je ne
m'attarderai pas dessus (et je vous les déconseille) car ils sont difficiles à maitriser...
L'argument "message" est obligatoire, les autres sont optionnels...
Voici comment afficher une boite d'entrée qui demande a l'utilisateur "comment il va", avec comme titre,
"question", et comme valeur par défaut "bien". Si l'utilisateur entre la valeur "bien" (valeur par défaut..)
un message "moi aussi" apparait. S'il répond "mal" un message "dommage" s'affiche. S'il répond autre
chose, un message "plouf" apparait.
nomquelconque = InputBox("Comment vas-tu ?", "question", "bien")
'boite d'entrée...
Conclusion
Maintenant, vous maitrisez parfaitement la fonction MsgBox()! et presque autant la fonction InputBox()!
ainsi que l'instruction if !
Les boîtes de dialogues de Windows
III-G. Les options de codage
Il en existe seulement trois types dont deux sont très répandus. Ces options permettent un meilleur
codage et une meilleure compréhension du code. Le fait de les activer empêche le programmeur de
faire des erreurs de logique implicites (conversions implicites ou liaisons tardives par exemple). Voilà
comment les utiliser :
Sélectionnez
'Ces lignes de code doivent être écrites tout en haut de la feuille
Option Strict On 'active le mode Strict
Option Strict Off 'désactive le mode Strict
Option Explicit On 'active le mode Explicit
Option Explicit Off 'désactive le mode Explicit
Option Compare Binary 'mode binaire pour la comparaison de chaînes
Option Compare Text 'mode texte pour la comparaison de chaînes
'Option Strict Off permet n'importe quoi. C'est du Basic au mauvais sens du terme.
'Option Strict On oblige à une grande rigueur. C'est du VB.Net
Je vous conseille de laisser Option Explicit à On, ce qui oblige à déclarer toutes les variables avant de
les utiliser Dans ce cas si vous tapez le nom d'une variable non déclarée, VB.NET génère une erreur.
Par défaut, l'Option Explicit est à On et l'Option Strict à Off pour Visual Basic 2005. En revanche, les
deux options sont désactivées par défaut sous Visual Basic 2003 !
Pour créer un élément, il faut aller dans la boite à outils à gauche dans l'IDE (Integrated Development
Environment). Sélectionnez le composant à ajouter au formulaire (bouton, label, …) puis positionnez le
dans le formulaire.
Les contrôles présentés dans ce chapitre sont des contrôles de Visual Basic .NET Version 2005
(Framework 2.0). Il se peut que certaines propriétés n'existent pas avec la version 2003 de VB.NET.
Donc ne vous affolez pas si toutes les propriétés des tableaux n'apparaissent pas pour les différents
outils de la boîte à outils
IV-B. La Form
Les Forms sont des formulaires Windows. En programmation, on les appelle des " Windows Form ".
VB.NET génère automatiquement une Form lors de la création d'un projet. Pour créer une nouvelle
Form, cliquez sur 'Ajouter un formulaire' dans le menu 'Projet'. Comme chaque contrôle, les Forms
possèdent des propriétés (cf tableau). Pour afficher la boîte de propriétés, cliquez sur le contrôle puis
appuyez sur F4.
Tableau des propriétés les plus utilisées :
Propriété Description
Sélectionnez
'Exemple de lignes de code utilisant la console
Dim LigneTapee As String = Console.In.ReadLine() 'permet de lire du texte
Console.ReadLine() 'marche aussi
Console.Out.WriteLine("Ligne à afficher") 'pour afficher du texte
Console.WriteLine 'est aussi accepté
IV-D. Le Bouton
Le bouton est le composant le plus important puisque c'est grâce à lui que l'utilisateur pourra interagir
avec le programme. Un bouton permet essentiellement de valider ou d'annuler une fonction.
Tableau des propriétés les plus utiles
Propriété Description
IV-E. Le Label
Un label est un élément permettant d'informer l'utilisateur d'une chose. Par exemple, pour indiquer à
l'utilisateur d'entrer son nom dans une TextBox, on utilise un 'Label'. Ils renseignent donc sur l'utilisation
du programme. Un label ne peut pas être modifié par l'utilisateur.
Tableau des principales fonctions du label :
Propriété Description
IV-F. La Textbox
Les TextBox sont des emplacements pour accueillir du texte (d'où le nom de TextBox). Elles sont très
utiles pour récupérer du texte. Par exemple dans MSN vous entrez vôtre login et vôtre mot de passe
dans des TextBox prévues à cet effet. Une TextBox peut donc être modifiée par l'utilisateur.
Tableau des différentes propriétés d'une TextBox :
Propriété Description
Exercice
1. Faire un programme qui permet d’effectuer les opérations : addition, soustraction, division et
multiplication. Le choix se fait dans le combobox qui appelle directement les inputs box afin de faciliter
l’entrée des termes a et b sources d’opérations. Le champ observation permet d’afficher l’opération
faite.
Code source
Public Class frmlistages
Dim a, b As Integer
Private Sub frmlistages_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
cbooper.Items.Add("Addition")
cbooper.Items.Add("Soustraction")
cbooper.Items.Add("Division")
cbooper.Items.Add("Multiplication")
End Sub
2. Voici l’interface de conversion de monnaie par sélection de départ et monnaie d’arrivée par les
combobox.
3. exerc
La ListBox est le contrôle le plus facile à maîtriser. Il permet d'ajouter en ligne des éléments. Quand on
organise des dossiers ou fichiers avec Windows en mode 'Liste' on obtient le résultat dans une ListBox
(voir photo).
nœuds, ce qui rend ce contrôle difficile d'accès aux débutants (comme je l'étais avant, je confirme que
j'ai galéré avec ce contrôle !). Dans Windows, cliquer sur 'Poste de Travail' puis 'Dossiers' et vous
obtenez une TreeView (voir photo).
Code source
Public Class frmlisteameliorer
End Class
IV-J. La Picturebox
Les PictureBox permettent d'afficher des images et de les redimensionner.
Tableau des propriétés d'une PictureBox
Propriété Description
IV-K. La Progressbar
Les ProgressBar permettent de suivre l'évolution d'une application. Windows utilise de nombreuses
ProgressBar (lors de la recherche d'un fichier par exemple). Pour faire fonctionner une ProgressBar, il
faut spécifier une valeur pour la propriété Minimal et une autre valeur pour la propriété Maximal. Si vous
souhaitez représenter un pourcentage d'avancement d'une opération, mettez 0 pour Minimum et 100
pour Maximum.
Tableau des propriétés d'une ProgressBar
Propriété Description
IV-L. Le Tabcontrol
Le TabControl est un outil très important et surtout bien pratique. En effet, il permet de mettre beaucoup
de choses dans peu d'espace puisqu'il gère cela en onglets. Dans un TabControl, il y a des TabPages.
Vous pouvez définir autant de TabPages que vous le souhaitez.
Tableau des propriétés d'un TabControl :
Propriété Description
ImageList Objet qui permet de contenir des images pour les onglets
souris
Sélectionnez
'Exemples avec les boîtes de dialogues
Dim Selection As String
Dim Couleur As Color
FolderBrowserDialog.ShowDialog()
Selection = FolderBrowserDialog.SelectedPath 'récupère le chemin du dossier
OpenFileDialog.ShowDialog()
Selection = OpenFileDialog.FileName 'récupère le nom et le chemin du fichier
ColorDialog.ShowDialog()
Couleur = ColorDialog.Color 'récupère la couleur sélectionnée
FontDialog.ShowDialog()
MonFont = FontDialog.Font 'récupère le font (police, taille et style)
V. Le débogage
Le débogage est une étape très importante et fastidieuse. Elle permet de trouver et de corriger les bugs
du programme. De nombreux outils sont à notre disposition pour nous aider mais le débogage reste
encore une tâche difficile.
V-A. Les différents types d'erreurs
En programmation, il existe trois types d'erreurs possibles :
a. Les erreurs de syntaxe
b. Les erreurs d'exécution
c. Les erreurs de logique
Une erreur de syntaxe naît de la mauvaise orthographe d'une commande. Si vous tapez INTEGEER
au lieu de INTEGER, VB.NET n'a aucune idée de ce que INTEGEER signifie et il n'essaye même pas
d'exécuter le reste du programme. Les erreurs de syntaxes sont affichées dans la liste d'erreurs.
Lorsque VB.NET rencontre une erreur de syntaxe, il met gentiment dans la liste d'erreurs le mot mal
orthographié pour vous montrer exactement quel est le problème. Il suffit donc de corriger l'orthographe
de la commande et d'exécuter à nouveau le programme. Il suffit d'une seule erreur de syntaxe pour
empêcher le programme de s'exécuter. Lorsque votre programme s'exécute finalement pour la première
fois, vous savez que le programme ne possède aucune erreur de syntaxe.
Une erreur d'exécution est plus subtile qu'une erreur de syntaxe car elle ne se produit que lorsque
votre programme reçoit des données qu'il n sait pas vraiment gérer. Un programme peut être truffé
d'erreurs d'exécution, vous ne le saurez pas tant que vous n'avez pas exécuté le programme. Pour
déclencher une erreur d'exécution dans votre propre vie, allez au MacDo et, lorsque l'employé vous
demande ce qu'il peut faire pour vous, commander une crêpe. Du fait que l'employé attend de vous que
vous commandiez quelque chose qui fait partie du menu des MacDo, il ne saura pas vous répondre et il
est probable qu'il en suivra une erreur d'exécution. (C'est une image mais c'est compréhensible).
Sélectionnez
'Exemple d'erreur d'exécution
Dim MonTableau As New ArrayList 'déclare un tableau
MonTableau = Nothing 'détruit le tableau
MonTableau.Items.Add(" Cool ") 'provoquera une erreur d'exécution car MonTableau n'existe plus puisqu'il vaut " nothing "
Sachez que même les grands programmes (MSN et autres) comportent des bugs qui sont des erreurs
d'exécution. Il est impossible de créer un gros programme sans aucune erreur. Les programmeurs
professionnels utilisent des méthodes permettant d'anticiper, détecter et corriger le plus d'erreurs
possibles.
Le type de bugs le plus délicat est dû à une erreur de logique. Une erreur de logique se produit
lorsque le programme ne fonctionne pas correctement parce que vous lui avez fourni de mauvaises
commandes. Par exemple, si vous avez des enfants adolescents, demander leur de ranger leur
chambre ou de faire la vaisselle. Ils s'acquitteront de la tâche mais pas forcément de la façon prévue.
Au lieu de bien nettoyer les assiettes, ils vont peut-être seulement les mettre sous l'eau froide, ou alors
mettre tout leur boxon sous leurs lits... Dans ces deux situations, l'adolescent a suivi vos instructions.
Vos instructions n'étaient tout simplement pas assez précises ! Un ordinateur n'est pas très différent
d'un adolescent !? (douteux). S'il peut trouver une échappatoire à vos instructions, il ne s'en privera pas
! Le problème est que comme vous pensez que vous avez donné à l'ordinateur la bonne marche à
suivre, vous n'avez aucune idée de pourquoi le programme ne fonctionne pas. Il faut maintenant trouver
l'endroit où les instructions ne sont pas assez précises et claires. Dans le cas d'un grand programme,
vous avez éventuellement à le relire entièrement ligne par ligne (quel plaisir).
V-B. Comment éliminer les bugs ?
Etant donné que les bugs sont inévitables et en plus invisibles à l'oeil nu, il faut pouvoir les détecter puis
comprendre ce qui les a provoqués afin de pouvoir les corriger. Une fois le bug localisé, il suffit de le
corriger mais attention en corrigeant un bug vous pouvez en avoir créés d'autres ! Donc je vous
conseille vivement de réécrire la partie du code qui contient le bug. En d'autres termes, le débogage est
loin d'etre une tâche facile. Trouver l'endroit où se cache le bug est la partie la plus difficile. Le moyen le
plus simple est d'exécuter le programme ligne par ligne mais cela reste assez fastidieux. Imaginez que
votre programme comporte 10 000 lignes de code, je vous vois mal examiner les lignes une par une ! Il
faut donc utiliser d'autres méthodes. Il convient de regarder la partie du programme où vous pensez
que le bug est susceptible d'agir. Par exemple, si votre fichier ne s'enregistre pas correctement, l'erreur
Sélectionnez
'Exemple de piège à erreur dans VB.NET
Try 'Ouvre le piège
Dim a As Integer = 30
Dim b As Integer = 0
Call CalculerPi()
Catch Ex As Exception 'Intercepte l'erreur en cas de pb
MsgBox(Ex.ToString) 'Affiche l'erreur : Ici Division par 0 impossible
End Try 'Ferme le piège
Dans cet exemple, le programme va planter car la division par 0 n'est pas possible en mathématiques.
Lorsque le programme va exécuter la ligne du calcul du résultat de la division, le code va passer
immédiatement dans le Catch et afficher le message d'erreur. Par conséquent, la fonction CalculerPi
ne sera pas exécutée. Vous comprenez donc que pour tester une partie de code, il suffit de copier ce
code entre le Try et le Catch. Il ne vous reste plus qu'à gérer l'erreur en l'affichant. Il existe d'autres
méthodes pour intercepter les erreurs. Par exemple, Visual Studio fournit des outils de débogage. Le
pas à pas consiste à exécuter le programme ligne par ligne en s'interrompant après chaque ligne. Vous
pouvez alors voir ce que le programme a réalisé et étudier le code. Si le programme fonctionne bien de
la façon dont vous le voulez, c'est que la ligne est correcte. Dans le cas contraire, il y a un bug que vous
venez de découvrir. Pour traverser un programme pas à pas, appuyer sur F11 pour un pas à pas
détaillé : la commande pas à pas détaillé traverse la totalité du programme ligne par ligne, y compris
les lignes dans les procédures du programme. L'autre option est d'utiliser un pas à pas principal en
appuyant sur F10 : Le programme traverse la totalité du programme mais à chaque fois que Visual
Basic rencontre une procédure, il exécute toutes les instructions dans cette procédure sans vous obliger
à visionner ligne par ligne la procédure (c'est donc plus rapide). Les commandes pas à pas détaillé et
pas à pas principal commencent l'exécution au début du programme et la poursuivent jusqu'à la fin.
Pour des gros programmes, cette méthode devient fastidieuse et compliquée. Pour sauter certaines
parties de votre programme dont vous savez déjà qu'elles fonctionnent, vous pouvez définir des points
d'arrêt. Un point d'arrêt indique à Visual Basic d'exécuter le programme jusqu'à atteindre le point
d'arrêt. Pour mettre en place un point d'arrêt rien de plus simple, cliquer à gauche de la ligne où vous
souhaitez insérer une point d'arrêt. Visual Basic affiche un point rouge dans la marge de gauche pour
vous montrer à quelle ligne correspond le point d'arrêt. Pour supprimer un point d'arrêt, cliquer de
nouveau sur la ligne dans la marge. Si vous souhaitez supprimer tous les points d'arrêt d'un seul coup,
aller dans le menu déboguer puis cliquer sur effacer tous les points d'arrêt. La dernière méthode pour
intercepter les bugs est l'espionnage de variables. Cette fonction est très utile. Elle permet de vérifier
la valeur d'une variable à tout moment, comme ça vous pouvez contrôler la variable. Pour ajouter un
espion, vous devez d'abord déboguer le programme. Ensuite sélectionner la variable et faites un clique
droit puis sélectionner Ajouter un espion. L'espion apparaît dans la fenêtre des espions. Elle affichera la
valeur de la variable à chaque instant. Pour récapituler, pour combattre un bug, il faut le localiser, puis
le détruire. Pour détruire les bugs, vous disposez du pas à pas (principal ou détaillé), des points
d'arrêt (pour intercepter le code à un endroit précis), des espions (pour espionner des variables) et
des pièges à erreurs (pour gérer des erreurs).
Les menus
Dans ce chapitre, nous allons parler d'un élément important : les menus. Vous savez, les menus, la
barre en haut de votre navigateur favori par exemple, avec Fichier, Édition, etc. Et celle juste en dessous,
avec les images (la barre d'outils) !
Encore une fois, l'IDE nous mâche le travail ; vous allez voir !
Présentation des menus
Vous devez voir dans votre boîte à outils un sous-menu Menus et barres d'outils, semblable à la figure
suivante. Comme vous pouvez le constater, ces objets nous permettront de créer : des menus (1), une
barre d'outils (2), une barre de statut (3) et un menu contextuel (4) (menu que vous voyez s'afficher lors
du clic droit sur la souris).
Cette propriété est Dock, et comme notre IDE est gentil, il nous offre la possibilité de paramétrer cette
propriété en cliquant sur la petite flèche en haut à droite de notre menu, comme à la figure suivante.
Ces événements seront créés grâce à l'assistant Visual Studio comme le clic sur un bouton : un double-
clic sur le sous-menu que vous voulez gérer, le code s'ajoute automatiquement :
Private Sub BonjourToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Bonj
ourToolStripMenuItem.Click
End Sub
Faites cela pour tous les sous-menus (sinon à quoi ça sert de les créer).
Je peux le faire sur les menus comme Fichier aussi ?
Oui bien sûr, si vous en trouvez l'utilité !
Bon, voilà donc le code dûment rempli :
Public Class Form1
End Class
Eh oui, tant de lignes pour si peu ! Je pense que vous avez compris l'utilité ce que doit faire le
programme : lors du clic sur un sous-menu de Afficher, il affiche ce texte, lors du clic sur Reset, il efface,
et lors du clic sur Quitter, il quitte le programme (le End effectuant cette action).
Bon, vous vous souvenez des MsgBox ?
Eh bien, elles vont nous être utiles ici : nous allons mettre une confirmation de sortie du programme.
Je pense que vous êtes capables de le faire par vous-mêmes, mais bon, je suis trop aimable :
If MsgBox("Souhaitez-vous vraiment quitter ce magnifique programme ?", 36, "Quitter") = MsgBoxResult.Yes Then
End
End If
Pourquoi 36 en deuxième argument ?
Vous ne vous en souvenez pas ? Je vous redonne le tableau :
Le programme demande
confirmation avant de se fermer
Les différents contrôles des menus
Je viens de vous montrer un menu classique avec du texte comme contrôle, mais vous en voulez
sûrement plus. Eh bien, c'est parti : nous allons créer des combobox (listes déroulantes) et des textbox.
Dans le menu ??
Eh bien oui ! Vous ne devez pas en voir souvent, mais ça peut être utile !
Donc, pour avoir accès à ces contrôles supplémentaires, il faut cliquer sur la petite flèche disponible à
côté du « Tapez ici » (voir figure suivante).
« Tapez ici »
Vous voyez que s'offrent à vous les contrôles tant désirés ! Eh bien, personnalisons un peu notre menu
pour arriver à la figure suivante.
Écrivons maintenant notre code : côté combobox, on veut afficher le texte correspondant à l'item de la
combobox, l'événement SelectedItem sera utilisé, le SelectedValue n'étant pas disponible dans cette façon
d'utiliser la combobox.
Ce qui nous donne :
Private Sub CB_MENU_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles C
B_MENU.SelectedIndexChanged
Me.LBL_TEXTE.Text = Me.CB_MENU.SelectedItem
End Sub
Bon, pour notre bouton Écrire, ce n'est pas sorcier : on récupère la valeur de la textbox et on l'affiche ;
voilà le tout :
Public Class Form1
Notre rendu !
Comme vous voyez, le VB est assez facile à utiliser dans différentes situations puisque les propriétés
ne changent pas. Bon, maintenant que vous savez ça, on ne se repose pas sur ses lauriers, on avance.
La barre de statut
Au tour de la barre de statut. Il s'agit de la barre qui vous indique… le statut de l'application. À quoi va
nous servir cette barre ? Eh bien à afficher le statut de votre application par exemple, ou alors tout
simplement à mettre des boutons dessus ! Je vais vous montrer une manière d'utiliser à bon escient
cette barre, après, à vous de faire ce que vous voulez et de trifouiller toutes ses propriétés !
Créons déjà ladite barre : toujours dans le menu Menus et barres d'outils, vous choisissez StatusStrip. Vous
l'intégrez à la feuille, elle se place en bas (normal), vous pouvez changer en agissant encore une fois
sur la propriété Dock. Ajoutez deux contrôles : un label et une progressbar. La progressbar est
accessible, comme pour la combobox de la partie précédente, avec la petite flèche. Renommez-les :
LBL_STATUT, PGB_STATUT.
Nous allons nous servir de la progressbar comme indication d'avancement. Évidemment, ici, afficher un
label n'est pas sorcier, notre ordinateur ne va pas réfléchir plus d'une milliseconde (oui, même sous
Windows 3.1). Nous allons donc simuler une pause.
Pour utiliser cette progressbar comme indication, voici une astuce. Lors d'un transfert comme un
téléchargement, calculez la taille totale du fichier, le taux de transfert, ressortez le temps, et ajustez
votre progressbar à ce temps, et voilà comment s'en servir comme source d'indication. Mais bon ce
n'est pas pour tout de suite.
Recréons donc un petit timer pour simuler le temps d'attente (TIM_STATUT) et utilisons le même procédé
que lors du chapitre sur les timers. Nous allons donc faire progresser la barre et afficher dans le label le
statut. C'est un exercice que vous pouvez évidemment faire.
Voici donc une solution :
Public Class Form1
End Sub
End Sub
End Sub
End Class
Bon, pour ce code, je ne me suis pas trop fatigué : j'ai copié le code du chapitre sur les timers. La «
pause » n'est pas effectuée donc le texte s'affiche pendant la progression. C'est un exemple, vous
pourrez utiliser les barres de chargement en situation réelle plus tard. L'idéal aurait été de placer un
sémaphore (un flag), le tout avec une boucle While. Le rendu se trouve à la figure suivante.
Alors, le menu contextuel est, comme je vous l'ai expliqué, le menu visible lors du clic droit. Nous allons
créer un contextmenu, toujours dans la suite de notre programme qui va déplacer le label qui nous sert à
afficher le texte.
Donc, toujours dans le menu de la boîte à outils : Menus et barres d'outils, vous prenez le ContextMenuStrip
et vous l'intégrez à la feuille. Une fois cela fait, créez un élément contenant le texte : « Déplacer le label
ici ». Ensuite, comme à l'accoutumée, on crée son événement correspondant. Dans cet événement,
nous allons récupérer la position du curseur et changer la propriété location du label :
Me.LBL_TEXTE.Location = Control.MousePosition
Control.MousePosition est la propriété de position de la souris (Control). Eh oui, même la souris a des
propriétés, vous en rêviez, n'est-ce pas ?
Et donc voilà, une fois tout le code bien agencé :
Public Class Form1
End Sub
End Sub
End Sub
L'assistant d'installation s'ouvre. Il va vous guider à travers les étapes à suivre pour créer votre
installation. La page d'accueil s'affiche. Cliquez sur Suivant
Choisissez l'option Créer un programme d'installation pour une application Windows (cochée par
défaut).
S'il s'agit d'une application Web, choisissez l'autre option. Ne cochez rien dans Voulez vous créer un
package redistribuable.
Dans la fenêtre suivante, sélectionnez la sortie principale du projet. Visual Studio générera un fichier
Exe pour votre application (dans certains cas cela peut être un fichier dll s'il s'agit d'un projet
bibliothèque de classe). Cliquez sur Suivant.
Ici, vous pouvez ajouter des fichiers supplémentaires à votre application. Par exemple, si votre
programme contient une icône, vous devez ajouter le fichier Ico manuellement via cette interface. Pour
cela, cliquez sur Ajouter puis cherchez votre fichier sur votre disque dur. Idem si vous souhaitez ajouter
un fichier Read Me. Une fois tous vos fichiers ajoutés, cliquez sur Suivant.
Un récapitulatif de votre installation s'affiche. Vérifiez vos choix. En cas d'erreur vous pouvez cliquer sur
Précédent sinon cliquez sur Terminer.
Voilà la création de l'installation est terminée ! Mais il reste quand même à configurer quelques
petites choses !
VI-B. Faire connaître son application
Vous apercevez un nouveau projet dans votre solution. Ceci est le projet de l'installation de l'application.
Cliquez sur Setup1 (le nom de votre installation) puis appuyez sur F4 (fenêtre propriétés).
Le ProductCode à changé, cela est normal. En effet, pour détecter les versions d'un même
programme, le programme d'installation regarde le ProductCode de l'ancienne installation. Si vous
avez spécifié True dans RemovePreviousVersion alors le programme d'installation effacera
automatiquement l'ancienne version (pratique non ?) Faites un clic droit sur Setup1 et choisissez
Affichage et Interface Utilisateur.
Ici, ce sont les fenêtres de votre installation qui sont référencées. Ne touchez rien dans Installation
d'administration. Cliquez sur Bienvenue et faites F4. Vous pouvez ici modifier le texte de bienvenue ou
alors le copyright et même ajouter une bannière. Configurez le à votre guise ! Vous pouvez répéter
l'opération pour les fenêtres Dossier d'installation, Confirmer l'installation, Progression et Terminé. Une
option intéressante est l'ajout de nouvelles fenêtres. Pour cela, choisissez la catégorie où vous
souhaitez ajouter une boite de dialogue (Début, Progression ou Fin toujours dans Installer !!), faites un
clique droit et sélectionner Ajouter une boite de dialogue. Faites vos choix. Je n'expliquerai pas les
différentes boîtes de dialogue puisqu'elles sont expliquées dans l'explorateur de Visual Studio (cliquer
sur une boite de dialogue et la description apparaît en bas). De plus, les noms sont assez explicites.
Enfin, si vous souhaitez modifier l'ordre d'apparition des fenêtres lors de l'installation, clic droit sur la
boite de dialogue et sélectionner Monter ou Descendre selon votre convenance.
VI-C. Créer un raccourci pour votre application
Faites un clic droit sur Setup1 et choisissez Affichage puis Système de Fichier. Cliquez sur Dossier
d'application. Dans le volet de droite, faites un clic droit sur la sortie principale du projet et sélectionner
Créer un raccourci. Renommer votre raccourci puis glisser le dans Menu Programmes de l'utilisateur
et dans Bureau de l'utilisateur volet de gauche). Vous l'avez déjà compris, le raccourci s'affichera sur le
bureau de l'utilisateur (Bureau de l'utilisateur) et dans le menu démarrer (Menu Programmes de
l'utilisateur). Enfin, pour affecter une icône à votre raccourci, sélectionner le puis clic droit et aller dans
Propriétés. Cliquez sur Aucun dans Icon et sélectionner Parcourir dans le menu déroulant. Aller
chercher votre icône ou ajouter la si cela n'est déjà fait. Ne toucher pas aux autres propriétés.
Si vous avez oublié d'ajouter un fichier à votre installation, pas de panique ! clic droit sur Setup1 (et oui
encore là !!) et faites Ajouter puis Fichier.
Voilà c'est vraiment fini, c'était si dur que ca ? Maintenant n'oubliez pas de générer votre projet. Rien
de plus simple, clic droit sur Setup1 (décidément y'en a marre...) et choisissez Générer. La génération
s'affiche dans la fenêtre de Sortie. La barre de statut vous informe que la génération à réussi.
Le setup est créé dans le dossier de votre solution et contient un fichier Msi et Exe. Celui que vous
distribuerez à vos amis est le fichier Msi.
Il existe deux modes de génération Debug et Release. Si votre application est en Beta-Test, choisissez
le mode Debug sinon si votre application est finie et ne comporte aucun bug, sélectionnez Release.
Pour changer le mode de génération, clic droit sur Setup1 puis Propriétés. En haut à gauche, dans
configuration, choisissez Release ou Debug. Faites une nouvelle génération puis prendre en compte
les modifications.
Code y relatif
Public Class frminscription
Dim tot As Integer
Private Sub TetudiantBindingNavigatorSaveItem_Click(ByVal sender As System.Object,
ByVal e As System.EventArgs) Handles TetudiantBindingNavigatorSaveItem.Click
Me.Validate()
Me.TetudiantBindingSource.EndEdit()
Me.TableAdapterManager.UpdateAll(Me.Td2DataSet)
End Sub
End Sub
End Class
Formulaire operations
Code
Imports System.Data.OleDb
Public Class frmsousformulaire
Dim con As New OleDbConnection
Dim adpt As OleDbDataAdapter
Dim dtt As New DataTable
Dim tot As Integer
Private Sub TetudiantBindingNavigatorSaveItem_Click(ByVal sender As System.Object,
ByVal e As System.EventArgs) Handles TetudiantBindingNavigatorSaveItem.Click
End Sub
End Sub
Importation d’une requete access en vb
Un datagrid qui permet d’importer un requete dans laquelle on determine le solde de chaque
etudiant.
Etude de cas
Travail Pratique
Regle de gestion
1. Un étudiant est identifie par un numéro étudiant, a un nom, postnom, genre une confession religieuse,
date de naissance, une adresse.
2. Un étudiant effectue des opérations de paie au cours de l’année académique. Une opération est
identifiée par un code opération, a une date, une désignation et un montant versé.
3. Une section est identifiée par un code section, a un nom section
4. Un département est identifie par un code dpt, a un nom dpt.
5. Une promotion est identifie par un code promotion a un code promotion a un libelle, Montant
académique.
TD faire :
- le MCD, MLD et MPD.
- Importer la BD en vb.
- Créer les interfaces en vb
- Créer les commandes : Nouveau, Premier, Suivant, Dernier, Précédent, Supprimer, actualiser
- Instruire les différents codes
- Créer les menus
Interface en Vb
End Sub
End Sub
Private Sub calculertot() 'creation de la fonction de calcul de la somme des versement
tot = 0
For i As Integer = 0 To dtgDonnees.Rows.Count - 1
'les nombres de colonnes sont compte a partir de 0. c'est pourquoi ici nous avons 0,1,2,3,4
tot = tot + dtgDonnees.Rows(i).Cells(4).Value
Next
totvers.Text = tot.ToString
End Sub
End Class
Code de réalisation
Imports System.Data.OleDb
Public Class frminscription
Dim con As New OleDbConnection
Dim Enregistrer, Rechercher, Supprimer, Actualiser As New OleDbCommand
End Sub
con.Close()
End Sub
con.Open()
Try
Rechercher.CommandText = "select * from Tetudiant where Nummat='" & search & "'"
Rechercher.CommandType = CommandType.Text
Rechercher.Connection = con
Dim dbread As OleDbDataReader = Rechercher.ExecuteReader
If dbread.Read Then
NummatTextBox1.Text = dbread(0)
CodepromTextBox.Text = dbread(1)
NometTextBox.Text = dbread(2)
PostnometTextBox.Text = dbread(3)
GenreTextBox.Text = dbread(4)
DatenaissDateTimePicker.Text = dbread.Item(5)
ConfessTextBox.Text = dbread(6)
AdressTextBox.Text = dbread(7)
Else
End Sub
End Sub
con.Close()
End Sub
End Class
Nous vous présentons l’interface de calcul de total versement pour tous les etudiants
Imports System.Data.OleDb
Public Class operation
Dim tot As Integer
Private Sub ToperationBindingNavigatorSaveItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles ToperationBindingNavigatorSaveItem.Click
Me.Validate()
Me.ToperationBindingSource.EndEdit()
Me.TableAdapterManager.UpdateAll(Me.GestISCDataSet)
End Sub
End Sub
End Class
Code
Imports System.Data.OleDb
Public Class consultation
Dim tot, tot2, totdett As Integer
Private Sub consultation_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'TODO: cette ligne de code charge les données dans la table 'GestISCDataSet.somme'. Vous pouvez la déplacer ou la
supprimer selon vos besoins.
Me.SommeTableAdapter.Fill(Me.GestISCDataSet.somme)
'TODO: cette ligne de code charge les données dans la table 'GestISCDataSet.soldecpte'. Vous pouvez la déplacer ou la
supprimer selon vos besoins.
totalfraisacadem()
totalvers()
montantcredit()
Dtgdsolde.Refresh()
End Sub
Private Sub totalfraisacadem()
tot = 0
For i As Integer = 0 To Dtgdsolde.Rows.Count - 1
tot = tot + Dtgdsolde.Rows(i).Cells(4).Value
Next
totFAc.Text = tot.ToString
End Sub
Private Sub totalvers()
tot2 = 0
For i As Integer = 0 To Dtgdsolde.Rows.Count - 1
tot2 = tot2 + Dtgdsolde.Rows(i).Cells(5).Value
Next
totvers.Text = tot2.ToString
End Sub
Private Sub montantcredit()
totdett = 0
For i As Integer = 0 To Dtgdsolde.Rows.Count - 1
totdett = totdett + Dtgdsolde.Rows(i).Cells(6).Value
Next
txtdette.Text = totdett.ToString
End Sub
End Class
Les bibliothèques
Il faut importer les biblio qui vont permettre d'utiliser ado.net : ( à mettre tout en haut )
Imports System
Imports System.Data
Imports System.Data.OleDb
Imports Microsoft.VisualBasic
Remarque :
Concernant la requête sql : Select table.* from table, Table est le nom de la table et " table.* " signifie
sélectionner tous les champs de la table
Sélection et affichage des données
Pour pouvoir sélectionner et afficher des données on va se servir de la variable rownum qui va contenir
le Nº de ligne (ou d'enregistrement) sur lequel nous serons placés dans la datatable (dtt) et que ces
lignes vont de 0 (premier enregistrement) à rows.count - 1 (dernier enregistrement). Pour afficher un
enregistrement, dans des textbox , on utilisera la syntaxe suivante :
Me.txt1.text = dtt.Rows (rownum).Item("champ1")
Me.txt2.text = dtt.Rows (rownum).Item("champ2")
Pour se déplacer dans les enregistrements , on utilisera les syntaxes suivantes suivies de la syntaxe d'affichage données :
Premier : rownum = 0
Précédent : rownum -= 1
Suivant : rownum += 1
Dernier : dtt.Rows.Count - 1
Remarque : Dans chaque bouton de navigation, il faudra utiliser une condition pour afficher les
données, car si l'on clique sur le bouton suivant et que l'on est sur le dernier enregistrement cela
génèrera une erreur.
Exemple pour le bouton précédent :
'si début du fichier ou table vide message et sortie de procédure
If rownum = 0 Orrownum > dtt.Rows.Count - 1 Then
MessageBox.Show etc....
Exit Sub
Else
'aller à la ligne précédente
rownum -= 1
'affichage des données dans les textbox
Me.txt1.text = dtt.Rows (rownum).Item("champ1")
Me.txt2.text = dtt.Rows (rownum).Item("champ2")
End if
Affichage du premier enregistrement
On va donc afficher le premier enregistrement, si la table n'est pas vide, en plaçant ce code dans le
form_load :
Modifier un enregistrement
Pour modifier un enregistrement on utilisera cette syntaxe:
'récupération de la ligne sur laquelle on est placés dans le datarow
dtr = dts.Tables("table").Rows(rownum)
'modification des données
dtr("champ1") = Me.txt1.Text
dtr("champ2") = Me.txt2.Text
Conclusion
Il ne vous reste plus qu'a gérer l'activation et la désactivation des boutons dans chaque procédure et autres
finitions (null , msgbox ,etc...). Nous esperons que l’application comme l’implication personnelle de chaque
etudiant est de grande necessité dans l’approfondissement de ces element de bases. En effet, loin de tenir ces
nottes sous forme de bible, nous sollicitons le genie de chaque apprenant de bien vouloir aller vers les sommets
hautement placés pour une confirmation individuelle.
Travaux Pratique
1. Ecrire un programme en Visual basic permettant d’entrer deux valeurs et d’en faire la somme, le
produit, la différence et division
2. Ecrire un programme en Visual basic qui permet de faire la somme de deux valeurs a et b avec
interaction utilisateur.
3. Ecrire un programme en basic qui permet de résoudre l’équation du premier degré.
4. Ecrire un programme VB qui permet à l’utilisateur de saisir le prix d’achat, le prix de vente, la
quantité vendu et affiche le bénéfice total réalisé. On devra prévoir d’effacer déjà saisie pour un
nouveau calcul et la fermeture du programme
5. Ecrire le code pour cette interface
6. Ecrire un programme qui permet de comparer les valeurs a et b en affichant : a est supérieur a b
et b est inferieur a A.
7. Ecrire un programme qui calcul la TVA au taux de 16%
8. Ecrire un algorithme qui demande a l’utilisateur d’entrer le montant en franc congolais, le taux en
dollars et en euro pour afficher : le montant converti en dollars est de : et aussi le :montant
converti en euro est de :
9. Ecrire un algorithme qui demande a l’utilisateur d’entrer une valeur y et n et afficher son
exponentiel
10. Ecrire un programme qui fait le division et le produit entre deux valeurs entrées avec interactivité
lorsque a est plus grand que b(division) a plus petit que b(produit).
11. Ecrire un programme qui vous demande votre nom et d’afficher Bjr monsieur +nom
12. Écrire un programme qui demande à l'utilisateur de taper la largeur, la hauteur et la longueur d'un
champ et qui en affiche la superficie et le cubage.
13. Écrire un programme qui demande à l'utilisateur de taper 5 entiers et qui affiche leur moyenne. Le
programme ne devra utiliser que 2 variables.
14. Écrire un programme qui demande à l’utilisateur de saisir 2 entiers A et B, qui échange le contenu
des variables A et B puis qui affiche A et B.
15. Ecrire un programme qui vous demande d’entrer votre dpt et affiche la faculté.
16. Ecrire un programme qui permet de d’entrez une valeur (de 1 a 7) et affiches les jours de la
semaine.
17. Ecrire un programme qui permet en entrant les nombre de1 à 12 d’afficher le mois correspondant
et le nombre de jours du mois.
18. Ecrire un programme qui vous demande d’entrez la première et dernière valeur pour afficher les
termes intermédiaires ainsi que leur somme.
19. Ecrire un programme de délibération. Vous déclarez 7 cours ainsi que leur pondération (max).
déterminez le pourcentage et la mention :- entre 0-49% échec, -entre 50-59 : double, entre 60-69
satisfaction, entre 70-79 distinction, entre 80-89 gde distinction, entre 90-99 élite et plus de 99 :
inconcevable.
20. Ecrire un programme de deliberation dont le formulaire aura aumoins 18 controles textebox
correspondant aux cours (cotes cours). La pondération est de 40points pour chaque cours
(uniforme). Dans le label observation ou décision s’affiche : échec lorsque pourcentage est entre 0
et 49, satisfaction entre 50 et 69, Distinction entre 70 et 79, Grande Distinction lorsque
pourcentage entre 80 et 89, elite entre 90 et 99 et invalide pour >99.
21. Avec des inputbox, écrire un programme d’affichage d’opérations effectuées en l’occurrence
l’addition, la soustraction, la division, la multiplication dans un msgbox.
22. Ecrire un programme qui permet d’afficher la racine carrée de terme entrée
23. Faire un programme qui permet d’afficher les mois qui ont 30, 31 ou 29 sitôt entré le nombre de
jours
24. Ecrire un programme en basic qui permet de calculer la TVA pour quinze éléments différents.
Cette TVA sera calculée par produit et le Net TVA qui sera le cumul.
25. Faire un programme qui affiche les deux grandes parties de la Bible et leurs différents livres.
26. Faire un programme qui, en entrant les valeurs de 1 a 10 affiche le commandement correspondant.
27. Ecrire un programme qui permet d’afficher les différents sacrements et précisant lesquels sont plus
d’une fois reçus
28. et le moins (une fois administrée).
29. Ecrire un programme qui permet d’entrer l’initial et affiche le nom de la commune.
30. Ecrire un programme qui permet de résoudre : a-l’equation du premier degré, b. l’équation du
second degré.
31. Ecrire un programme qui demande d’enter les valeurs A,B,C
47. Faites une variante de l’exercice 44 de sorte que l’utilisateur peut convertir dans une ou plusieurs
devises à la fois en utilisant les cases a cocher.
48. En utilisant les listes déroulantes, faire l’exercice de conversion. Sitôt le choix de la monnaie, la
conversion se fait.