• Aucun résultat trouvé

Débuter la programmation avec le langage Visual Basic dot Net

N/A
N/A
Protected

Academic year: 2021

Partager "Débuter la programmation avec le langage Visual Basic dot Net"

Copied!
52
0
0

Texte intégral

(1)

SUPPORT VISUAL BASIC

STUDIO 2008

(2)

TABLE DES MATIERES

1. INTRODUCTION ... 4

2. ELEMENTS D'UN PROGRAMME ... 5

2.1. LES COMMANDES ET FONCTIONS ... 5

2.2. LES OBJETS : METHODES ET EVENEMENTS ... 5

2.2.1. Propriétés ... 5 2.2.2. Méthodes ... 6 2.2.3. Evénements ... 6 2.3. METHODOLOGIE DE TRAVAIL ... 6 2.4. COMPOSITION D'UN PROGRAMME ... 6 3. LES VARIABLES ... 8 3.1. LES NOMS ... 8 3.2. PORTEE ... 8 3.3. LES TYPES ... 8 3.3.1. Type numérique ... 9 3.3.2. Type décimaux ... 9 3.3.3. Type caractères ... 9 3.3.4. Type Boolean ... 9 3.3.5. Type Date ... 9 3.3.6. Type nullable... 10 3.4. CONVERSION DE TYPE ... 10 3.5. FORMATAGE ... 11 3.6. CHAINE DE CARACTERES ... 11 3.7. INFERENCE DE TYPE... 12 3.8. LES CONSTANTES ... 12 3.9. VARIABLES TABLEAUX ... 12 3.10. LES STRUCTURES ... 13 4. ENTREES/SORTIES DE DONNEES ... 15 4.1. SORTIES ... 15 4.2. ENTREES : ... 16 5. CALCULS ET COMPARAISONS ... 17 5.1. LES OPERATEURS DE COMPARAISON ... 17 5.2. LES CALCULS ... 17 6. BOUCLE ET TEST ... 18 6.1. GOTO ... 18 6.2. IF….THEN ... 18 6.3. SELECT….CASE ... 18 6.4. FOR…NEXT ... 19 6.5. DO…LOOP ... 20 6.6. FOR EACH ... NEXT ... 20 6.7. WITH …END WITH ... 20 6.8. USING …END USING ... 21 7. LES ERREURS ... 22 7.1. DEBOGAGE ... 22

7.2. GESTION DES ERREURS ... 22

8. APPLICATION WINDOWS ... 24

8.1. INTERFACE SDI ... 24

8.2. INTERFACE MDI ... 24

8.3. LES EVENEMENTS ... 26

8.3.1. Evénements clavier ... 26

8.3.2. Les événements souris ... 27

(3)

9.1. BOITE DE DIALOGUE DE WINDOWS ... 29

9.1.1. Ouvrir ... 29

9.1.2. Choix des dossiers ... 29

9.1.3. Choix d'une couleur ... 29

9.1.4. Choix d'une police... 30

9.2. CONTROLE D'AFFICHAGE ... 30 9.2.1. Le label ... 30 9.2.2. LinkLabel ... 30 9.2.3. Le contrôle ToolTip ... 31 9.2.4. Le contrôle ErrorProvider ... 31 9.2.5. Le contrôle progressbar ... 31 9.3. EDITION DE TEXTE ... 32 9.3.1. Le contrôle TextBox ... 32 9.3.2. Le contrôle MaskedTextBox ... 32 9.3.3. Le contrôle RichTextBox ... 33 9.4. DECLENCHEMENT D'ACTION ... 33 9.4.1. Button ... 33 9.4.2. MenuStrip ... 33 9.4.3. ContextMenuStrip ... 34 9.4.4. Toolstrip ... 35 9.5. CONTROLES DE SELECTION ... 35 9.5.1. Checkbox ... 35 9.5.2. RadioButton ... 37 9.5.3. Groupbox ... 37 9.5.4. Listbox ... 38

9.5.5. Les listes déroulantes ... Erreur ! Signet non défini. 9.6. LE TIMER ... 41

9.7. CREATION DE MENU: ... ERREUR !SIGNET NON DEFINI. 9.8. L’OBJET SCREEN : ... ERREUR !SIGNET NON DEFINI. 9.9. L’OBJET APP : ... ERREUR !SIGNET NON DEFINI. 10. LES FEUILLES ... ERREUR ! SIGNET NON DEFINI. 10.1. LA GESTION : ... ERREUR !SIGNET NON DEFINI. 10.2. APPLICATION MDI(MULTIPLE DOCUMENT INTERFACE) : ... ERREUR !SIGNET NON DEFINI. 10.3. PROPRIETE D’UNE FEUILLE : ... ERREUR !SIGNET NON DEFINI. 10.4. LES EVENEMENTS D’UNE FEUILLE : ... ERREUR !SIGNET NON DEFINI. 10.5. LES METHODES D’UNE FEUILLE : ... ERREUR !SIGNET NON DEFINI. 11. LES IMPRESSIONS : ... ERREUR ! SIGNET NON DEFINI. 11.1. LES PROPRIETES : ... ERREUR !SIGNET NON DEFINI. 11.2. LES METHODES : ... ERREUR !SIGNET NON DEFINI. 12. MODULES ET PROCEDURES ... ERREUR ! SIGNET NON DEFINI. 12.1. MODULES : ... ERREUR !SIGNET NON DEFINI. 12.2. LES PROCEDURES : ... ERREUR !SIGNET NON DEFINI. 12.3. PROCEDURES FUNCTION :... ERREUR !SIGNET NON DEFINI. 12.4. PROCEDURES SUB : ... ERREUR !SIGNET NON DEFINI. 13. COLLECTION : ... ERREUR ! SIGNET NON DEFINI. 14. FICHIERS ... ERREUR ! SIGNET NON DEFINI. 14.1. L'ACCES SEQUENTIEL ... ERREUR !SIGNET NON DEFINI. 14.1.1. L'ouverture ... 50

14.1.2. L'écriture ... 51

14.2. L'ACCES DIRECT ... ERREUR !SIGNET NON DEFINI. 14.2.1. Définition de la structure ... Erreur ! Signet non défini. 14.2.2. Ouverture ... Erreur ! Signet non défini. 14.2.3. La lecture ... Erreur ! Signet non défini. 14.2.4. L'écriture ... Erreur ! Signet non défini. 14.3. L'ACCES BINAIRE ... ERREUR !SIGNET NON DEFINI. 14.4. I D ... 51

(4)

15.1. LES DIFFERENTS OBJETS ... ERREUR !SIGNET NON DEFINI.

15.2. CONTROLES "DONNEES OU "DATA" ... ERREUR !SIGNET NON DEFINI. 16. LIAISON DDE-OLE ... ERREUR ! SIGNET NON DEFINI.

16.1. LIAISON DDE ... ERREUR !SIGNET NON DEFINI.

(5)

1.

INTRODUCTION

Visual Basic Studio n’est pas une évolution de Visual Basic 6.0 mais vraiment une nouvelle technologie de développement d’applications. Vous pouvez faire :

• Des applications Windows classiques • Des applications Web

• Des services de Windows • Des services Web.

Tout ceci est possible grâce à FRAMEWORK .NET qui prend en charge l’intégralité d’une application. Le Framework est hébergé par le système d’exploitation et au moment où j’ai ce support la dernière version est la 3.5. Vous pouvez aussi faire fonctionner une plateforme .NET sur des systèmes Linux, Mac OS, Sun,…

De manière simple, le Framework est composé de deux éléments principaux :

• Common Language Runtime permet de créer une machine virtuelle pour prendre en charge les instructions au fur et à mesure des besoins.

• Base Class Library qui met à votre disposition un ensemble d’outils pour votre future application. Ces outils sont disponibles sous forme de classe. Une classe est organisée de manière hiérarchique.

A bon gout il y a un nombre trop important de classe mais au moins on a le choix.

Mon cours sera axé sur la création d’interface Windows et sur l’accès aux bases de données dont cela concernera la classe system.windows et system.data.

(6)

2.

ELEMENTS D'UN PROGRAMME

2.1. Les commandes et fonctions

Les commandes sont des instructions connues de VB avec lesquelles vous lui passez des ordres. On parle de "mots-clé".

Les fonctions servent à calculer des nombres ou à manipuler du texte et retournent un résultat.

Vous pouvez combiner commandes et fonctions.

Par exemple vous demandez à VB : "d'afficher le calcul racine carré de 4"

Dans VB toute portion de code doit être contenue dans un module ou une classe.

Personnellement je vais utiliser la console qui permet de faire des petites procédures afin de vous faire découvrir les bases de vb sans passer par des manipulations longues et fastidieuses.

2.2. Les objets : méthodes et événements

Avec VB, la gestion des menus et des boîtes de dialogues sont laissées à Windows.

Ainsi les manipulations standard de Windows sont utilisables avec les mêmes touches et les mêmes actions souris.

La première action avec VB est de construire une feuille de travail (form) pour le dialogue avec l'utilisateur. Chaque chose que vous allez placer sur cette feuille de travail, par exemple, un texte, un cadre, une zone de saisie, …sera un objet.

Une feuille de travail est elle-même un objet.

De plus, chaque objet dispose de propriétés, de méthodes et d'événement. Chaque objet porte un nom pour l'identifier.

2.2.1. Propriétés

Les propriétés sont par exemple, la couleur ou la légende des objets.

Vous pouvez les initialiser à la création via la boîte à outils, mais aussi les modifier par programme. Pour modifier par programme vous pouvez donner le nom de l'objet, ainsi que la désignation de la propriété.

Par exemple vous pouvez changer le nom de la feuille de travail qui s'intitule "Form1" en "Adresse".

La propriété relative au nom s'appelle "Caption". Cela nous amène à la syntaxe suivante :

Form1.Caption = "Adresse" De manière plus générale :

NomObjet.Nompriété=" " fonction commande

(7)

2.2.2. Méthodes

Une commande est une instruction pour un processus interne : traitement de variable, test, boucle,…

Une méthode est toujours un verbe en français.

Une méthode est une instruction relative à un processus au système tel que le traitement des entrées, des sorties.

En résumé, toutes les manipulations d'objet que ce soit des fenêtres, des contrôles, des imprimantes, sont des méthodes. On peut résumer ceci en disant que toutes les instructions adressées à un objet bien défini sont des méthodes.

2.2.3. Evénements

Le plus important dans un programme VB, se sont les actions de l'utilisateur. Par exemple lorsqu'il clique sur un bouton de commande "OK" ou bien lorsqu'il sélectionne une commande d'un menu.

Pour que le programme ne passe pas tout son temps à vérifier quel est l'objet qui a été activé ou non, VB répartit lui-même les tâches ou déclenche la routine associés à chaque action.

Ses tâches sont appelées des "procédures évènementielles".

Chaque évènement à un nom, mais cela ne suffit pas. En effet, le nom de l'objet dans lequel l'événement a été crée, ainsi que la désignation de l'évènement en lui-même se combinent pour donner un nom de procédure. Par exemple, si vous cliquez sur une fenêtre intitulée "Adresse", vous déclenchez automatiquement la procédure :

Adresse_load() Nom objet_nom événement

2.3. Méthodologie de travail

Voici les différentes étapes à suivre :

1) Création de la boîte de dialogue, placement des contrôles, des menus.

2) Affectation des propriétés aux objets de cette feuille de travail. 3) Analyse des événements auxquels vous devez réagir.

4) Appeler la procédure événementielle associée dans l’éditeur. 5) Programmation de la procédure relative à l’événement.

2.4. Composition d'un programme

(8)

Attention un projet fait partie d'une solution qui portera un nom et sera votre dossier plus d'autres petites choses comme un fichier vbproj et vbproj.user. Dans une solution, vous pouvez trouver différents projets.

Votre solution se gère avec l'explorateur de solution dont le raccourci est Ctrl-R.

Vous pouvez aussi créer des dossiers dans votre solution afin d'organiser vos différents projets.

Par exemple nous allons créer une solution "formation" avec un projet "base" de type console ou code.

Vous obtenez l'écran suivant :

Dans un module (module1) votre trouverez une procédure (Main) et observez l'explorateur de solutions.

De plus une solution doit se paramétrer avec le menu Projet\Propriété de formation et notamment l'objet de démarrage :

(9)

3.

LES VARIABLES

3.1. Les noms

Une variable est définie par son nom et son symbole. Le nom peut être un mot d’une longueur de 255 caractères, mais il doit commencer par une lettre suivie de lettre, chiffres et -. Attention au mot-clé.

Minuscule et majuscule n’ont pas d‘importance mais plus pratique pour l'aide à la saisie.

Vous n'êtes pas obliger de les déclarer sauf si il y a l'instruction Options Explicite dans le module général. A éviter par principe.

3.2. Portée

Toute variable possède une certaine durée de vie, ce que l’on appelle sa portée. Celle-ci dépend de deux éléments : le mode et l’emplacement de ces variables :

• Si vous déclarez une variable à l’aide de l’instruction Dim sa partie est limitée à cette procédure. On dit que la variable est locale.

• Si vous déclarez une variable à l’aide de Dim dans la section Générale, elle est limitée au module dans toutes les procédures. On peut utiliser l’instruction Private à la place de Dim

• Si vous déclarez une variable toujours dans la section Générale en utilisant le mot clé Public à la place de Dim, la variable est accessible dans toutes les feuilles et tous les modules de l’application. On dit que la variable est globale.

L’instruction Static à la place de Dim permet de garder la valeur précédente. On peut aussi placer la ligne Option Explicit dans la partie générale.

3.3. Les types

Toutes les données qui surgissent en cours de programme doivent être stockées en mémoire par l’intermédiaire d’une variable, mais il faut identifier la nature de la valeur stockée.

Pour cela vous devez déclarer votre variable au début de votre programme. Voici les différents types de variables en distinguant les numériques entiers, les décimaux, les caractères, les booleans, les dates, les nullables.

Attention, aujourd'hui la philosophie est de ne pas mettre l'information donc quand vous déclarez une variable de type entier et que vous mettez du texte il n'y plus de message d'erreur.

(10)

3.3.1. Type numérique Sbyte -128 +127 Short -32 768 + 32 767 Integer - 2 147 483 648 2 147 483 647 Long - 9,22 10^38 9,22 10^38 3.3.2. Type décimaux Single -3.40282347 10^38 +3.40282347 10^38 Double -1.79769 10^308 -1.79769 10^308 Decimal - 7.92281 10^27 7.92281 10^27 3.3.3. Type caractères

Il existe le type Char pour stocker un caractère de type unicode utilisant deux octets dont le dernier pour le pays et l'alphabet du pays.

Il existe le type String pour stocker 2 147 483 648 caractères.

3.3.4. Type Boolean

Permet d'avoir deux valeurs possibles : True ou False, ou -1 et 0 respectivement.

3.3.5. Type Date

(11)

3.3.6. Type nullable

Le type nullable permet de définir une variable qui n'a pas de valeur bien définie comme une récupération d'information venant d'une base de données. Il suffit de mettre le symbole ? après le nom ou le type

Uniquement pour les types numériques ou structure.

3.4. Conversion de type

Voici des exemples courants

Val() Convertit une chaîne en un nombre

Str() Convertit une valeur numérique en une chaîne

Cstr() Convertit une valeur numérique en une chaîne mais le point devient une virgule suivant le panneau de configuration

CInt() Convertir une chaîne de caractères en entier Clng() Convertir une chaîne de caractères en entier long CSng() Convertir une chaîne de caractères en réel simple CDbl() Convertir une chaîne de caractères en réel double CCur() Convertir une chaîne de caractères en réel

(12)

3.5. Formatage

Vous pouvez formater par l'instruction format. Voici des exemples :

3.6. Chaîne de caractères

De manière générale une fonction chaîne de caractère permet de manipuler, de découper un morceau de texte.

+ ou & Concaténation

Instr() Recherche des caractères dans une chaîne INSTR(Depuis, chaine,Cherche)

Left() Extraire la partie gauche d’une chaîne Left(chaine,longueur)

Len() Renvoi la longueur d’une chaîne Longueur=Len(chaine)

Mid() Extraire une portion de chaîne Mid(chaine,Depuis,Longueur)

Right() Extraire la partie droite d’une chaine Right(chaine,longueur)

LTrim() Supprime les espaces à gauche LTrim(chaine)

RTrim() Supprime les espaces à droite RTrim(chaine)

LCase() Convertit une chaîne en minuscules Lcase(chaine)

(13)

Ucase() Convertit une chaîne en majuscules Ucase(chaine)

Space() Génère des espaces Space(longueur)

3.7. Inférence de type

Le compilateur peut déterminer le type de variable à utiliser au moment de son affectation. Dans ce cas vous ne devez pas préciser de type et vous pouvez aussi lui affecter une valeur.

3.8. Les constantes

La définition d'une constante se fait par l'instruction Const.

Il existe aussi des constantes prédéfinie dans vb comme vbCR (=chr(13)), vbCRLf (chr(13) et saut de ligne),…

3.9. Variables tableaux

Un tableau n'est rien d'autre qu'un nombre prédéfini de variables de même nature rangées sans un nom commun.

Pour définir :

Dim NomTableau (nombre ligne, nombre colonne) As Type

Dim Tableau (100)

Doit être fait dans la partie Déclaration

(14)

Si vous utilisez la commande Redim au lieu de Dim, le tableau sera détruit à la sortie de la procédure. Elle permet aussi de redimensionner le tableau en effaçant ou non le tableau. Par exemple ReDim Preserve(conserve le contenu) Tableau (200).

Pour avoir un tableau disponible partout dans un programme, utilisé : Global au lieu de Dim

Pour identifier un type pour un tableau on peut aussi lui donner un symbole. Par exemple Dim Tableau(100) crée un tableau de 100 lignes de caractères. Pour identifier les limites d'un tableau, on utilise length et rank pour savoir

sa dimension.

Pour rechercher dans un tableau on utilise indexof et pour le tri sort

Voici un exemple de manipulation de tableau :

3.10. Les structures

Cela vous permet de combiner des données de différents types pour former un nouveau type composite comme une table par exemple.

Vous devez d'abord déclarer votre structure entre les mots clés Structure … End Structure et après vous pouvez les utiliser.

(15)
(16)

4.

ENTREES/SORTIES DE DONNEES

4.1. Sorties

Mais la meilleure façon pour le faire est d'utiliser une boite de message. Une boite de message permet également de fournir une réponse.

Syntaxe :

MsgBox(Texte Message,Numéro,Titre)

Le numéro est une addition de différentes valeurs dont voici la signification

Première valeur :

Deuxième valeur :

Troisième valeur :

Exemple :

MsgBox ("Vous avez appris quelques choses",36,"Question")

Bouton Valeur

OK (par défaut) 0

Ok et Annuler 1

Abandon, Répéter, Ignorer 2

Oui, Non, Annuler 3

Oui, Non 4 Répéter et Annuler 5 Icones Valeur Panneau Stop 16 Point d'interrogation 32 Point d'exclamation 48 Information 64

Bouton par défaut Valeur

1er Bouton 0

2ème Bouton 256

3ème Bouton 512

(17)

Attention quand vous cliquez sur un bouton, cette instruction renvoie la valeur du bouton cliqué à condition de transformer votre instruction en fonction. Pour cela vous devez stocker la réponse dans une variable.

Voici la valeur des boutons :

Ok=1, Annuler=2, Abandon=3, Répéter=4, Ignorer=5, Oui=6, Non=7

4.2. Entrées :

Permet de saisir des données de l'utilisateur. On utilise également une boite que l'on appelle Boite de dialogue. Attention l'information saisie par l'utilisateur sera toujours du texte.

Syntaxe :

Nomvariable = InputBox (message, titre, défaut ) Exemple :

Reponse = InputBox("SVP, Entrez votre nom") Msgbox Reponse

Vous pouvez aussi utiliser naturellement une zone de saisie dans un objet Forms.

(18)

5.

CALCULS ET COMPARAISONS

5.1. Les opérateurs de comparaison

> Supérieur

< Inférieur

<> Différent

>= Supérieur ou égal

<= Inférieur ou égal

Like utilisation de caractère générique

Not Négation

And Et logique

OR Ou logique

XOR Ou exclusif

5.2. Les calculs

Bien sûr vous trouvez les opérateurs standards qui sont :

+ Addition - Soustraction * Multiplication / Division ^ Puissance \ Division entière

MOD Donne le reste de la division

& Concaténation de chaînes

Mais aussi les fonctions mathématique suivante :

Sin(x) Sinus de x

Cos(x) Cosinus de x

Ton(x) Tangente de x

Atn(x) Arc tangente de x

Sqr(x) Racine Carrée de x

(19)

6.

BOUCLE ET TEST

6.1. GoTo

Permet de dérouter le cours de normal d'un programme à une étiquette. A éviter absolument car cela peut provoquer des erreurs d'exécution suivant le modèle de votre microprocesseur.

Syntaxe :

Goto Etiquette 'Instructions Etiquette 'Instructions

On peut remplacer par un Goto qui permet d'accéder à une série d'étiquettes en fonction de la valeur d'une certaine expression.

Syntaxe :

On Test Goto Suite1, Suite2, Suite3

6.2. If….Then

Permet de renvoyer à une suite d'instructions en fonction d'une condition. Syntaxe :

If Condition Then

'Instructions si condition est vraie

Else

'Instructions si condition est fausse

End If

Else n'est pas obligatoire si vous avez qu'une seule instruction. If Condition Then instruction1

Il existe une variante : IIF(condition, valeur si vrai, valeur si faux)

Vous pouvez aussi ajouter ElseIf Condition2 Then, mais cela devient lourd et il est préférable de faire une instruction Select Case.

6.3. Select….case

C'est une structure qui permet de faire des tests comme la structure IF. Si vous devez écrire une série de conditions, il est préférable de faire appel à Select Case plutôt qu'à If car l'écriture est plus simple et plus courte.

(20)

Voici un exemple qui test les différentes saisons : Select Case NuméroMois

Case1,2,12 Saison="Hiver" Case 3,4,5 Saison="Printemps" Case 6 Saison="Eté" Case 7,8 Saison="Eté-Vacances" Case 9,10,11 Saison="Automne" Case Else Saison="Inconnue" End Select 6.4. For…Next

Ici la structure For permet de faire une boucle compteur et permet de faire Xfois une suite d'instructions.

Syntaxe :

For nomvariable = début To Fin Step pas

Instructions

Next

Utile pour compter un nombre de ligne pour une facture, une page, etc…. Exemple :

On veut remplir une variable tableau de la manière suivante :

0 1 2 3

1 2 3 4

2 3 4 5

9 Voici la solution :

Dim Essai(9,4) as Integer For I=0 To 9

For J=0 to 3

Essai (I,J)=I+J Next

(21)

6.5. Do…Loop

Cette structure permet de faire une boucle conditionnelle.

Permet d'exécuter une suite d'instruction en fonction d'une condition. Il existe plusieurs variante.

Syntaxe 1 :

Do Until condition On boucle jusqu'à ce que la

Instructions condition devienne vraie.

Loop Syntaxe 2 :

Do While condition On boucle tant que la condition

Instructions reste vraie ou jusqu'à ce que la

Loop condition soit fausse.

Syntaxe 3 :

Do Idem que la syntaxe 1 mais on

Instructions passe au moyen une fois.

Loop Until Condition Syntaxe 3 :

Do

Instructions Loop While condition

On peut sortir d'une boucle avec Exit Do

On peut remplacer Do While …Loop par While Condition …. Instructions …Wend.

6.6. For each ... next

Permet d'exécuter un bloc de code pour chaque élément d'un tableau ou d'une collection. Voici un exemple :

6.7. With … End with

Permet d'exécuter une série d'action sur un objet sans avoir à rappeler son nom. Très pratique et très rapide. On le verra en œuvre dans les connexions aux bases de données.

(22)

6.8. Using … End Using

Utiliser pour un bloc de code prenant une ressource externe comme une connexion à une base de données.

Permet de prendre en charge automatiquement la libération de la ressource à la fin du code

(23)

7.

LES ERREURS

7.1. Débogage

On distingue 3 types d'erreurs pouvant se produire :

- les erreurs de syntaxe : erreurs d'écriture. Se fait en temps réel. - les erreurs d'exécution : erreurs lors de l'exécution

- les erreurs logiques : le programme ne se déroule pas comme vous le souhaitiez.

Pour vous aider dans cette démarche on utilise la fenêtre Débogage. Si vous exécutez votre programme pas à pas ainsi vous allez examiner le code et les variables.

• La touche F8 pour un pas à pas détaillé

• La touche Shift F8 pour un pas à pas principal • La touche Ctrl-B pour interrompre

Vous pouvez placer un point d'arrêt en cliquant dans la zone grise à gauche de votre écran.

7.2. Gestion des erreurs

Lorsqu'une erreur se produit, la variable Err de VB contient le numéro de l'erreur et une boite de message vous informe mais le programme s'arrête. Pour éviter cela, on peut indiquer une séquence d'instruction en cas d'erreur. Ce déroutage est effectué par l'instruction On error ou par un renvoi à une procédure.

Syntaxe de l'étiquette : On Error GoTo étiquette

Attention placé cette instruction en 1er ligne (avant les futurs erreurs).

Pour revenir dans le déroulement normal de votre programme il faut avoir l'instruction RESUME qui reprend à la ligne de l'erreur et RESUME NEXT qui reprend à la ligne suivante.

Exemple :

Sub maprocédure() On Error GoTo Erreur

Instructions

Exit Sub Erreur :

(24)

Syntaxe de la procédure :

On peut éviter le renvoi à une étiquette, en testant la valeur de la variable Err On error Resume Next

Exemple :

Sub procerreur()

On Error Resume Next

Instructions

If Err= … Then

Instructions

End If End Sub

(25)

8.

APPLICATION WINDOWS

8.1. Interface SDI

Une seule fenêtre est disponible (Single Document Interface). Pour pouvoir ouvrir un autre document il faut utiliser la méthode show.

Pour fermer un document on utilise Me.close()

Personnellement je préfère utiliser une interface MDI qui est plus pratique.

8.2. Interface MDI

Les applications MDI (Multi Document Interface) sont constituées de deux types de feuilles :

• Les feuilles mères • Les feuilles filles.

Pour définir une feuille mère, il suffit de mettre sa propriété IsMdicontainer à True.

Vous remarquerez qu'il y a déjà beaucoup de choses de faites!!!.

Maintenant nous allons créer deux fenêtres filles. Pour cela il suffit de mettre le code suivant au chargement de la feuille mère :

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

System.EventArgs) Handles MyBase.Load Dim fenetre1 As Form

Dim fenetre2 As Form

(26)

fenetre1.MdiParent = Me fenetre1.Show() fenetre2.Text = "fenetre 2" fenetre2.MdiParent = Me fenetre2.Show() End Sub

Maintenant nous allons voir comment créer une application de type explorateur.

• A partir de votre feuille mère, ajouter un contrôle "TreeView" • Modifiez la propriété "Dock" du "TreeView" sur "Left" pour le

mettre sur la bordure gauche de la fenêtre

• Ajouter les éléments dans le "TreeView" en vous aidant de l'éditeur de nœuds.

• Vous créez vos différents nœuds en donnant comme nom "im" pour les images et "re" pour les recettes :

(27)

Et idem pour les sous nœuds

• Maintenant vous allez écrire le code suivant en faisant un double clic sur le premier nœud :

If Not IsNothing(e.Node.Parent) Then

Dim f As Form

For Each f In Me.MdiChildren f.Close()

Next

Select Case e.Node.Parent.Name Case "im"

MsgBox("Vous avez sélectionné l'image :" _ & e.Node.Name)

Case "re"

MsgBox("Vous avez sélectionné la recette de : " _ & e.Node.Name)

End Select End If

8.3. Les événements

8.3.1. Evénements clavier

L'utilisateur peut simplement appuyer sur le clavier et cela se traduit par 3 événements distincts :

• KeyDown : lorsque vous appuyez sur la touche

• KeyUp : lorsque vous relâchez la touche

• KeyPress : lorsque lors de l'enfoncement et uniquement si la touche correspond à un caractère ASCII

Sur KeyDown et KeyUp, un argument KeyEventArgs indique si la touche Alt, Ctrl et Shift sont utilisés.

(28)

Par exemple si vous appuyez sur la combinaison Ctrl-F8, vous voulez qu'une zone de texte se transforme en majuscule. Sur l'événement KeyUp

If e.Control And (e.KeyCode = 119) Then

TextBox1.Text = UCase(TextBox1.Text)

End If

Par exemple vous voulez émettre un bip si l'utilisateur et en plus inhiber cette saisie. Pour cela vous avez la propriété "Handled" qu'il faut mettre à "true" If IsNumeric(Chr(e.KeyCode)) Then

Beep()

e.Handled = True

End If

8.3.2. Les événements souris

Liés à l'utilisation des boutons et de la molette de la souris. Voici les principaux événements :

• MouseDown : lorsque qu'un bouton est enfoncé

• MouseUp : lorsque qu'un bouton est relâché

• MouseWheel : lorsque la molette est actionnée.

Un paramètre de type "MouseEventArgs" est fourni qui vous permet d'obtenir des informations comme :

• Le bouton à l'origine de l'événement : "button"

• Le nombre de fois où le bouton est enfoncé ou relâché : "Clicks" • Le nombre de crans de déplacement de la roulette : "Delta" A noter que la valeur d'un cran est de 120.

Vous pouvez aussi avoir un déplacement de la souris :

• MouseEnter : lorsque la souris entre au-dessus d'un contrôle

• MouseMove : lorsque la souris se déplace sur un contrôle

• MouseLeave : lorsque la souris quitte la surface du contrôle

• MouseHover : lorsque la souris reste pendant 1 seconde

Nous allons faire un petit logiciel de dessin qui trace un point à chaque déplacement de la souris si on appuie sur le bouton gauche.

(29)

Sur cette form vous placez 3 zones de texte (txtrouge, txtbleu, txtvert).

Vous tapez le code suivant sur l'événement MouseMove mais noté bien la première ligne :

Maintenant vous allez ajouter le code suivant quand vous allez toucher à votre molette de souris sur les 3 zones de texte.

Maintenant nous allons éviter de cliquez sur la zone de texte pour actionner la molette grâce à l'événement "mouseHover" et en tapant le code :

(30)

9.

LES COMPOSANTS D'UN FORMULAIRE

9.1. Boite de dialogue de Windows

Rien ne vous empêche de reprendre les boites de dialogues de Windows grâce à une série de classes de l'espace System.windows.form

Nous allons voir quelques exemples.

9.1.1. Ouvrir

9.1.2. Choix des dossiers

Très similaire à "Ouvrir" mis à part la propriété "Multiselect" qui disparait.

9.1.3. Choix d'une couleur

Utilisation de la classe ColorDialog où la propriété Color permet d'initialiser la boite de dialogue et la propriété "AllowFullOpen" permet d'interdire l'affichage des couleurs personnalisées et la propriété "FullOpen" pour avoir un choix plus important.

(31)

9.1.4. Choix d'une police

Utilisation de la classe FontDialog avec la propriété "Font" qui permet de définir la police de caratères utilisée et le choix de la couleur ou non ("ShowColor") et des effets ("ShowEffects"). Je vous conseille de mettre la propriété "FontMustExist" a "True" pour forcer la vérification de la fonte se trouvant sur la machine. "Maxsize" et "MinSize" permet de planifier une plage.

9.2. Contrôle d'affichage

9.2.1. Le label

Le plus basique dont les propriétés essentielles sont :

• Text : affiche le texte

• Autosize : s'adapte en fonction du texte • TextAlign : position du texte

• Image : affiche une image

9.2.2. LinkLabel

Idem que le contrôle "Label" et ajoute simplement un lien hyper texte grâce à la propriété "LinkArea" pour indiquer la portion du texte qui activera le lien, "linkcolor" pour la couleur normal, "visitedlinkcolor" pour la couleur après une première utilisation et "activelinkcolor" au moment où l'on clique dessus.

Quand l'utilisateur clique sur le lien, l'événement "LinkClicked" est déclenché et à vous de jouer pour le code. La propriété "LinkVisited" permet de valider que le lien a été cliqué.

Par exemple pour lancer votre navigateur sur la page de google.fr avec un contrôle qui s'appelle lnk_internet :

(32)

9.2.3. Le contrôle ToolTip

Ce contrôle permet l'affichage d'une bulle d'information associée à un contrôle. Attention ce contrôle n'est pas visible et il ajoute la propriété "Tooltip" à chaque contrôle, qui vous servira à placer une bulle d'information. Vous pouvez aussi mettre votre bulle d'information à partir de ce contrôle :

ToolTip1.SetToolTip(button1,"Cliquez pour jouer")

9.2.4. Le contrôle ErrorProvider

Ce contrôle vous permet d'afficher des erreurs de validation d'information par une petite icône associé à un texte. Cette vérification est effectuée quand le contrôle perd le focus et votre code doit être écrit dans l'événement "Validating". La propriété "SetError" permet d'associer un texte.

Par exemple dans une texte box voulez-vous signaler une erreur de saisie

9.2.5. Le contrôle progressbar

Permet d'informer l'utilisateur de la progression d'une action. Vous avez plusieurs styles d'affichage :

• Continuous : barre bleue pleine

• Blocks : série de petits rectangles

• Marquee : idem que block mais défilement

La propriété "value" contrôle la barre de progression entre la propriété

"Minimum" et "Maximum". La méthode "PerformStep" permet

d'incrémenter la valeur en fonction de la propriété "Step". Vous avez aussi la propriété "Increment".

Evitez de prendre le style "Marquee" car "Value", "PerformStep" et "Increment" ne fonctionne pas.

(33)

Voici une horloge réalisé avec 3 progressbar.

9.3. Edition de texte

9.3.1. Le contrôle TextBox

Le plus classique mais il faut savoir qu'il peut accueillir 2000 caractères ou 32000 si la propriété "MultiLine" est à "True". La propriété "WordWrap" doit être à "True" pour voir la barre de défilement verticale. La propriété "Lines" est une variable tableau contenant les lignes si vous êtes en multi lignes. La propriété "SelectedText" permet de sélectionner un texte.

La méthode "Undo" permet d'annuler la dernière modification (Ctrl-Z).

9.3.2. Le contrôle MaskedTextBox

Version évolué d'un textbox car il permet de vérifier automatiquement que les informations saisies correspondent à ce que vous attendez.

La prorpiété "Mask" détermine le format des informations saisies.

(34)

9.3.3. Le contrôle RichTextBox

Comme le contrôle "TextBox" mais vous pouvez en plus ajouter de la mise en forme comme les couleurs, la police,… un peu comme le bloc note voir le Wordpad.

La méthode "LoadFile" et SaveFile" permet de charger et d'enregistrer un fichier avec comme format de fichier rtf mais vous pouvez gérer d'autres types en accord avec la constante "RichTextBoxStreamType".

La méthode "AppendText" vous permet d'ajouter un texte à un contenu. La propriété "SelectionFont" gère la police, "SelectionColor" pour la couleur. Voici un exemple d'utilisation :

Cela nous donne le code suivant :

9.4. Déclenchement d'action

9.4.1. Button

Le plus grand classique de vb et je n'ai pas grand-chose à vous dire sauf que le symbole & permet de mettre un raccourci devant la lettre sur la propriété Text.

9.4.2. MenuStrip

Ce contrôle permet de faire un menu dans votre formulaire. Ce menu peut être composé de différents éléments comme un sous-menu, une liste déroulante,…

(35)

Les propriétés les plus importantes sont : • Text : contient le libellé

• Visible : pour masquer ou non le menu

• Enabled : pour interdire ou non le menu (il devient grisé) • Checked : pour coché ou non

• CheckonClick : pour changer automatiquement à chaque clic • ShortcutKeys : touche de raccourci. Show permet de le montrer Ensuite il faut écrire le code dans l'événement "click" tout simplement. Voici un exemple :

9.4.3. ContextMenuStrip

Permet de faire apparaitre un menu contextuel sur un contrôle. Pour cela ajouter ce contrôle et ensuite par un clic droit, vous devez ajouter un élément. Cet élément porte un nom qui sera ensuite utilisé sur le contrôle que vous voulez pour votre menu et par la propriété "ContextMenuStrip". Voici un exemple sur le contrôle "MaskedTextbox" :

(36)

9.4.4. Toolstrip

Permet de faire une barre d'outils. Très simple à utiliser.

Dans ce cours je me limite à une barre d'outils mais si vous voulez en avoir plusieurs, il faut ajouter le contrôle de type "ToolstripContainer" pour gérer leur emplacement dans votre formulaire.

9.5. Contrôles de sélection

9.5.1. Checkbox

Permet de faire un choix ou non. Attention une case à cocher peut avoir 3 états : coché, pas coché ou indéterminé (grisé). La propriété "Checked" renvoie vrai ou faux.

(37)

Voici le code associé :

Pour information je mémorise le style déjà appliqué. Ce style est représenté par un entier.

(38)

9.5.2. RadioButton

Permet de faire un seul choix comme sur un poste de radio car on ne peut écouter qu'une seule station en même temps.

Vous devez faire le formulaire suivant :

Voici le code associé :

9.5.3. Groupbox

Permet de regrouper des radiobutton afin de les isoler. Voici un exemple :

Maintenant la personne qui peut sélectionner "centrer" et "rouge" je lui paye un voyage à l'ile maurice. Pour cela il faut faire un groupe "Alignement" et "Couleur". Il existe aussi le contrôle "Panel" qui n'a pas de propriété "Text" afin de rendre invisible pour l'utilisateur le groupe.

(39)

Voici le code pour mettre en couleur :

9.5.4. Listbox

Permet de choisir parmi une liste. Les éléments de la liste sont gérés sous forme de collection par la propriété "Items".

Votre premier travail est de remplir la liste grâce à la méthode add ou directement sur le formulaire.

Par exemple nous allons ajouter un choix de couleur de fond sur notre formulaire :

(40)

Vous pouvez gérer l'action de la souris par la propriété "SelectionMode" (pas de clic, simple, multiple étendue ou pas).

La récupération de cette sélection peut se faire par "SelectedIndex" dans le cas d'une sélection simple ou par "SelectedItem". Dans le cas d'une sélection multiple, les informations seront renvoyés dans une collection "SelectedIndices" qui sera la liste des index et par la collection "SelectedItems" qui sera la liste des objets sélectionnés.

Pour remplir la liste, il faut utiliser la méthode Add en général au chargement du formulaire.

Pour le code :

9.5.5. DomainUpDown

Idem que la listbox mais n'accepte pas de sélection multiple et de présentation légèrement différente.

9.5.6. CheckedListbox

Idem que la listbox mais n'accepte pas de sélection multiple. De plus il y a des cases à cocher et la collection "CheckedItems" possède les éléments cochés.

(41)

9.5.7. Combobox

Personnellement j'utilise beaucoup ce contrôle. Idem que le contrôle "ListBox" mais pas de sélection multiple et vous pouvez définir grâce à la propriété "DropDownStyle" le comportement de votre liste déroulante :

• Simple : L'utilisateur sélectionne un élément ou saisit du texte mais la liste est affiché en permanence

• DropDown : idem mais la liste est affichée quand on clique mais ne se déroule pas

• DropDownList : se déroule automatiquement et en plus l'utilisateur ne peut pas saisir autre chose qu'un élément.

Pour dérouler automatiquement la liste dès que le contrôle reçoit le focus :

La propriété Text possède l'élément sélectionné et SelectedIndex pour l'indice de sélection. Si l'utilisateur n'a rien sélectionné cette propriété est à -1

9.5.8. NumericUpDown

Permet de faire monter ou descendre une valeur numérique. La propriété "Minimium" et "Maximum" gère l'intervalle et la propriété "Valeur" vous donne la valeur sélectionné.

9.5.9. TrackBar

Idem que le contrôle "NumericUpDown" permet un effet plus visuel mais sans afficher la valeur.

(42)

9.5.10.ListView

Permet de présenter des informations de 4 manières différentes comme l'explorateur de Windows.

Nous allons réaliser ce formulaire

Pour cela il faut poser ce contrôle et cliquer sur "modifier les éléments"

Par le code :

(43)

9.5.11.TabControl

Permet d'afficher plusieurs onglets dans le même formulaire.

La propriété "TabPages" contient la liste de toutes les pages et vous permet de paramétrer vos onglets.

Voici un exemple d'utilisation :

Après avoir créé vos onglets, vous pouvez placer vos contrôles comme si il s'agissait d'un formulaire.

(44)

9.6. Les contrôles divers

Je vais voir les plus importants à mes yeux. 9.6.1. TableLayoutPanel

Très intéressant car il permet de réorganiser votre formulaire si l'utilisateur change sa dimension ou la résolution d'écran.

Il faut d'abord poser ce contrôle et ensuite faire des zones en fonction de vos besoins sachant que dans une zone vous pouvez placer un seul contrôle.

Ensuite vous devez ancrer votre TableLayoutPanel sur le bord gauche, haut et droit.

(45)

9.6.2. PictureBox

Vous permet de gérer des images. Par exemple nous allons créer un explorateur d'image.

Il faut savoir que vous pouvez gérer les formats d'images du type jpg, bmp, ico, gif, wmf.

De plus la propriété "SizeMode" gére le comportement comme l'adaptation de la taille de l'image comme l'adaptation à la taille (Stretchimage), ou le sens contraire (Autosize), …

Code de cette application :

9.6.3. Imagelist

Contrôle qui vous permet de stocker des images ico, jpg, gif,… sauf les wmf pour les utiliser dans d'autres contrôles ayant la propriété "ImageList", "SmallImageList" ou "LargeImageList".

Les images s'ajoutent depuis l'interface ou par le code grâce à la méthode "add". Vous pouvez aussi toutes les effacer par la méthode "Clear".

Par exemple nous allons reprendre le formulaire ayant le contrôle ListView. Maintenant dans les propriétés de "ListView" sélectionnez votre "ImageList1"

(46)

Maintenant pour chaque élément sélectionnez votre image dans la propriété "ImageIndex".

Cela nous donne maintenant :

9.7. Les contrôles de gestion du temps

9.7.1. Le Timer

L'objet TIMER permet l'exécution d'instruction pendant une période de temps déterminée. . L'unité de temps est le 1/1000 seconde grâce à la propriété "Interval". La propriété "Enabled" passe à False pour arrêter le Timer.

Le timer à une taille unique.

Par exemple vous voulez faire une horloge. Pour cela créez un formulaire avec une zone de texte nommée "horloge" et un objet timer nommé "temps" et avec comme intervalle 1000. Maintenant faîtes un double clic sur l'objet timer et taper le programme ci-dessous :

Private Sub temps_Timer() horloge.Caption = Time End Sub

(47)

9.7.2. DateTimePicker

Contrôle très fréquent sur le Web qui permet d'éviter la saisie d'une date.

La propriété "Value" permet de récupérer la date sélectionnée où de spécifier la date affichée (par défaut la date du jour).

9.7.3. MonthCalendar

Permet de faire des choses plus évoluées que le contrôle précédent. Par exemple faire une plage de date en gras. Pour cela vous devez utiliser la propriété "AnnuallyBoldedDates".

Par le code :

La propriété "MonthBoldedDates" permet de faire la même chose mais pour tous les mois.

La propriété "MaxSelectionCount" permet de définir le nombre de jours maxi que vous pouvez sélectionner.

Vous pouvez même afficher plusieurs mois en même temps grâce à la propriété "CalendarDimensions".

(48)
(49)

10. L'ACCES AUX BASES DE DONNEES

10.1. Principe

Lorsque vous fait un programme, la meilleure solution est séparée votre base de données du langage dans lequel vous travaillez. Ainsi si votre base de données grossit et que vous êtes obligé d'en changer pour des raisons de temps d'accès par exemple, vous n'aurez qu'un morceau de code à changer. Dans le principe on utilise une base de données de type Access, SQL Server, Oracle,… et vous allez chercher les données par une requête SQL pour les manipuler ensuite dans votre programme.

Ce principe utilise le modèle ADO.net qui contient un ensemble de classes, d'interfaces, de structures facilitent ces opérations.

10.1.1.Mode connecté

L'utilisateur est en permanence connecté aux données et cela se gère de la manière suivante :

• On établit une connexion au début de l'application et on ferme cette connexion à la fin

• Vous pouvez contrôler qui est connecté et avec quelles données il travaille

Les données sont à jour en permanence.

10.1.2.Mode déconnecté

Beaucoup plus difficile à programmer, mais l'utilisateur n'est pas en permanence connecté. Ceci est très pratique pour des ordinateurs portables, comme pour le monde du Web.

Comme tout système cela présente des avantages et des inconvénients. • La connexion n'occupe pas en permanence le serveur comme dans le

mode connecté.

• Vous amélioré les performances et l'évolutivité de votre application. • Les données ne sont pas forcément à jour.

• Quand les mises à jour se font vous devez privilégier soit les données les plus récentes, les plus anciennes ou à l'utilisateur de choisir.

Base de données Requête SQL

(50)

10.2. ADO.NET

L'architecture d'ADO.NET permet de fournir un ensemble de classes permettant l'accès aux bases de données.

Il vous faut un fournisseur d'accès permettant de récupérer les données vers votre application et transférer les données de votre application vers la base de données.

Vous aurez aussi besoin de classes permettant de manipuler vos données de manière indépendante de votre base.

10.2.1.Fournisseurs d'accès

Vous avez le choix entre 4 fournisseurs d'accès dans le Framework.net : • Fournisseur pour SQL Server

• Fournisseur pour OLE DB (autres bases de données) • Fournisseur pour ODBC

• Fournisseur pour Oracle

L'ensemble de ces fournisseurs vous propose 4 classes :

• La classe "Connection" pour établir une connexion avec votre base • La classe "Command" pour exécuter une commande SQL

• La classe "DataReader" procure un accès en lecture seule • La classe "DataAdapter" pour mettre à jour vos données.

(51)

11. LES FICHIERS TEXTES

VB permet l'accès aux fichiers de type texte, très pratique pour faire un journal de log d'erreur, de paramétrage, ….

Le traitement des fichiers se divise en 3 phases :

 L'ouverture (OPEN)

 Le traitement

 La fermeture (CLOSE)

Un fichier texte est constitué de lignes de caractères se terminant par un retour chariot (Chr$(13)) et un retour à la ligne (Chr$(10)).

11.1.1.L'ouverture

Pour ouvrir un fichier texte on utilise l'instruction suivante : Open Nom_fichier For mode As n°Canal

Input : fichier ouvert en lecture seulement

Output : fichier ouvert en écriture mais en écrasant le contenu

Append : fichier ouvert en écriture mais place à la fin

La lecture des lignes se fait grâce à l'instruction Line Input : Line Input # Canal

La fonction EOF permet de savoir si l'on arrive à la fin du fichier sinon on provoque une erreur.

Voici un exemple :

Dim Retour, Nextline

Retour = Chr(13) + Chr(10) Canal = FreeFile

Open "C:\WINDOWS\SYSTEM.INI" For Input As #Canal Do Until EOF(Canal)

Line Input #Canal, contenu Print Contenu

Printer.Print Contenu Loop

Print.EndDoc Close #Canal

(52)

Le meilleur moyen pour afficher un fichier texte consiste à utiliser un objet Zone de texte (TextBox) et la propriété Multiline=True.

Attention limité à une taille de fichier inférieur à 65Ko.

On peut aussi lancer l'application associée au fichier par l'instruction Shell nomprogramme nomfichier

Pensez à fermer le fichier avant la fin de la procédure.

11.1.2.L'écriture

Pour écrire dans un fichier, s'est l'instruction Print # dont la syntaxe est la suivante :

Print #n°canal, variable

11.2. Instruction type Dos

Quand vous manipulez des fichiers, il est important d'effectuer des opérations du type DOS. Voici la liste par catégorie :

Sur les répertoires

ChDrive lecture change le lecteur courant

ChDir chemin change le répertoire courant

CurDir retourne le nom du répertoire courant

MkDir répertoire crée le répertoire

RmDir répertoire supprime le répertoire si vide

Dir(masque,attr) retourne le nom du 1er fichier

correspondant ou masque et possédant l'attribut. Dir seul retourne ensuite le nom suivant.

Sur les fichiers

FileAttr nomfichier retourne les attributs

FileDate nomfichier retourne la date

File nomfichier retourne la longueur

Kill nomfichier supprime le fichier

Name ancien As Nouveau change le nom

Références

Documents relatifs

Pour conclure, il faut noter l'élégant porche en pans de bois qui présente une charpente de comble voûtée non lambrissée et dont la structure est presque identique

En dépit de l'emploi très précoce du système des pannes, cette charpente présente des archaïsmes très marqués comme la faible pente de la toiture, l'emploi d'assemblages à mi-bois

The derivation of the image Jacobian for Method 1 is based on simple point features in 3D and distances to the projection of these points in 2D.. The velocity field is defined from

politiques sont le RND (Rassemblement National Démocratique), Hamas (Mouvement de la Société Islamique), le RCD (Rassemblement pour la Culture et la Démocratie), le MDS (Mouvement

les individus possédant n'importe quelle combinaison d'haplotype (notamment, ni le premier locus, ni le deuxième locus, n'est en déséquilibre de liaison avec un

لولأا لصفلا ةساردلا عوضوم 01 امأ haynse فم ؿمع يأب ومايق دنع ؼظوملا وققحي يذلا جتانلا ونأب وفرع ؿامعلأا يف .ةمظنملا ( وفرعو frea ) ءادلأا وى

Recommandant lui aussi un véritable travail d'anatomiste, afin de scruter les moindres reliefs de la peau, les moindres contours des os, des nerfs et des

Comme l’exprimait Sansot (1971) : « Les lieux privilégiés représentent, d’une façon éminente, la cité, mais parce qu’ils possèdent une forte personnalité, ils lui font