Upload
may
View
37
Download
1
Embed Size (px)
DESCRIPTION
INITIATION A LA PROGRAMMATION STRUCTUREE. I. Introduction et définitions. Initiation à la programmation structurée. Qu’est-ce qu’un programme ? Les règles de la programmation structurée Définitions. Qu’est-ce qu’un programme ?. C ’est un ensemble de commandes - PowerPoint PPT Presentation
Citation preview
1
INITIATION A LA PROGRAMMATION
STRUCTUREE
2
I. Introduction et définitions
3
• Qu’est-ce qu’un programme ?
• Les règles de la programmation structurée
• Définitions
Initiation à la programmation structurée
4
C ’est un ensemble de commandes
• écrites dans un langage de programmation,
• permettant de matérialiser un certain traitement, conformément à un cahier des charges.
• En programmation structurée son déroulement est séquentiel.
• Il peut contenir et utiliser des procédures et fonctions, qui sont elles-mêmes construites comme des programmes.
Qu’est-ce qu’un programme ?
5
Elles concernent :
•la convivialité
•la modularité
•la lisibilité
•la programmation
Les quatre règles de la programmation structurée
6
Pensez à soigner les interfaces destinés à l’utilisateur :
• ne posez pas de questions ambiguës
• aidez le, mais ne le sous-estimez pas
• informez le des possibilités contextuelles
• faites un effort de présentation des résultats
La convivialité
• donnez lui envie d’utiliser vos programmes
7
On n ’écrit plus de gros programmes
Un programme doit être décomposé en petits modules, qu’on appelle des procédures ou fonctions :
• tous bien définis et individualisés,
• dont la longueur ne dépasse pas une page A4
Ceci facilite énormément la compréhension, la
maintenance, et l ’exécution du programme
La modularité
8
Elle représente un effort initial indispensable à la mise au point puis à la maintenance des programmes
Il faut documenter le programme en ajoutant des commentaires judicieux pour en faciliter la compréhension rapide
La mise en page des instructions doit en faciliter leur compréhension en faisant ressortir visuellement leurs délimitations
La lisibilité des programmes
9
On ne doit jamais personnaliser les programmes :
les noms de procédures, fonctions, variables, doivent évoquer sans ambiguïté leurs rôles respectifs, pour quiconque.
La lisibilité des programmes
10
Exemple d ’un programme insupportable
Private Sub P1_AfterUpdate()If P1.Value <> "" Thenn = n + 1r = Val(P1.Value)If r = (nb1 * nb2) ThenA.ForeColor = 16711680A.Caption = "bravo"Else:e = e + 1A.ForeColor = 255A.Caption = "faux" & " : déja " & e & " erreurs"End IfEnd IfEnd Sub
11
Le même programme : supportable
Private Sub Reponse_AfterUpdate() If reponse.Value <> "" Then nbfois = nbfois + 1 rep = Val(reponse.Value) If rep = (nb1 * nb2) Then bilan.ForeColor = 16711680 bilan.Caption = "bravo" Else: err = err + 1 bilan.ForeColor = 255 bilan.Caption = "faux" & " : déja " & err _
& " erreurs" End If End IfEnd Sub
12
LA PROGRAMMATION OBJET
(POO)
13
La Programmation Orientée Objet
Elle a été conçue pour pallier aux problèmes de
maintenance évolutive que pose la
programmation fonctionnelle descendante.
Nous n’aborderons en LO10 que quelques
notions de la POO, nécessaires à la
programmation en Visual Basic sous Excel.
14
Contrairement à la programmation classique qui
sépare les données des programmes, la POO repose
sur des entités, nommées OBJETS, dans lesquelles
sont combinées données et code de programmation.
Les objets qui partagent les mêmes propriétés et les
mêmes méthodes sont regroupés dans une classe.
La Programmation Orientée Objet
15
Le concept d ’OBJET
L’objectif de ce concept est le suivant :
Regrouper dans une entité unique, nommée OBJET :
• les données décrivant l’objet : ce sont ses propriétés
• et les procédures/fonctions permettant de manipuler l ’objet : ce sont ses méthodes
16
Exemple d ’objet
En Visual-Basic il existe un type d’objet nommé CommandButton : quand on dessine un bouton de ce type on crée un objet.
Il a des propriétés :
un nom
une taille
un intitulé : par exemple « IMPRIMER »
une couleur
etc...
17
Cet objet a comme méthode une procédure
correspondant à son rôle.
La procédure sera déclenchée lorsqu’un certain
événement se produira : par exemple un Click sur
ce bouton.
C’est le programmeur qui choisit l’événement à
surveiller et programme la méthode.
Exemple d ’objet
18
Elle est composée en majeure partie d’objets que l’on peut manipuler conjointement de 2 façons :
• en définissant, modifiant, testant, ou mémorisant leurs propriétés
• en utilisant les méthodes de l’objet, ou en écrivant des procédures complémentaires constituées de lignes de code
La programmation Visual-Basic
19
Conventions de lecture écriture des instructions
Dans une ligne de code on peut :
• définir une propriété
• ou mémoriser une propriété dans une variable
• ou faire exécuter une méthode ou une procédure
Mais on ne peut pas faire plusieurs de ces traitements à la fois sur la même ligne
20
21
Quelques propriétés très utilisées
CAPTION pour les objets Intitulé (Label), bouton de commande (CommandButton)
Désigne le texte qui apparaît dans le bouton à l’écran
TEXT pour les objets Zone de Texte (TextBox)
Désigne le texte affiché ou modifié par l’utilisateur
VALUE pour les objets barre de défilement (ScrollBar) , toupie (SpinButton), bouton d’option
Désigne la valeur choisie par l’utilisateur
22
MAXLENGTH pour les objets Zone de Texte (TextBox)
Désigne le nombre maximum de caractères acceptés à la saisie
PASSWORDCHAR pour les objets Zone de Texte
Désigne le caractère qui sera affiché pour masquer à l’écran chaque caractère tapé au clavier par l’utilisateur
ENABLED pour les objets Zone de Texte , bouton de commande, etc.
Propriété booléenne, qui lorqu’elle vaut False, rend le bouton inutilisable par l’utilisateur
Quelques propriétés très utilisées
23
Quelques propriétés très utilisées
BACKCOLOR couleur de fond
FONT Désigne la police à utiliser
CONTROLTIPTEXT
Contient le texte à afficher en info bulle
VISIBLE
propriété booléenne qui, lorsqu’elle vaut False, permet de rendre un bouton temporairement invisible
24
25
Affiche le code
Liste des propriétés
pro
pri
été
s
Affiche l ’objet Liste des méthodes
Exp
lora
teu
r d
e p
roje
t
26
Dim nb1, nb2 As Integer
Private Sub UserForm_Initialize() Randomize nombre1.Caption = Int(Rnd * 8) + 2 nombre2.Caption = Int(Rnd * 8) + 2 nb1 = nombre1.Caption nb2 = nombre2.Caption
End Sub
Code du test des multiplications
27
Code du test des multiplications
Private Sub validez_Click() If validez.Caption <> "FIN" Then Dim rep As Integer rep = Val(reponse.Value) If rep = (nb1 * nb2) Then MsgBox ("bravo") Else: MsgBox ("faux") End If validez.Caption = "FIN" reponse.Locked = True Else: End End IfEnd Sub
28
L’événement CHANGE est détecté par Vba dès
qu’un caractère est saisi ( ou tapé) dans un objet de
type TextBox.
Par contre l’événement AFTERUPDATE laisse le
temps à l ’utilisateur de taper plusieurs dans la boite,
et détecte qu ’il a fini quand il appuie sur :
• la touche Entrée
• ou la touche Tab
• ou la souris
Quelques évènements très utilisés
29
On a souvent besoin de faire faire à notre
programme un traitement d’initialisation de variables,
ou de plages de cellules d’une feuille d’Excel, qu’on
ne peut pas simplement réaliser en modifiant les
propriétés de certains objets.
• ce traitement sera programmé dans une procédure
qui sera TOUJOURS intitulée :
Private Sub Userform_Initialize()
quel que soit le nom du userform
Quelques évènements très utilisés
30
L’événement Initialize:
• sera détecté automatiquement au démarrage du
programme
• la procédure Userform_Initialize() sera déclenchée
avant la première apparition du userform, et ne
fonctionnera qu ’une seule fois.
• on ne pourra pas déclencher cet événement en
cours de programme pour demander à ce que la
procédure associée soit à nouveau exécutée.
Quelques évènements très utilisés
31
C’est une zone précise de la mémoire centrale, allouée temporairement à un programme pour gérer les valeurs successives d’une information.
Une variable est définie par :
• son nom
• et son type
Définition : qu’est-ce qu’une variable ?
32
Définition : une variable
Un nom de variable doit :
commencer par une lettre
avoir moins de 255 caractères, et au moins 1
ne contenir que
des lettres
et des chiffres (facultatifs)
et traits de soulignement _ (facultatifs)
ne pas contenir d’espaces, ni aucun autre signe de ponctuation, ni aucun opérateur, ni aucun comparateur (+->=..)
former un mot différent d’un mot réservé du langage Basic, comme End ou Sub, etc.
33
Une variable n’a toujours qu’une seule valeur à
un instant donné.
Une valeur ne peut être mémorisée dans une
variable que si leurs types respectifs sont
compatibles.
Exemple : un nombre entier peut-être mémorisé
dans une variable de type réel, mais il perdra sa
nature d ’entier.
Définition : une variable
34
Une variable peut être renseignée :
• par une donnée utilisateur lors d’une
ACQUISITION
• ou directement par programme, suite à un
calcul, un test, une lecture dans un fichier,
un appel de procédure ou de fonction, lors
d ’une AFFECTATION
Définition : une variable
35
La désignation du type de la variable permettra à
l’ordinateur :
• de dimensionner au mieux l’espace alloué en
mémoire centrale
• de filtrer des valeurs cohérentes
• de savoir quels procédés de codage et
décodage il doit appliquer
Définition : une variable
36
Voici quelques types de variables courants :
•Boolean : vrai ou faux (true/false, 1/0)
•Date : de 1/1/100 à 31/12/9999
•Byte : entiers non signés de 0 à 255
•Integer : entiers signés de -32768 à +32767
•Currency : entiers de ± 1015
Définition : une variable
37
•single : réels avec une précision de 7 décimales : de
±1.4 E-45 à ±3.04 E+38
•double : réels avec une précision de 15 décimales : de
±4.94 E-324 à ±1.79 E+308
•string : chaîne de caractères (65 535 octets maximum)
•string*10 : chaîne de 10 caractères
Définition : une variable
38
Les déclarations de variables facilitent la
compréhension des programmes et participent à
leur optimisation : nous déclarerons donc
TOUTES les variables que nous utiliserons.
En Visual Basic on déclare généralement les
variables ainsi :
Dim NB,K,Mois As Integer
Dim Trouvé As Boolean
Définition : une variable
39
Syntaxe d’écriture du code
Pour faire appel à une méthode sans paramètre
Objet. Méthode
Exemple : Saisie.SetFocus
40
Pour faire appel à une méthode,ou une fonction paramétrée sans nommer les paramètres
Objet. Méthode (valeur,valeur,,valeur)Variable=Fonction(valeur,,,valeur)
on précise les valeurs des paramètres en fonction de leur position dans la liste des paramètres attendus.
Syntaxe d’écriture du code
41
Exemple avec la fonction MSGBOX
X=MSGBOX (“c’est faux”,,”contrôle de validité”)
Syntaxe d’écriture du code
42
Pour faire appel à une méthode paramétrée en nommant les paramètres
Objet. Méthode (nom_du_paramètre :=valeur, nom_du_paramètre :=valeur…) Variable=fonction (nom_du_paramètre :=valeur,etc)on précise les valeurs des paramètres sans ordre prédéfini, mais en les nommant.
Exemple avec la fonction MSGBOX
X=MSGBOX (title:=‘’contrôle de validité’’,prompt:=‘’c’est faux’’)
Syntaxe d’écriture du code
43
Syntaxe d’écriture du code
Pour attribuer une valeur à une propriété
Objet.Propriété = valeur
Exemple : OK.Visible = true
Pour mémoriser la valeur d’une propriété dans une variable
Nom_de_variable = Objet.Propriété
Exemple : nom = Saisie.Value
44
Syntaxe d’écriture du code
Pour écrire une ligne de code sur plusieurs lignes de l’éditeur :
il faut indiquer qu’il y a une suite en tapant en fin de ligne le caractère souligné _
Pour mettre des commentaires :commencer la ligne de code par une apostrophe
45
L’instruction IF THEN …..ELSE
Syntaxe générale :
(ici allez toujours à la ligne)
IF a >0 THEN
instruction(s)
ELSE instruction(s)
END IF
46
Différents cas de construction de IF THEN …..
IF b > 12 THEN
instruction 2
ELSEIF b<8 THEN
instruction 3
ELSE instruction 4
END IF
47
IF a > 0 THEN
IF b > 12 THEN
instruction1
END IF
IF c > 8 THEN
instruction 2
ELSE
instruction 3
END IF
instruction 4
ELSE instruction 5
END IF
Différents cas de construction de IF THEN …..
48
Nous allons étudier un programme qui permet de faire répéter plusieurs fois un même enchaînement de procédures et événements.
On ne peut pas matérialiser un traitement répétitif par une boucle classique ( Pour, Jusqu’à, ou Tant Que) lorsqu’un événement, déclenché par l’utilisateur, intervient au cours de ce traitement.
Dans ce programme on trouvera aussi des procédures qui ne dépendent pas directement d’un événement
Etude d’un programme « répétitif »
49
Dim nb1, nb2, err, nbfois As Integer
Private Sub UserForm_Initialize() Randomize err = 0 Genere nbfois = 0End Sub
Sub Genere() nombre1.Caption = Int(Rnd * 8) + 2 nombre2.Caption = Int(Rnd * 8) + 2 nb1 = nombre1.Caption nb2 = nombre2.Caption End Sub
Code du programme
50
Sub AfficheBilan() Dim rep As Integer rep = Val(reponse.Value) If rep = (nb1 * nb2) Then MsgBox "Bien" Else: MsgBox "faux" err = err + 1 End IfEnd Sub
ATTENTION :AfficheBilan et Genere sont des procédures qui sont déclenchées par d’autres procédures et non pas par des événements
Code du programme
51
Sub validez_Click() nbfois = nbfois + 1 If nbfois < 4 Then AfficheBilan If nbfois = 3 Then validez.Caption = "FIN" MsgBox "vous avez fait " & err & " erreurs" reponse.Locked = True Else: reponse.SetFocus Genere reponse.Value = "" End If Else End End IfEnd Sub
Code du programme
52
Les boites de dialogue MSGBOX
Pour afficher simplement un message et le bouton OK :
MSGBOX ’’ vous avez fait’’ & erreurs & ’’erreurs ’’
53
Pour afficher un texte et les boutons OK et ANNULER :
Les boites de dialogue MSGBOX
Choix = MSGBOX ’’erreur d’écriture ’’,1, ’’vérification LO10’’
54
Les boites de dialogue MSGBOX
Syntaxe :
Variable pour la réponse = MSGBOX (’’ texte ’’ ,1, ’’titre ’’)
Le 2° paramètre, qui vaut ici 1, provoque l’apparition des deux boutons OK et ANNULER
Le 3° paramètre apparaîtra en titre en haut de la boîte de dialogue
La variable de la réponse contiendra :1 si l’utilisateur a cliqué sur OK, ou 2 s’il a cliqué sur ANNULER.
On doit ensuite tester cette variable pour continuer le traitement selon le choix de l’utilisateur
55
Autres valeurs possibles du 2° paramètre de MSGBOX :
2 : pour afficher les boutons
Abandonner, Répéter et Ignorer
3 : pour afficher les boutons Oui, Non, et Annuler
4 : pour afficher les boutons Oui et Non
5 : pour afficher les boutons Répéter et Annuler
Les boites de dialogue MSGBOX
56
Valeurs possibles de la réponse en fonction du choix de l’utilisateur dans MSGBOX
1 s’il a cliqué sur OK
3 s’il a cliqué sur Abandonner
4 s’il a cliqué sur Répéter
2 s’il a cliqué sur Annuler
5 s’il a cliqué sur Ignorer
6 s’il a cliqué sur Oui
7 s’il a cliqué sur Non
Les boites de dialogue MSGBOX
57
Pour inviter l’utilisateur à saisir une valeur, sans passer par un objet du userform, on peut utiliser la fonction InputBox.
Exemple d’utilisation : la fenêtre s’incruste temporairement sur le userform, comme pour MsgBox
La fonction INPUTBOX
58
CodeJoueur = InputBox(" Entrez un nombre entre 2 et 9 ", " saisie du code joueur ",2)
Le 1° paramètre précise la consigneLe 2° paramètre précise le titre de la boiteLe 3° paramètre propose une valeur de réponse
La fonction INPUTBOX
59
La variable résultat , de type chaîne de caractères, nommée CodeJoueur dans l’exemple précédent, contiendra la valeur entrée par l’utilisateur (ou la valeur proposée par défaut), si celui-ci sélectionne OK ou appuie sur la touche ENTRÉE.
Si l’utilisateur choisit Annuler, une chaîne de longueur nulle est renvoyée.
La fonction INPUTBOX
60
C’est une expression logique qui sera évaluée par l’ordinateur, et qui vaudra l’une ou l’autre des valeurs logiques VRAI ou FAUX.
Elle sera construite à l’aide de
• variables
• valeurs
• expression mathématiques
• comparateurs (= > < etc)
• opérateurs booléens ET NOT OU
Définition : une expression booléenne
61
Il est indispensable de savoir que :
NOT (a ET b) = NOT a OU NOT b
NOT (a OU b) = NOT a ET NOT b
en l’absence de parenthèses
ET est prioritaire par rapport à OU
NOT est prioritaire par rapport à ET
Les opérateurs booléens
62
Liste des opérateurs par priorité décroissante, en l’absence de parenthèses
puissance
multiplication, division réelle
division entière
reste de la division entière (MOD)
addition soustraction
= > < >= <= <>
NOT
ET
OU
Les opérateurs booléens
63
Traductions booléennes du texte suivant :
Je n’ai pas d’ordinateur mais ma voiture est belle
Avec des variables de type numérique
Nb_ordinateur = 0 et nb_belle_voiture=1
Exemples d’expressions booléennes
Avec des variables de type booléen
not ordinateur et belle_voiture
64
Négation de l’expression suivante
Je n’ai pas d’ordinateur mais ma voiture est belle
Avec des variables de type numérique
Nb_ordinateur <> 0 ou not (nb_belle_voiture=1 )
Exemples d’expressions booléennes
Avec des variables de type booléen
ordinateur ou not belle_voiture
65
Pour comparer des chaînes de caractères l’ordinateur compare les codes Ascii des
caractères de même rang
espace , chiffres, majuscules, minuscules
Les chaînes de caractères
Ce sont des variables, ou des valeurs constantes qui contiennent du texte, et/ou des chiffres, en code Ascii (American Code for Information Interchange)
66
Si nom1= "Dupont" , nom2= "Durand"
nom3= "DUPONT" , nom4= "dupont"
Les comparaisons suivantes sont toutes fausses :
Nom1 > nom2
Nom1 >= nom2
Nom1 = nom3
Nom1 < nom3
Nom1 > nom4
Les chaînes de caractères
67
Les chaînes de caractères
La fonction LEN indique le nombre de caractères contenus dans la variable :
LONG = LEN(Saisie.Value)
La fonction LCASE transforme tous les caractères de la variable en minuscules :
prénom=LCASE (prénom)
La fonction UCASE transforme tous les caractères de la variable en majuscules :
nom=UCASE (nom)
68
Les chaînes de caractères
La fonction Left recopie des caractères à partir
du premier caractère.
Exemple :
soit NomComplet = ’’DUPONT Jean’’
La commande :
NomDeFamille = Left (Nomcomplet, 6)
permettra de mettre ’’DUPONT ’’ dans la
variable NomDeFamille
69
La fonction Right recopie des caractères à partir du dernier caractère.
Exemple :
soit NomComplet = ’’DUPONT Jean’’
la commande :
Prénom = Right (Nomcomplet, 4)
permettra de mettre ’’Jean’’ dans la
variable Prénom
Les chaînes de caractères
70
Les chaînes de caractères
La fonction Mid permet de recopier
• un certain nombre de caractères (3° paramètre),
• d’une variable Chaîne de caractères (1° paramètre),
• à partir du n° caractère (2° paramètre)
Exemple :
NomComplet = ’’DUPONT Jean’’
la commande :
Prénom = Mid(NomComplet,8,4)
permet d’obtenir ’’Jean’’ dans la variable Prénom
71
La fonction InStr permet de savoir si une sous-chaîne se trouve dans une chaîne, et à partir de quel endroit (attention aux minuscules, majuscules)
NomComplet = ’’DUPONT JEAN’’
Position = InStr(NomComplet,’’ON’’) Position vaudra 4
Position = InStr(NomComplet,’’on’’) Position vaudra 0
Position = InStr(NomComplet,’’N’’) Position vaudra 5 et c’est tout
Position = InStr(NomComplet,’’I’’) Position vaudra 0
Les chaînes de caractères
72
Les chaînes de caractères
Pour remplacer une sous-chaîne, par une autre sous-chaîne, dans une chaîne, on utilise la méthode Replace
Dans la commande suivante :
trouvé = formule.Replace(’’x’’,’’RCM’’)
trouvé est une variable booléenne qui vaudra Vrai si on a trouvé, au moins une fois, la lettre ’’x’’, à remplacer par la chaîne ’’RCM’’, dans la variable formule
73
Les chaînes de caractères
trouvé = formule.Replace(’’x’’,’’RCM’’)
dans cette commande nous n’avons pas précisé s’il fallait différencier ‘ x ’ et ‘ X ’ donc par défaut ils ne sont pas différenciés, et tous les ‘ x ’ et ‘ X ’ sont remplacés.
Si on ne veut faire remplacer que les ‘x’ minuscules, il faut préciser le 5° paramètre de Replace et le mettre à False
trouvé = formule.Replace(’’x’’,’’RCM’’, , , False)
74
Les chaînes de caractères
Exercice :
soit NomComplet = ’’DUPONT JEAN’’
Que trouvera-t-on dans la variable X
après la commande :
X=Mid(NomComplet,1, InStr(NomComplet ,’’ ’’) -1) ?
75
pour désigner en Visual-Basic une cellule d’Excel
Range( ’’A1 ’’) = 12
Set x =Range( ’’A1 ’’)
x.cells = 12
Range( ’’A1 ’’) .Name = ’’age ’’
Range( ’’age ’’ ) = 12
76
pour mettre en Visual-Basic une formule dans une cellule
• Range( ’’B1 ’’) = ’’= sin(RC[-1] ) ’’
le R vient du mot Row (niveau de ligne)
et le C vient de Column
Dans la cellule B1 on aura le sinus de la valeur située dans la cellule A1 ( même ligne et colonne précédente par rapport à B1)
77
pour désigner en Visual-Basic une plage de cellules
Range( ’’A1:B10 ’’) = 12
la valeur 12 est recopiée dans toutes les cellules de la plage ’’A1:B10 ’’
attention : ceci ne permet pas la recopie automatique d’une formule
78
Range( ’’prénoms ’’) = ’’sophie ’’
la valeur ’’sophie ’’ est recopiée dans toutes les cellules de la plage ’ ’prénoms’ ’
Avec la propriété Name, on nomme une plage de cellules.
Le nom est ensuite visible dans la liste des cellules nommées du classeur Excel.
Range (’’C2:D10 ’’).Name = ’’prénoms ’’
pour désigner en Visual-Basic une plage de cellules
79
PR = ’’sophie ’’ impossible
la valeur ’’sophie ’’ n’est pas recopiée dans toutes les cellules de la plage référencée par PR
set PR = Range (’’C2:D10 ’’)
La variable PR n ’est pas visible dans la liste des cellules nommées de la feuille Excel.
Elle permet de faire référence à l’objet Range choisi.
pour désigner en Visual-Basic une plage de cellules
PR.cells = ’’sophie ’’ correctla valeur ’’sophie ’’ est recopiée dans toutes les
cellules de la plage référencée par PR
80
PR.Cells(5,2) désigne la cellule de la 5° ligne , 2° colonne de la plage référencée par PR (c’est la cellule D6 de la feuille)
set PR = Range (’’C2:D10 ’’)
pour désigner en Visual-Basic une plage de cellules
PR.Cells(10) désigne la même cellule (les cellules sont implicitement numérotées dans PR : ligne par ligne)
81
• set PR = Range (’’C2:D10 ’’)
pour désigner en Visual-Basic une plage de cellules
PR.Columns(2) désigne toutes les cellules de la 2° colonne de la plage référencée par PR (ce sont les cellules D2 à D10 de la feuille)
La commande PR.Columns(2) = ’’oui ’’
remplit toutes les cellules de la 2° colonne de PR avec ’’oui ’’
82
• set PR = Range (’ ’C2:D10 ’’)
pour désigner en Visual-Basic une plage de cellules
PR.Rows(7) désigne toutes les cellules de la 7° ligne de la plage référencée par PR (ce sont les cellules C8 et D8 de la feuille)
La commande PR.Rows(7) = 0
remplit toutes les cellules de la 7° colonne de PR avec 0
83
PR.Rows.Count indique le nombre total de lignes de la plage PR
• set PR = Range (’ ’C2:D10 ’ ’)
pour désigner en Visual-Basic une plage de cellules
PR.Cells.Count indique le nombre total de cellules de la plage PR
PR.Columns.Count indique le nombre total de colonnes de la plage PR
Range(’ ’A1 ’ ’ ) = PR.Cells.Count ??
84
PR.Cells(PR.Cells.Count) désigne la dernière cellule de la plage référencée par PR (c ’est la cellule D10 de la feuille)
• set PR = Range (’ ’C2:D10 ’ ’)
pour désigner en Visual-Basic une plage de cellules
PR.Cells(9,2) et
PR.Cells(18) et
PR.Cells(PR.Rows.Count,PR.Columns.Count) désignent aussi la même cellule, D10 de la feuille d ’Excel
85
Ce sont des structures de contrôle qui déterminent un choix quant à la répétition des traitements qu’elles contrôlent.
Ce choix dépend de l’évaluation d’une expression booléenne, ou de la valeur du compteur éventuellement associé à cette boucle.
Les boucles
Synonymes : boucle, répétitive
86
En programmation structurée, une boucle doit toujours
être exécutée un nombre entier de fois : zéro, une ou
plusieurs fois.
Son exécution se terminera toujours en fin de boucle.
Il est interdit d’interrompre prématurément le
traitement de la répétitive (par un Goto, ou autre
déstabilisateur comme Exit ...)
Les boucles
87
On ne mettra donc dans une boucle que
des instructions qui devront toujours
toutes
être exécutées
le même nombre de fois.
Les boucles
88
Il existe trois boucles différentes, dans presque tous les langages évolués :
la boucle POUR
la boucle JUSQU ’A
la boucle TANT QUE
Les boucles
89
On l’utilisera chaque fois qu’on sera certain de toujours pouvoir déterminer, avant d’y entrer, le nombre entier exact de fois qu’elle va être effectivement exécutée.
L ’évolution de la valeur du compteur est
automatique
Il est interdit de la modifier en cours d’exécution
de la boucle
La boucle POUR
Il est interdit de modifier, en cours d’exécution de la boucle, la valeur finale du compteur, initialement
prévue
90
Exemple : calcul de la somme des 20 premiers nombres entiers strictement positifs
Somme =0
For i=1 to 20
Somme=somme + i
Next i
La boucle POUR
91
On l’utilisera chaque fois :
• qu’on ne pourra pas utiliser correctement la
boucle POUR,
• et qu’on sera certain qu’il faudra toujours
l ’exécuter au moins une fois.
La condition d’arrêt sera évaluée après chaque
tour de boucle.
La boucle s’arrêtera lorsque la condition d’arrêt
sera vraie.
La boucle JUSQU’A
92
Exemple : calcul de la somme des 20 premiers nombres entiers strictement positifs
Somme =0
i=0
DO
i=i+1
Somme=somme + i
Loop until i=20
La boucle JUSQU’A
Somme =0
i=1
DO
Somme=somme + i
i=i+1
Loop until i=21
93
On l’utilisera chaque fois :
• qu’on ne pourra pas utiliser correctement la
boucle POUR,
• et qu’on ne sera pas certain qu’il faudra toujours
l’exécuter au moins une fois.
La condition d ’autorisation de passage sera
évaluée avant chaque tour de boucle.
On n’entrera dans la boucle que si la condition de
passage sera vraie.
La boucle TANT QUE
94
Exemple : calcul de la somme des 20 premiers nombres entiers strictement positifs
Somme =0
i=0
DO WHILE i<20
i=i+1
Somme=somme + i
Loop
La boucle TANT QUE
Somme =0
i=1
DO WHILE <21
Somme=somme + i
i=i+1
Loop
95
Private Sub UserForm_Initialize()
Dim i As Integer
For i = 1 To Range("noms").Cells.Count
Range("noms").Cells(i).Interior.ColorIndex = 3
Next i
End Sub
Exemple de boucle
96
Private Sub UserForm_Initialize()
Dim i As Integer
i = 1
Do
Range("noms").Cells(i).Interior.ColorIndex = 3
Loop Until i = Range("noms").Cells.Count
End Sub
Exemple de boucle
97
Private Sub UserForm_Initialize()
Dim i As Integer
i = 1
Do
Range("noms").Cells(i).Interior.ColorIndex = 3
i = i + 1
Loop Until i = Range("noms").Cells.Count
End Sub
Exemple de boucle
98
Private Sub UserForm_Initialize()
Dim i As Integer
i = 1
Do While i < > Range("noms").Cells.Count
i = i + 1
Range("noms").Cells(i).Interior.ColorIndex = 3
Loop
End Sub
Exemple de boucle
99
Private Sub Choix_AfterUpdate()
Dim L as string*1
L = UCase(Choix.Text)
If L < > "O" or L < > "N " Then
MsgBox ("erreur ")
Else
Range("corrigé!G2") = L
End If
End Sub
Exemple de IF
100
Une collection est un objet contenant plusieurs autres objets, généralement, de même type. Dans Excel, par exemple, l'objet Workbooks contient tous les objets de la collection Workbook.
Les éléments d'une collection peuvent être identifiés par un numéro d’ordre ou par leur nom.
Workbooks(1) identifie le premier objet du Workbook ouvert.
Workbooks("TD impots ") désigne le classeur nommé TD impots
L’objet Workbooks
101
De même Worksheets est un objet particulier de la collection Worksheet .Worksheets(1) identifie la premiere feuille du Workbook ouvert.
Worksheets("sondage") désigne la feuille nommée sondage
L’objet Worksheets
102
Pour créer depuis Visual-Basic une nouvelle feuille de calcul dans la classeur courant, et l'insérer par défaut avant la feuille active, on utilise la méthode Add. Worksheets.Add
Pour ajouter une nouvelle feuille de calcul après la dernière feuille du classeur actif on ajoute la méthode Move, en précisant la valeur de son paramètre after
Worksheets.Add.Move after := Worksheets ( Worksheets .Count)
L’objet Worksheets
103
Pour créer et nommer une feuille de calcul dans le classeur actif
ActiveWorkbook.Worksheets.Add.Name = " planning "
Pour créer et nommer et pouvoir faire référence cette feuille de calcul par un nom de variable
Set plan= Worksheets.Addplan.Name = " planning "
L’objet Worksheets
104
Pour sélectionner une cellule, ou une plage de cellules en vue de leur appliquer un traitement (commun), on utilise la méthode Select.
Ceci correspond à la sélection que l’on fait à la souris sous Excel.
Range("A1:B3").Select
Sélections et traitements
105
Pour changer de feuille active, ce qui correspond sous Excel, à cliquer sur son onglet (ça ne la sélectionne pas), on emploie la méthode Activate.
Worksheets("bilan").Activate
On fait de même pour passer sur un autre classeur ouvert, pour en faire le classeur actif.
Workbooks("TD VB1").Activate
Sélections et traitements
106
Pour couper la plage A1:D10 de la feuille résultats et la placer dans le Presse-papiers.
Worksheets("résultats").Range("A1:D10").Cut
Pour copier-coller les cellules A1:D10 de la feuille calculs dans la feuille graphique, à partir de la cellule E5, on utilise un copy en précisant sa destination
Worksheets("calculs").Range("A1:D10").Copy _ destination:= Worksheets("graphique").Range("E5")
Couper, copier, coller
107
Lorsqu’on veut pouvoir déclencher un programme sans aller dans l ’éditeur de Visual-Basic, on définit un bouton dans une barre d’outils, ou un bouton de commande sur une feuille, et on lui associe une macro telle que celle-ci :Private Sub démarre()‘ ouverture du classeur ( nécessaire si on a ‘ cliqué sur un bouton dans une barre d ’outils) Workbooks.Open("C:\Moi\MonJeu.xls")
‘ charge le userform sans l’afficherLoad UserFormJeu
‘ affiche le userformUserFormJeu.Show
End Sub
Perfectionnement
108
Dans le menu Outils d’Excel choisissez :
•Personnaliser, •Onglet Barre d’outils : Nouvelle
(elle apparaît dans l’écran)•Onglet commandes : Catégories : choisir
Macros•Glisser le bouton jaune souriant dans la nouvelle barre d’outil•Cliquez sur le bouton “ modifier la sélection “ •Choisir “ modifier l’image du bouton ”•Choisir “ affecter une macro ” •Fermer
Pour créer une nouvelle barre d’outil, et un bouton
109
Lorsque le projet nécessite plusieurs userforms, on les charge, on les affiche, et on peut les masquer temporairement, puis les décharger pour libérer de la place en mémoire centrale.
La méthode Hide sert à masquer un objet, ici de type userform, sans le décharger.
UserFormJeu.Hide
La méthode Unload sert à le décharger.UserFormJeu.Unload
Le userform de ces exemples se nomme UserFormJeu, et non pas seulement Jeu
Perfectionnement
110
Pour désigner des plages multizones, c'est-à-dire, des plages composées d'au moins deux blocs de cellules contiguës, on utilise :
Union(plage1, plage2, ...).
Dim r1, r2, r1r2 As RangeWorksheets("résultats").ActivateSet r1 = Range("A1:B2")Set r2 = Range("C3:D4")Set r1r2 = Union(r1, r2)r1r2.Select
Cet exemple crée un objet unique correspondant à l'union des plages A1:B2 et C3:D4, puis sélectionne la nouvelle plage définie.
Perfectionnement
111
On a souvent besoin de savoir quel est lecteur, et le répertoire actifs .La fonction CurDir renvoie le chemin d'accès courant.
Exemple Si le chemin d'accès courant sur le lecteur C: est
C:\LO10\Excelet si le chemin d'accès courant sur le lecteur D: est
D:\Stageet si C: est le lecteur courant, alors : Chemin1 = CurDir retournera " C:\LO10\Excel " Chemin2 = CurDir("C") retournera "C:\LO10\Excel". Chemin3= CurDir("D")' retournera "D:\stage".
Précisions sur les chemins
112
Pour changer de lecteur courant on utilise ChDrive .
ChDrive "D" fait de "D" le lecteur courant.
L'instruction ChDir change le répertoire par défaut mais pas le lecteur par défaut.
Par exemple, si C est le lecteur par défaut, l'instruction ci-dessous change le répertoire par défaut sur le lecteur D, mais C reste le lecteur par défaut :
ChDir "D:\TMP"
Précisions sur les chemins
113
Pour créer un nouveau répertoire ou dossier dans le répertoire courant, on utilise l'instruction MkDir , abrégé de Make Directory
Si le lecteur n'est pas indiqué dans le paramètre, le nouveau répertoire ou dossier est créé sur le lecteur courant.
MkDir "gestion"
Le fait de préciser le lecteur ne le rend pas actif par défaut
Si C: est le lecteur actif, après l’instruction suivante il le sera encore
MkDir "D:gestion"
Précisions sur les chemins
114
Précisions sur les chemins
Si sur E: le répertoire courant est Td ,
MkDir "E:Excel" crée un répertoire Excel dans Td
MkDir "E:\Excel" crée un répertoire Excel de même niveau que L010 et Mt11