Introduction à la Programmation Événementielle
Introduction à la Programmation Événementielle
"[Link]"
Année, 2023-2024
Introduction: Programmation événementielle
Il existe un ensemble de langages de programmation, chacun est spécialisé dans un domaine d’application
donné et chacun possède un type spécifique. On distingue :
Programmation structuré ou modulaire : le programme est vu comme un ensemble d’unités structurés hiérarchiquement. Il
existe une interaction entre les modules et on fait généralement distinction entre les données et les traitements.
- Programmation orientée objet : le programme n’est une autre qu’une collection d’objet qui communique. Un objet et par
définition une instance d’une classe dont les composantes peuvent être de deux types : propriétés et méthodes.
- Programmation événementielle : Les composants d'une application événementielle c’est à dire les objets interagissent entre
eux et avec l'environnement. Ils communiquent en réponse à des événements. Ces événements peuvent correspondre à une
action de l'utilisateur : un click sur un bouton de commande, une écriture dans une zone de texte, un choix dans une case
d'option ou une case à cocher, le déplacement d'un objet, ... Ils peuvent aussi être déclenchés par le système : chargement d'une
feuille, un top déclenché par l'horloge.
2
© Pr H. TOUMI , toumi.h@[Link], 2017 2
Historique, naissance du Visual Basic
D'où vient le Visual Basic ?
Le BASIC
BASIC est un acronyme pour Beginner's All-purpose Symbolic Instruction
Code. Le BASIC a été conçu en 1963 par John George Kemeny et Thomas Eugene
Kurtz pour permettre aux étudiants qui ne travaillaient pas dans des filières
scientifiques d'utiliser les ordinateurs.
Les huit principes de conception du BASIC étaient :
Être facile d'utilisation pour les débutants (Beginner) ;
Être un langage généraliste (All-purpose) ;
Autoriser l'ajout de fonctionnalités pour les experts (tout en gardant le langage simple pour les
débutants) ;
Être interactif ;
Fournir des messages d'erreur clairs et conviviaux ;
Avoir un délai de réaction faible pour les petits programmes ;
Isoler l'utilisateur du système d'exploitation.
Le Visual Basic:
De ce langage — le BASIC — est né le Visual Basic. Le VB est directement
dérivé du BASIC et permet le développement rapide d'applications, la création
d'interfaces utilisateur graphiques, l'accès aux bases de données, ainsi que la
création de contrôles ou d'objets ActiveX.
Le traditionnel « Hello World ! » en Visual Basic :
Code : Autre
Sub Main()
MsgBox("Hello World !")
End Sub
• Un framework (dans notre cas, le framework .NET de Microsoft) est une sorte
d'immense bibliothèque informatique contenant des outils qui vont faciliter la
vie du développeur. Le framework .NET est compatible avec le Visual Basic et
d'autres langages tels que le C#, le F#, le J#, etc.
Le framework .NET
• La plate-forme .NET fournit un ensemble de fonctionnalités qui facilitent le
développement de tous types d'applications :
Les applications Windows classiques ;
Les applications web ;
Les services Windows ;
Les services web.
En Visual Basic, toutes ces applications sont réalisables grâce au framework .NET.
Nous allons donc aborder les principes fondamentaux du langage. Pour cela,
empressons-nous de créer un nouveau projet, cette fois en application console.
Évitez d'utiliser des accents ou caractères spéciaux dans un nom de fichier ou
de projet.
Créez un nouveau projet (CTRL + N) et cliquez sur Application console.
Voici ce qui devrait s'afficher chez vous :
Module Module1
Sub Main()
End Sub
End Module
• Ces mots figurant dans votre feuille de code sont indispensables ! Si vous les supprimez,
l'application ne se lancera pas. C'est le code minimal que l'IDE (Visual Studio) génère lorsque l'on
crée un projet de type console.
• Chaque grosse partie, telle qu'une fonction, un module, un sub, voire une boucle conditionnelle,
aura une balise de début : ici, Module Module1 et Sub Main(), et une balise de fin : End Module
et End Sub.
• Module1 est le nom du module, que vous pouvez le modifié.
• Pour ce qui est du Main ( ), n'y touchez pas, car lorsqu'on va lancer le programme la première
chose que ce dernier va faire sera de localiser la partie appelée Main() et de sauter dedans. S'il ne
la trouve pas, cela ne fonctionnera pas !
Les « parties » telles que Main() sont appelées des méthodes, car elles sont précédées de Sub.
Code : [Link]
Module Module1
Sub Main()
[Link]("Hello World !") --- > Cette ligne est appelée une instruction.
End Sub
End Module
Cours: Programmation Événementielle 1
Déroulement du programme
Le programme entre dans le Main() et exécute les actions de haut en bas, instruction par
instruction. Attention, ce ne sera plus le cas lorsque nous aborderons des notions telles que les boucles
ou les fonctions.
Voici nos lignes de code :
1. Module Module1 : le programme entre dans son module au lancement. Forcément, sinon rien
ne se lancerait jamais. La console s'initialise donc.
2. Il se retrouve à entrer dans le Main(). La console est ouverte.
3. Il continue et tombe sur notre ligne qui lui dit « Affiche « Hello World !" », il affiche donc
« Hello World ! » dans la console.
4. Il arrive à la fin du Main() (End Sub). Rien ne se passe, « Hello World ! » est toujours affiché.
5. Il rencontre le End Module : la console se ferme.
Résultat des courses : la console s'est ouverte, a affiché « Hello World ! » et s'est fermée à
nouveau… mais tout cela en une fraction de seconde, on n'a donc rien remarqué !
La parade : donner au programme une ligne à exécuter sur laquelle il va attendre quelque
chose. On pourrait bien lui dire attendre une entrée. Oui, la touche Entrée de votre clavier.
Pour cela, voici la ligne de code qui effectue cette action :
Code : [Link]
Module Module1
Sub Main()
[Link]("Hello World !")
[Link]()
End Sub
End Module
Cette ligne dit à l'origine « Lis le caractère que j'ai entré », mais nous allons l'utiliser pour
dire au programme : « Attends l'appui sur la touche Entrée ».
Cours: Programmation Événementielle 12
Objets, fonctions…
Vous l'avez peut-être remarqué : au moment où vous avez écrit « Console. », une liste s'est
affichée en dessous de votre curseur (voir figure suivante). Dans cette partie, je vais vous
expliquer l'utilité de cette liste.
• Une fonction est une séquence de code déjà existante et conçue pour obtenir un
effet bien défini. Concrètement, cela nous permet de n'écrire qu'une seule fois ce
que va faire cette séquence, puis d'appeler la fonction correspondante autant de
fois que nous le voulons (la séquence exécutera bien entendu ce qu'on a défini au
préalable dans la fonction…).
• Par exemple, nos deux lignes qui nous permettaient d'afficher « Hello World ! » et
d'effectuer une pause auraient pu être placées dans une fonction séparée. Dans
ce cas, en une ligne (l'appel de la fonction), on aurait pu effectuer cette séquence.
• Alors le gain de temps et les avantages dans des séquences de plusieurs
centaines de lignes.
• Un autre exemple : notre fonction Write avait pour but d'écrire ce que l'on lui
donnait comme arguments. La fonction Write a donc été écrite par un
développeur qui y a placé une série d'instructions permettant d'afficher du texte
dans la console.
Cours: Programmation Événementielle 14
Fonctions, Arguments
Pas de panique si vous n'avez pas compris ces concepts de fonctions, d'objets,
etc. Nous allons justement nous pencher sur la structure d'un appel de fonction,
car nous en aurons besoin très bientôt ; pour cela, nous allons étudier une
fonction simple : le BEEP (pour faire « bip » avec le haut-parleur de
l'ordinateur). Afin d'y accéder, nous allons écrire [Link].
Ici, deux choix s'offrent à nous : le classique () ou alors (frequency as integer,
duration as integer).
[Link](500, 100)
Pourquoi n'y a-t-il pas de guillemets (doubles quotes : « " ») autour des nombres ?
Cours: Programmation Événementielle 16
Les variables
Comme son nom l'indique, une variable… varie. On peut y stocker pratiquement tout ce qu'on veut, comme
par exemple des nombres, des phrases, des tableaux, etc. C'est pour cette raison que les variables sont
omniprésentes dans les programmes.
Types de variables:
Les variables se déclinent sous différents types : il y a par exemple un type spécifique pour stocker des
nombres, un autre pour stocker du texte, etc.
4. Et enfin, X dans Y.
Code : [Link]
le mot « MaVariable » est le nom attribué à la variable. C'est vous qui le choisissez !
Le nom d'une variable ne peut contenir d'espaces ; privilégiez plutôt un « _ » (underscore) ou une
majuscule à chaque « nouveau mot », mais en liant le tout (comme dans mon exemple).
Autre chose à propos des noms : il y a des exceptions. En effet, une variable ne peut pas avoir
comme nom un type ou le nom d'une boucle. Par exemple, si vous appelez votre variable « Date »,
une erreur se produira, car le type Date existe déjà.
1. Créer une variable de type String appelée « StringFunction » et d'y entrer la valeur «
Bonjour tout le monde »
2. Créer une variable de type Integer appelée « MaVariable » et d'y entrer la valeur « 5 »
3. Afficher les deux variables?
Module Module1
Sub Main()
Dim var1, var2, var3 As Integer
Exemple var1 = 10
Code : [Link] var2 = 20
var3 = var1 + var2
[Link](var3)
[Link]()
[Link]("20 Modulo 10 est egal = " & 20 Mod 10)
[Link](" Multiplication de 20 * 10 est = " & var1 * var2)
[Link]()
End Sub
End Module
La concaténation, elle permet d'assembler deux éléments en un ; ici, par exemple, elle a assemblé la chaîne de caractères " 20 Modulo 10
est egal = " et le contenu de la variable, ce qui aura pour effet de m'afficher directement 20 Modulo 10 est egal = 0
Les commentaires vont nous servir à éclaircir le code. Ce sont des phrases ou des
indications que le programmeur laisse pour lui même ou pour ceux qui travaillent avec lui sur
le même code.
Une ligne est considérée comme commentée si le caractère « ' » (autrement dit, une simple
quote) la précède ; une ligne peut aussi n'être commentée qu'à un certain niveau.
Exemples :
Code : [Link]
'Commentaire
MaVariable = 9 * 6 ' Multiplie 9 et 6 et entre le résultat dans MaVariable
[Link]("entrer un Nombre:")
nb1 = [Link]()
[Link]("entrer un autre Nombre:")
nb2 = [Link]()
'faire l'addition
res = nb1 + nb2
[Link]($"Le resultat de la sommation est:{res}")
[Link](True)
End Sub
End Module
Une boucle conditionnelle est quelque chose de fort utile et courant en programmation.
Cela permet d'effectuer une action si, et seulement si, une condition est vérifiée.
Par exemple vous voulez que votre programme dise « bonne nuit » s 'il est entre 22 h et 6h.
Eh bien, c'est précisément dans ce cas de figure que les boucles conditionnelles trouvent leur
utilité.
Boucle If
• Une ligne commençant par If est toujours terminée par Then, ce qui signifie « Si, alors ». C'est entre ces
deux mots que vous placez la condition souhaitée.
• Donc, si j'écris le code If MaVariable = 10 Then, ce qui se trouve en dessous ne sera exécuté que si
la valeur de MaVariable est égale à 10. Regardez la figure suivante.
Eh bien oui, du moins jusqu'à ce qu'il rencontre End If, traduisible par
« Fin si ». Comme pour un Sub ou un Module, une boucle est associée
à sa fin correspondante.
En clair, If, Then et End If sont indissociables !
Boucle If
• Exemple:
Code : [Link]
If Moyen = 12 Then
Module = "Valide"
End If
Boucle if Else
« Else », il faut y penser parfois pour gérer toutes les éventualités.
If Moyen= 12 Then
'Code exécuté si Moyen = 12
Else
'Code exécuté si Moyen est infèrieure à 12
End If
• La Boucle ElseIf
La figure suivante schématise le ElseIf.
• Voici un exemple :
Code : [Link]
If MaVariable = 10 Then
'Code exécuté si MaVariable = 10
ElseIf MaVariable = 5 Then
'Code exécuté si MaVariable = 5
Else
'Code exécuté si MaVariable est
différente de 10 et de 5
End If
• les boucles If, Then et ElseIf peuvent s'imbriquer, ce qui signifie qu'on peut en mettre
plusieurs l'une dans l'autre. Contrairement à If et ElseIf, le Else ne peut être placé
qu'une seule et unique fois dans une condition.
Code : [Link]
If MaVariable = 10 Then
If MaVariable2 = 1 Then
'Code exécuté si MaVariable = 10 et MaVariable2 = 1
Else
'Code exécuté si MaVariable = 10 et MaVariable2 <> 1
End If
ElseIf MaVariable = 5 Then
If MaVariable2 = 2 Then
'Code exécuté si MaVariable = 5 et MaVariable2 = 2
End If
Else
'Code exécuté si MaVariable est différente de 10 et de 5
End If
• La Boucle Select
• Il faut néanmoins que vous sachiez que les programmeurs sont très fainéants, et ils ont trouvé
sans cesse des moyens de se simplifier la vie. C'est donc dans le cas que nous venons d'évoquer
que les Select deviennent indispensables, et grâce auxquels on simplifie le tout. La syntaxe se
construit de la manière suivante :
Code : [Link]
Select Case MaVariable
Case 1
'Si MaVariable = 1
Case 2
'Si MaVariable = 2
Case Else
'Si MaVariable <> 1 et <> 2
End Select
Imports System
Module Program
Sub Main()
Dim operation As Integer
Case 2
result = (nb1 * nb2)
[Link]($"Resultat de l'Substraction est :{result}")
Case 3
result = (nb1 / nb2)
[Link]($"Resultat de division est :{result}")
End Select
[Link]()
End Sub
End Module
While MaVariable = 10
'Exécuté tant que MaVariable = 10
End While
Module Program
Sub Main(args As String())
• Dans cet exemple, la boucle Dim counter As Integer = 0
While s'exécutera tant que la
variable counter est inférieure While counter < 5
à 5. Elle affichera la valeur du [Link]("La valeur du compteur est : "
compteur à chaque itération et &counter)
incrémente la valeur de counter counter += 1
à chaque tour de boucle. End While
End Sub
End Module
Do While
• À l'instar du While, le Do While (traduisible par « faire tant que ») passe au moins une fois dans la boucle.
Regardez la figure suivante.
Code : [Link]
Do
'Instruction exécutée au moins une fois
Loop While MaVariable = 10
Autre information : il existe un autre mot qui se met à la place de « While ». Ce mot
est « Until ». Il signifie : « passe tant que la condition n'est pas vraie » (le While est
utilisé seulement tant que la condition est vraie).
Un code de ce type… Do
Loop Until MaVariable = 10
For « pour »
For est indissociable de son To, comme un If a son Then
Si je souhaite effectuer une instruction dix fois de suite, je vais écrire ceci :
Code : [Link]
Dim x As Integer = 0
While x <> 10
'Instruction à exécuter 10 fois
x = x + 1 'Augmente x de 1
End While
La boucle sera parcourue à dix reprises. Eh bien, For remplace ce code par celui-ci :
Code : [Link] Dim x As Integer
For x = 1 to 10
'Instruction à exécuter 10 fois
Next
For
Les deux codes effectueront la même chose. Le Next correspond à « ajoute 1 à ma variable ».
• Exemple:
• Si vous voulez exécuter un While tant que « x » est plus petit que 10 :
• Code : [Link]
While x < 10
For « pour »
• Cette boucle sera exécutée tant que la variable est supérieure ou égale à 10, ou égale à 0.
Ces mots peuvent s 'additionner, mais attention au sens.
Code : [Link] While MaVariable > 0 And not MaVariable >= 10 Or MaVariable = 15
Ce code se comprend mieux avec des parenthèses : (MaVariable > 0 et non MaVariable >= 10) ou
MaVariable = 15.
Donc, cela se traduit par « si MaVariable est comprise entre 1 et 10 ou si elle est égale à 15 ».
D'ici peu de temps vous pourrez modifier des mots aussi rapidement que des nombres.
Les chaînes de caractères
• Remplacer des caractères
• On va commencer par la fonction la plus simple : le Replace() qui, comme son nom l'indique, permet de
remplacer des
• caractères ou groupes de caractères au sein d'une chaîne.
• La syntaxe est la suivante :
• Code : [Link]
Dim MonString As String = "Phrase de test"
MonString = [Link]("test", "test2")
Le premier argument de cette fonction est le caractère (ou mot) à trouver, et le second, le caractère (ou mot) par
lequel le remplacer.
Dans cette phrase, le code remplacera le mot « test » par « test2 ».
Si vous avez bien assimilé le principe des fonctions, des variables peuvent être utilisées à la place des chaînes
de caractères en «dur ».
• Nous allons ainsi pouvoir travailler. Entrons cette valeur dans une variable de type… date, et amusons-nous !
Récupérer uniquement la date
• La première fonction que je vais vous présenter dans ce chapitre est celle qui convertit une chaîne date, comme
celle que je viens de vous présenter, mais uniquement dans sa partie « date ».
• Je m'explique : au lieu de « 02/12/2024 03:06:33 » (oui, je sais, il est exactement la même heure qu'il y a deux
minutes…), nous obtiendrons « 02/12/2024 ».
• Code : [Link]
ToShortDateString()
• L'heure uniquement
Voici la fonction qui sert à récupérer uniquement l'heure :
Code : [Link]
ToShortTimeString()
• Comme sur le dessin, tu disais ? Pourtant, sur ce dernier, il y a cinq cases. Or, tu n'en as inscrites que quatre.
Comment cela se fait-il ?
Oui, sa longueur est de 4. Vous devez savoir qu'un tableau commence toujours par 0. Et donc, si vous avez compris, un
tableau longueur 4 possède les cases 0, 1, 2, 3 et 4, soit cinq cases, comme sur le dessin.
Le nombre de cases d'un tableau est toujours « indice + 1 ».
Réciproquement, l'index de sa dernière case est « taille - 1 ».
Souvenez-vous de cela, ce sera utile par la suite.
Comment écrire dans un tableau ?
C'est très simple. Vous avez par exemple votre tableau de cinq cases (dimension 4) ; pour écrire dans la case 0 (soit la
première case), on écrit ceci :
Code : [Link]
MonTableau(0) = 10
• Eh oui, il s 'utilise comme une simple variable ! Il suffit juste de mettre la case dans laquelle écrire, accolée à la
variable et entre parenthèses.
• Cela créera un tableau avec quatre lignes et cinq colonnes, comme sur le schéma.
• Pour ce qui est de le remplir, le schéma l'explique déjà très bien :
• Code : [Link]
MonTableau(0,0) = 10
L'instruction Redim n'est valable que pour les tableaux à une seule dimension
• Retourner un tableau
• Par exemple, j'ai un tableau qui contient les nombres de 1 à 10, je souhaite avoir ce comptage de 10 à 1. Cette méthode peut
alors être utilisée pour effectuer cette opération.
Code : [Link] [Link](monTableau)
• Vider un tableau
Trois paramètres sont nécessaires ici. Le premier est très simplement le tableau à vider, le second spécifie à partir de quel index vider,
et le troisième indique le nombre de cases à vider.
[Link](monTableau, 0, 10)
Cours: Programmation Événementielle 60
Les tableaux
Exercice_1:
Écrire un programme qui demande à l'utilisateur un nombre entier positif, puis calcule et affiche la
somme de tous les nombres entiers de 1 jusqu'au nombre saisi.
Exercice_2:
Écrire un programme qui demande à l'utilisateur un nombre entier positif et affiche la table de
multiplication de ce nombre jusqu'à 10.
Exercice_3:
Écrire un programme qui demande à l'utilisateur une série de nombres entiers et affiche pour chaque
nombre si celui-ci est pair ou impair.
Exercice_4:
Écrire un programme qui demande à l'utilisateur un nombre entier positif et calcule sa factorielle.
Module MainModule
Sub Main()
[Link]("Entrez un nombre entier positif : ")
Dim n As Integer = [Link]([Link]())
Dim somme As Integer = 0
For i As Integer = 1 To n
somme += i
Next
[Link]("La somme des nombres de 1 à " & n & " est : " & somme)
End Sub
End Module
Module MainModule
Sub Main()
[Link]("Entrez un nombre entier positif : ")
Dim n As Integer = [Link]([Link]())
For i As Integer = 1 To 10
[Link](n & " x " & i & " = " & n * i)
Next
End Sub
End Module
Module MainModule
Sub Main()
[Link]("Entrez une série de nombres
entiers (entrez -1 pour terminer) : ")
Dim nombre As Integer
Do
nombre = [Link]([Link]())
If nombre <> -1 Then
If nombre Mod 2 = 0 Then
[Link](nombre & " est pair.")
Else
[Link](nombre & " est impair.")
End If
End If
Loop While nombre <> -1
End Sub
End Module
Exercice_1:
Écrire un programme qui prend deux tableaux d'entiers de même taille en entrée, puis crée un troisième tableau
qui contient la somme des éléments correspondants des deux tableaux d'entrée.
Exercice_2:
Écrire un programme qui recherche un élément donné dans un tableau d'entiers et affiche son indice s'il est
trouvé, sinon affiche un message indiquant que l'élément n'est pas présent dans le tableau.
Exercice_3:
Écrire un programme qui calcule la moyenne des éléments d'un tableau d'entiers.
Exercice_4:
Écrire un programme qui trie un tableau d'entiers en ordre croissant.
Exercice_1:
Écrire un programme qui supprime toutes les occurrences d'un élément donné d'un tableau d'entiers.
Exercice_2:
Écrire un programme qui effectue une rotation vers la gauche ou vers la droite d'un tableau d'entiers d'un
nombre donné de positions.
Exercice_3:
Écrire un programme qui fusionne deux tableaux triés en un seul tableau trié.
Exercice_4:
Écrire un programme qui prend une matrice carrée en entrée et calcule la somme des éléments de sa
diagonale principale et de sa diagonale secondaire.
Exercice_5:
Écrire un programme qui recherche tous les sous-tableaux d'un tableau d'entiers donné.
Exercice_6:
Écrire un programme qui compte le nombre d'occurrences de chaque élément dans un tableau d'entiers et
affiche le résultat.
Module MainModule
Sub Main()
Dim tableau1() As Integer = {1, 2, 3, 4, 5}
Dim tableau2() As Integer = {6, 7, 8, 9, 10}
Dim somme([Link] - 1) As Integer
Module MainModule
Sub Main()
Dim tableau() As Integer = {1, 2, 3, 4, 5}
Dim somme As Integer = 0
Module MainModule
Sub Main()
Dim tableau() As Integer = {3, 1, 4, 5, 2}
[Link](tableau)
[Link]("Tableau trié:")
For Each element In tableau
[Link](element & " ")
Next
End Sub
End Module
Module MainModule
Sub Main()
Dim tableau() As Integer = {1, 2, 3, 4, 3, 5}
Dim elementASupprimer As Integer = 3
Dim nouveauTableau As New List(Of Integer)
Module SimpleArray
' The example displays the following output:
Public Sub Main()
' Students in kindergarten: 23
' Declare an array with 7 elements.
' Students in grade 1: 19
Dim students(6) As Integer
' Students in grade 2: 21
' Assign values to each element.
' Students in grade 3: 17
students(0) = 23
' Students in grade 4: 19
students(1) = 19
' Students in grade 5: 20
students(2) = 21
' Students in grade 6: 22
students(3) = 17
students(4) = 19
students(5) = 20
students(6) = 22
' Display the value of each element.
For ctr As Integer = 0 To 6
[Link]("Students in grade " & students(ctr))
Next
End Sub
End Module
• Trois paramètres, les deux premiers étant des tableaux. Le premier tableau étant la source (celui dans lequel nous allons
copier les éléments) et le second est la destination (celui dans lequel nous allons coller les éléments). Le troisième
paramètre est le nombre d’éléments à copier (depuis l'élément 0). Ainsi, 5 indique que 5 cases seront copiées dans l'autre
tableau.
• Si vous souhaitez remplir le second tableau entièrement, utilisez [Link](monTableau1, monTableau2,
[Link]). Cela permet de spécifier que l'on veut copier autant de cases que disponibles dans le deuxième
tableau. Nous analyserons ce .Length en détail plus tard.
1.Déclarez un tableau d'entiers initial avec quelques éléments. {10, 20, 30, 40, 50}
Sub Main()
' Tableau initial
Dim tableauOriginal() As Integer = {1, 2, 3, 4, 5}
[Link]()
End Sub
End Module
[Link]()
End Sub
End Module
[Link]()
End Sub
End Module
• Une fonction répète une action bien précise. Nous en connaissons déjà, par exemple BEEP ou
IsNumeric(), qui vérifie que la valeur d'une variable est bien un nombre.
• Vous voyez, des programmeurs ont déjà créé et intégré des fonctions dans les bibliothèques,
d'énormes fichiers qui les rassemblent toutes et que vous possédez sur votre ordinateur dès
lors que vous avez installé Visual Basic.
• Nous allons donc à notre tour programmer une fonction et apprendre à l'utiliser.
• Nous allons donc créer notre première fonction, la plus basique qui soit : sans argument, sans retour. Mais
on va tout de même lui faire quelque chose… Pourquoi, par exemple, ne pas additionner deux nombres
que l'on saisit à l'écran ?
Modificateurs : spécifiez le niveau d'accès de la fonction ; les valeurs possibles sont : Public,
Privé, Protégé, Ami, Ami protégé et des informations concernant la surcharge, le
remplacement, le partage et l'observation.
ParameterList ou bien Les arguments : spécifie la liste des paramètres ou bien arguments
Vous remarquez bien les ByVal Valeur1 As Integer ; cette syntaxe est à utiliser pour chaque
argument : le mot ByVal, le nom de la variable, le mot As, et le type de la variable.
• Les arguments
• Ce qui nous donne, dans un cas comme notre addition :
Code : [Link]
Sub Addition(ByVal Valeur1 As Integer, ByVal Valeur2 As Integer)
'Addition des deux arguments
[Link](Valeur1 & " + " & Valeur2 & " = " & Valeur1 + Valeur2)
'Pause factice
[Link]()
End Sub
Voilà par exemple le Sub que j'ai écrit, et qui additionne deux valeurs passées en arguments.
Pourquoi n'as-tu pas déclaré les variables Valeur1 et Valeur2 ?
Elles ont été automatiquement déclarées dans la ligne de création de fonction.
Si vous souhaitez appeler cette fonction, comment faut-il procéder ?
Les arguments
Si vous souhaitez appeler cette fonction, comment faut-il procéder ?
Code : [Link]
Addition(Valeur1, Valeur2)
Remarques:
• Vous n'êtes pas obligés de mettre les mêmes noms du côté de l'appel et du côté de la déclaration des
arguments dans votre fonction ; la ligne Addition(Valeur10, Valeur20) aurait fonctionné, mais il
faut bien sûr que Valeur10 et Valeur20 soient déclarées du côté de l'appel de la fonction.
• Il faut obligatoirement utiliser tous les arguments lors de l'appel de la fonction.
• Les arguments doivent être passés dans le bon ordre !
Statements
End Function
Modificateurs : spécifiez le niveau d'accès de la fonction ; les valeurs possibles sont : Public,
Privé, Protégé, Ami, Ami protégé et des informations concernant la surcharge, le
remplacement, le partage et l'observation.
ParameterList ou bien Les arguments : spécifie la liste des paramètres ou bien arguments
Valeur de retour
• Imaginez que vous ayez envie d'une fonction qui effectue un calcul très compliqué ou qui modifie votre valeur
d'une certaine manière. Vous voudriez sans doute récupérer la valeur ? C'est ce qu'on appelle le retour :
Code : [Link]
Function Addition(ByVal Valeur1 As Integer, ByVal Valeur2 As Integer) As Integer
• La derniere (As Integer) qui nous intéresse : c'est cette partie qui indiquera à la fonction le type de
valeur qu'elle doit renvoyer.
Valeur de retour
les Sub ne renvoient rien, il faut donc passer par les fonctions si on veut une valeur de retour.
Code : [Link]
• Cette fonction additionne donc les deux nombres passés en arguments et renvoie le résultat.
• La ligne Return Resultat est très importante, car c'est elle qui détermine le retour : si vous n'écrivez pas
cette ligne, aucun retour ne se fera.
• Ce qui suit le Return ne sera pas exécuté ; la fonction est quittée lorsqu'elle rencontre cette instruction. Vérifiez donc bien l'ordre de
déroulement de votre programme.
• Valeur de retour
Comment appeler cette fonction ? La forme Addition(Valeur1, Valeur2) aurait pu fonctionner,
mais où va la valeur de retour ? Il faut donc récupérer cette valeur avec un « = ».
Code : [Link]
Resultat = Addition(Valeur1, Valeur2)
Cette fonction peut être directement appelée dans une autre, comme ceci par exemple :
Code : [Link]
[Link](Addition(Valeur1, Valeur2))
• Dans l'appel de cette fonction, je peux maintenant écrire Operation(1, 5), ce qui me renverra 6, ou alors
Operation(10, 15, 3) qui me renverra 28. Les deux appels sont valides.
Exercice 1: Écrivez une fonction qui prend deux nombres en entrée et retourne leur somme. Utilisez cette fonction pour
calculer la somme de deux nombres saisis par l'utilisateur.
Sub Main()
Dim nombre1, nombre2 As Integer
[Link]("Entrez le premier nombre : ")
nombre1 = [Link]([Link]())
[Link]("Entrez le deuxième nombre : ")
nombre2 = [Link]([Link]())
Dim resultat As Integer = Somme(nombre1, nombre2)
[Link]("La somme est : " & resultat)
End Sub
Exercice 2: Écrivez une fonction qui prend une chaîne en entrée et retourne la longueur de cette chaîne.
Sub Main()
Dim texte As String
[Link]("Entrez une chaîne de caractères : ")
texte = [Link]()
Dim longueur As Integer = LongueurChaine(texte)
[Link]("La longueur de la chaîne est : " & longueur)
End Sub
Exercice 3: Écrivez une fonction qui prend un tableau d'entiers en entrée et retourne la somme de tous les éléments du
tableau.
Sub Main()
Dim tableau() As Integer = {1, 2, 3, 4, 5}
Dim total As Integer = SommeTableau(tableau)
[Link]("La somme des éléments du tableau est : " & total)
End Sub
Exercice 4: Écrivez une fonction qui prend en entrée un nombre entier et retourne vrai si le nombre est pair et faux sinon.
Sub Main()
Dim nombre As Integer
[Link]("Entrez un nombre entier : ")
nombre = [Link]([Link]())
If EstPair(nombre) Then
[Link]("Le nombre est pair.")
Else
[Link]("Le nombre n'est pas pair.")
End If
End Sub
Exercice 5: Écrivez une fonction qui prend en entrée une chaîne de caractères et retourne cette chaîne inversée.
Function InverserChaine(ByVal chaine As String) As String
Dim chaineInverse As String = ""
For i As Integer = [Link] - 1 To 0 Step -1
chaineInverse &= chaine(i)
Next
Return chaineInverse
End Function
Sub Main()
Dim texte As String
[Link]("Entrez une chaîne de caractères : ")
texte = [Link]()
Dim chaineInverse As String = InverserChaine(texte)
[Link]("La chaîne inversée est : " & chaineInverse)
End Sub
Cours: Programmation Événementielle 96
Les fonctions
Exercice 6: Écrivez une fonction qui prend en entrée un nombre entier positif et retourne vrai si le nombre est premier et faux
sinon.
• La boucle For Each permet de parcourir ce tableau (un peu à la manière du For traditionnel) et de récupérer les
valeurs.
• Utilisons donc immédiatement cette boucle :
Code : [Link]
For Each ValeurDeMonTableau As Integer In MonTableau
If ValeurDeMonTableau < 10 Then
[Link](ValeurDeMonTableau)
End If
Next
• IIF
• IIF est très spécial et peu utilisé : en un certain sens, il simplifie le If. Voici un exemple de son utilisation dans le code précédent :
Code : [Link]
Dim MaChaine As String = "Salut"
Dim Compteur As Integer = 0
For Each Caractere As String In MaChaine
If Caractere = "a" Then
Compteur = Compteur + 1
End If
Next
[Link](IIF(Compteur > 0, "La lettre 'a' a été trouvée
dans " & MaChaine, "La lettre 'a' n'a pas été trouvée dans " &
MaChaine))
• si vous avez bien analysé : si le premier argument est vrai (c'est un booléen), on retourne le second argument ; à l'inverse, s 'il est faux, on
retourne le dernier. Pour mieux comprendre :
Les casts
un cast convertit une variable d'un certain type en un autre. Il existe plusieurs moyens d'effectuer des casts : une
fonction universelle, et d'autres plus spécifiques.
Ctype()
• La fonction universelle se nomme Ctype. Voici sa syntaxe :
Code : [Link]
Ctype(MaVariableString, Integer)
• Ce code convertira MaVariableString en integer.
• Voici un exemple concret :
Code : [Link]
Dim MonString As String = "666"
If Ctype(MonString, Integer) = 666 Then
'…
End If
• On a vu l'exemple de Ctype(), utile lorsqu'il s 'agit de types peu courants. Mais pour les types courants, il existe des
fonctions plus rapides et adaptées :
• Deux petites choses qui peuvent également vous aider : les MsgBox et les InputBox (voir figures suivantes).
• Les MsgBox peuvent signaler une erreur, demander une confirmation, etc. Les InputBox, quant à elles, peuvent être
utilisées dans des scores par exemple, pour demander le nom du joueur.
• La MsgBox
• Les paramètres
• Voici la liste des arguments. Pas de
panique, il n'y en a que trois ! Je
vais vous les décrire :
[Link] : message qui
apparaîtra dans la MsgBox.
[Link] : type de
bouton à utiliser (style de la
boîte).
[Link] : titre de la boîte.
Divers exemples de style
• La MsgBox
• Les paramètres
• Les numéros indiqués correspondent aux ID, que vous pouvez cumuler. En gros, si vous souhaitez que votre boîte
bloque le système et que l'on doive y répondre avant de continuer, avec une icône « Message critique » et des
boutons « OK - Annuler », il faut que vous tapiez… 4096 + 1 + 16 = 4113 !
• Voici donc le code correspondant, les Chr(13) représentant des retours à la ligne :
Code : [Link] Cela donne le résultat visible à la figure suivante.
MsgBox("Je suis une MsgBox qui bloque
votre système tant que vous
n'avez pas répondu" & Chr(13) & " J'ai
l'icône d'une croix rouge
(critical) et mes boutons sont : Ok /
Annuler" & Chr(13) & "Je vous
souhaite un agréable vol sur notre
compagnie ...", 4113, "Ma
boiboitte")
La MsgBox
Le retour
• Passons à la valeur de retour !
• Les boutons sur lesquels on clique ne renvoient pas tous la même valeur :
1. OK → 1
2. Cancel → 2
3. Abort → 3
4. Retry → 4
5. Ignore → 5
6. Yes → 6
7. No → 7
Un petit If devrait vous permettre d'effectuer une action précise en fonction de ce que l'utilisateur a
entré !
Le côté visuel de VB
vous avez uniquement eu besoin de deux fonctions jusqu'à maintenant : [Link]() pour l'entrée et
[Link]() pour la sortie. Ici, vous n'aurez plus besoin de l'objet Console, donc les Console. on oublie
!
Recréons un nouveau projet, Windows Forms cette fois-ci. Admirez le superbe résultat visible à la figure suivante.
• Alors, comment attribuer les propriétés ? il faut tout d'abord dire sur quelle fenêtre on travaille, c'est la
fenêtre actuelle appelée Me en VB.
• Donc nous avons Me, il faut le lier au reste, utilisons donc le caractère « . » : nous allons donc accéder aux
objets et contrôles de cette fenêtre. Ici une liste s 'affiche à nous, c'est tout ce que l'on peut utiliser avec
l'objet Me (autrement dit la fenêtre). Spécifions autre chose : nous voulons accéder à notre textbox, donc on
tape son nom : « TXT_RECOIT ». À peine la partie « TXT » écrite, notre IDE nous donne déjà le reste.
Cours: Programmation Événementielle 11
Les assigner et les récupérer côté VB
J'écris donc ma propriété textalign, un « = » pour lui assigner une propriété, et là notre magnifique IDE fait
encore tout le travail (voir figure suivante) !
Les événements sont utilisé à fin de réagir à plein de choses tel que : un clic, une touche, une ouverture, une
fermeture, que sais-je encore, les possibilités sont nombreuses !
Alors, un événement s'écrit comme un Sub ; par exemple, l'évènement form_load :
Code : [Link]
Private Sub Form1_Load(ByVal sender As [Link], ByVal e As [Link]) Handles [Link]
Pourquoi form1_load. Tout simplement parce que la fenêtre s'appelle form1, et l'événement, load.
les arguments de ce Sub sont indispensables! Ce sont des arguments que la fenêtre passera automatiquement à ce
Sub lorsqu'il sera appelé.
Code : [Link]
Handles [Link]
• Cette fin d'instruction avec ce mot-clé : Handles. Ce mot-clé peut se traduire par « écoute », suivi de
l'événement écouté. Ici il écoute le chargement de la fenêtre.
• Comme pour le form_load, plaçons-y les instructions voulues ; sinon déplacer simplement celles que nous
avions écrites dans le form_load :
• Code : [Link]
Replaçons maintenant le code que nous avons mis dans l'événement du clic sur le bouton dans ce
nouvel événement. Essayons, effectivement lors du clic de la souris sur la fenêtre (pas le bouton) le
texte s'affiche ! Encore réussi
Si le côté design fonctionne, passer au côté code VB en double-cliquant sur BT_1, ce qui créera notre
événement de clic sur le bouton.
Dans cet événement je vais vous demander de faire la somme des checkbox cochées. Donc la propriété qui
régit l'état d'une checkbox est Checked !
Code : [Link]
Me.CHK_1.Checked
• Méthode assistée
Lors du clic sur la combobox (dans l'IDE), elle apparaît sélectionnée et une petite flèche
apparaît en haut à droite de cette sélection, comme à la figure suivante.
Méthode manuelle
La seconde méthode nous amène côté VB, double-cliquez sur la fenêtre pour créer l'événement onload.
Une technique est de créer un tableau contenant les valeurs et de « lier » ce tableau à la combobox : créons tout d'abord
notre tableau…
Code : [Link] Dim MonTableau(9) As Integer
For i As Integer = 0 To 9
MonTableau(i) = i + 1
Next
Donc si l'on écrit tout ça dans le Main(), on obtient une liste déroulante avec des nombres allant de 1 à 10.
Nous allons écrire la valeur récupérée dans la textbox lors du changement de choix dans la combobox, la propriété utilisée
pour récupérer la valeur sélectionnée est SelectedValue (je vous laisse faire cette modification).
Code : [Link]
Private Sub CB_CHOIX_SelectedIndexChanged(ByVal sender As [Link],
ByVal e As [Link]) Handles CB_CHOIX.SelectedIndexChanged
Me.TXT_CHOIX.Text = Me.CB_CHOIX.SelectedValue
End Sub
• Dernière chose avant le test : retournez côté design, recherchez et attribuez la propriété DropDownList à la propriété
DropDownStyle. Pourquoi ? Cette propriété empêche l'utilisateur d'écrire lui-même une valeur dans cette
combobox, il n'a que le choix entre les valeurs disponibles ; dans le cas contraire, il aurait pu utiliser la combobox comme
une textbox.
La barre de menus
Création graphique
Prenez l'objet MenuStrip et insérez-le sur votre feuille (feuille vide de préférence), comme à la figure suivante.
Événements
Maintenant, attaquons la gestion des événements !
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 :
Code : [Link]
Private Sub BonjourToolStripMenuItem_Click(ByVal sender As [Link],
ByVal e As [Link]) Handles [Link]
End Sub
• 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).
Code : [Link]
• Supprimez les événements relatifs aux anciens sous-menus (Bonjour…), mais gardez ceux correspondant aux sous-menus
Reset et Quitter.
• Écrivons maintenant notre code : côté combobox, on veut afficher le texte correspondant à l'item de la combobox (je vous ai
donné la solution là ), eh oui, l'événement SelectedItem sera utilisé, le SelectedValue n'étant pas disponible
dans cette façon d'utiliser la combobox. Ce qui nous donne :
Code : [Link]
Private Sub CB_MENU_SelectedIndexChanged(ByVal sender As [Link], ByVal e As
[Link]) Handles CB_MENU.SelectedIndexChanged
Me.LBL_TEXTE.Text = Me.CB_MENU.SelectedItem
End Sub
• Notre bouton Écrire, ce n'est pas sorcier : on récupère la valeur de la textbox et on l'affiche ; voilà le tout :
[Link] Then
End
End If
End Sub
Private Sub CB_MENU_SelectedIndexChanged(ByVal sender As [Link], ByVal e As
[Link]) Handles CB_MENU.SelectedIndexChanged
'Écrit le texte de la combobox lors du changement d'index
Me.LBL_TEXTE.Text = Me.CB_MENU.SelectedItem
End Sub
Private Sub EcrireToolStripMenuItem_Click(ByVal sender As [Link], ByVal e As [Link])
Handles
[Link]
'Écrit le texte de la textbox lors de l'appui sur « Écrire»
Me.LBL_TEXTE.Text = Me.TXT_MENU.Text
End Sub
End Class
Cours: Programmation Événementielle 135
Les Menus
• Lors d'un clic et de la sélection, le label bouge. Ce programme était là pour vous montrer les utilisations des différents
menus.
• Il existe des menus contextuels, des barres de menus, des barres d'outils…
• Le menu contextuel apparaît lors du clic droit de la souris.
• Les menus sont réservés aux applications volumineuses et nécessitant une grande interaction avec l'utilisateur.
Imports [Link]
Créez une fonction pour établir la connexion avec la base de données MySQL. Remplacez les valeurs de
la chaîne de connexion par les vôtres :
Ajoutez un gestionnaire d'événements pour le bouton de connexion (btnLogin_Click) pour vérifier les
informations de connexion avec la base de données :
Ajoutez un gestionnaire d'événements pour le bouton Quitter (btnExit_Click) pour fermer l'application :
Cela devrait vous donner une base solide pour une page de connexion [Link] avec une liaison à une
base de données MySQL. Assurez-vous de remplacer les valeurs de la chaîne de connexion par celles
de votre propre base de données.
Pour masquer la saisie du mot de passe dans votre formulaire de connexion [Link], vous pouvez définir
la propriété PasswordChar du contrôle TextBox qui gère la saisie du mot de passe. Dans votre code
existant, vous pouvez modifier la méthode InitializeUI pour inclure cette propriété pour le TextBox du
mot de passe.
Dans le code ci-dessus, ‘[Link]’ = "*" définit le caractère de mot de passe à '*'.
Vous pouvez choisir n'importe quel caractère que vous préférez pour masquer la saisie du mot de passe.
Assurez-vous de remplacer ‘txtPassword’ par le nom réel du contrôle ‘TextBox’ que vous utilisez pour
la saisie du mot de passe dans votre formulaire. Vous devrez peut-être également ajuster le
positionnement et d'autres propriétés en fonction de votre conception d'interface utilisateur.
Après avoir apporté ces modifications, lorsque les utilisateurs saisissent leur mot de passe dans le
‘TextBox’ ‘txtPassword’, les caractères seront masqués avec le caractère spécifié par ‘PasswordChar’,
offrant ainsi une méthode plus sécurisée pour gérer la saisie du mot de passe.
Pour intégrer une page d'enregistrement dans votre projet [Link] et la lier à une base de données
MySQL, vous pouvez suivre une approche similaire à celle utilisée pour la page de connexion.
Ajoutez une nouvelle fenêtre de formulaire à votre projet (par exemple, frmRegister), et concevez-la
avec des contrôles pour saisir les informations d'enregistrement telles que nom d'utilisateur, mot de
passe, email, etc.
Dans le code-behind ([Link]), importez les espaces de noms nécessaires :
Imports [Link]
Définissez une fonction pour établir la connexion avec la base de données MySQL (similaire à ce que
vous avez déjà fait pour la page de connexion)
Catch (Attraper) :
La partie Catch est utilisée pour attraper et gérer toute exception qui se produit à l'intérieur du bloc Try.
Dans le contexte du code, le bloc Catch est utilisé pour afficher un message d'erreur à l'utilisateur si une
erreur se produit lors de l'exécution d'une opération de base de données (par exemple, l'échec de l'exécution
d'une requête SQL).
Vous pouvez personnaliser le message d'erreur affiché dans le bloc Catch pour donner des informations
utiles sur ce qui s'est mal passé.
L'utilisation du mot-clé Using en [Link] est une manière élégante de gérer les ressources qui doivent être
libérées après leur utilisation, telles que les connexions à la base de données, les fichiers, etc. La syntaxe
Using permet de garantir que ces ressources sont correctement libérées même en cas d'erreur ou d'exception.
Assurez-vous de modifier les valeurs de la chaîne de connexion pour qu'elles correspondent à votre base de
données MySQL. De plus, adaptez le code pour inclure d'autres champs ou validations nécessaires selon vos
besoins.
En intégrant cette fonctionnalité, votre application devrait maintenant permettre à un utilisateur de s'enregistrer
et d'ajouter ces informations dans votre base de données MySQL.