La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

1 Portée des variables VBA & Excel. 2 Rappel Nous avons vu –Fonctions récursives –Procédures récursives.

Présentations similaires


Présentation au sujet: "1 Portée des variables VBA & Excel. 2 Rappel Nous avons vu –Fonctions récursives –Procédures récursives."— Transcription de la présentation:

1 1 Portée des variables VBA & Excel

2 2 Rappel Nous avons vu –Fonctions récursives –Procédures récursives

3 3 Plan Nous allons voir –Généralisation des programmes Portée des variables et des constantes –VBA et Excel Manipulation de cellules Manipulation de plages

4 4 Problème Algorithme ex1 Variable i : entier Variable T: Tableau[6] dentiers Début Pour i = 1 à 6 Lire(T(i)) Fin Pour i 6 Tant que i 1 Faire Ecrire (T(i)) i i-1 FinTantQue Fin Que fait cet algorithme ? Que doit-on changer pour lutiliser avec des tableaux de taille 7 ?

5 5 Solution Il faut remplacer le 6 par 7 partout Algorithme ex1 Variable i : entier Variable T: Tableau[7] dentiers Début Pour i = 1 à 7 Lire(T(i)) Fin Pour i 7 Tant que i 1 Faire Ecrire (T(i)) i i-1 FinTantQue Fin Cest facile quand il sagit dun petit algorithme

6 6 Meilleure solution Utiliser une constante pour fixer la taille Algorithme ex1 Const n = 7 Variable i : entier Variable T: Tableau[n] dentiers Début Pour i = 1 à n Lire(T(i)) Fin Pour i n Tant que i 1 Faire Ecrire (T(i)) i i-1 FinTantQue Fin Pour changer de taille, il suffit ensuite de changer la valeur de la constante n une seule fois

7 7 Constantes en VB Sub ex1() Const n = 7 Dim i, T(n) as Integer For i = 1 to n T(i)=InputBox(« ? ») Next i = n While i >= 1 MsgBox(T(i)) i = i-1 Wend EndSub

8 8 Autre problème On veut afficher lindice de la valeur maximale se trouvant dans le tableau saisi avec ex1 On pourrait penser à la solution suivante : Sub ex2() Dim M as Integer M = 1 For i = 2 to n If T(M) < T(i) Then M = i EndIf Next MsgBox(M) End Sub

9 9 Le problème (suite) Cette solution ne va pas marcher car ex2() ne connaît pas –La constante n –Le tableau T –La variable i Sub ex2() Dim M as Integer M = 1 For i = 2 to n If T(M) < T(i) Then M = i EndIf Next MsgBox(M) End Sub

10 10 Portée des variables et des constantes : Locale ou globale Toute variable déclarée au sein dun programme nest visible quau sein de ce même programme (Variable locale) La même remarque est valable pour les constantes (Constante locale) Pour quune variable ou constante soit globale, il faut la déclarer en dehors de tout programme

11 11 Solution Const n = 7 Dim i, T(n) as Integer sub ex1() For i = 1 to n T(i)=InputBox(« ? ») Next i = n While i >= 1 MsgBox(T(i)) i = i-1 Wend End sub sub ex2() … End Sub n est une constante globale T et i sont des variables globales

12 12 Portée des variables : Exo Sub ex1() Dim i As Integer i = 3 End Sub Sub ex2() MsgBox (i) End Sub On exécute ex1 puis ex2, que va afficher ex2 ?

13 13 Portée des variables : Exo Dim i as integer Sub ex1() i = 3 End Sub Sub ex2() Dim i as integer i = 5 End Sub Sub ex3() MsgBox(i) EndSub On exécute ex1, puis ex2, puis ex3. Que va afficher ex3 ?

14 14 Conclusion sur la portée Quand lexécution dun programme rencontre une variable 1.Le système regarde si la variable est définie localement Auquel cas, il utilise la version locale 2.Sinon, il regarde si la variable est définie dune manière globale Auquel cas, il utilise la version globale 3.Sinon, cest à dire la variable nest déclarée nulle part et dans ce cas VB a deux solutions Option Explicit : dans ce cas, il déclare une erreur Sinon, il essaye de créer instantanément la variable en linitialisant à 0

15 15 Autre problème Notre programme ex1() qui saisit les éléments dun tableau à n cases nest applicable que sur le tableau T Sub ex1() For i = 1 to n T(i)=InputBox(« ? ») Next i = n While i >= 1 MsgBox(T(i)) i = i-1 Wend EndSub Si on doit saisir un autre tableau T, on ne peut pas utiliser ce programme sauf si on le modifie

16 16 Solution Pour faire en sorte que ex1() soit directement utilisable avec nimporte quel tableau, il faut mettre le tableau comme paramètre Sub ex1(T() as Integer, n as integer) For i = 1 to n T(i)=InputBox(« ? ») Next i = n While i >= 1 MsgBox(T(i)) i = i-1 Wend EndSub Dorénavant, je peux faire Call ex1(T) Call ex1(M) Si T, T, M sont des variables de type tableau à une dimension.

17 17 Remarques Soient les déclarations suivantes –Dim n as integer –Dim T(7) as integer –Dim T1(n) as integer –Dim T2(5) as integer –Dim T3(10) as Integer Call ex1(T, 7) et Call ex1(T1, n) vont remplir les tableaux T et T1 Call ex1(T2, 5) va engendrer une erreur car on dépasse la taille du tableau T2 Call ex1(T3, 10) ne va remplir que les 7 premières cases

18 18 VBA et Excel : Cellules A partir des programmes VBA, on peut accéder aux cellules des feuilles de calcul Le mot réservé Cells désigne une cellule Une feuille de calcul peut être vue comme une matrice – Cells(i, j) désigne alors la cellule se trouvant à Ligne i et colonne j Une feuille de calcul peut être vue comme un vecteur –Cells(i) désigne la cellule se trouvant à la i ème position en parcourant les lignes de gauche à droite et Haut en bas –Une ligne contient 256 colonnes A2 = Cells(257)

19 19 Les cellules Chaque cellule possède plusieurs propriétés –Valeur –Couleur de la valeur –Couleur du contour –… Cells(i, j).Value désigne la valeur de la cellule se trouvant à la ième ligne et jème colonne

20 20 Les cellules Sub ex1() Dim i, j as integer For i = 1 to 3 For j = 1 to 3 Cells(i,j).value = i*j Next MsgBox( Cells(2, 3).Value) MsgBox( Cells(3).Value) End Sub

21 21 Les feuilles Les cellules modifiées par le programme précédent sont celles de la feuille à laquelle il est associé Ce programme est associé à Feuil1

22 22 Les feuilles Le mot réservé Sheets désigne une feuille de calcul Sheets(i) désigne la i ème feuille Sheets(3).Cells(1,2) désigne la cellule se trouvant à la ligne 1 et colonne 2 de la feuille 3. Sheets("Feuil3").Cells(1,2) désigne la même cellule On peut donc faire référence aux feuilles soit –Par leur numéro –Par leur nom

23 23 La commande With Pour ne pas avoir à retaper plusieurs fois la même chose, on peut utiliser la commande with Sub ex1() Dim i,j as integer Dim i, j as Integer For i = 1 to 3 For i=1 to 3 For j = 1 to 3 For j = 1 to 3 sheets(3).cells(i,j).value=1 with sheets(3).cells(i,j) sheets(3).cells(i,j).Interior.colorIndex=3.Value=1 Next.Interior.ColorIndex =3 Next End With End Sub Next Next EndSub

24 24 Fonction Utile : IsEmpty Cette fonction prend comme paramètre une cellule et retourne True ou False selon que la cellule est vide ou non. Syntaxe : IsEmpty(cellule)

25 25 Petit exo Que fait la partie de programme suivante ? i = 1 While IsEmpty(cells(i,1)) = False If cells(i,1).value <0 Then cells(i,1).value = 0 End If i = i + 1 Wend

26 26 Plages de valeurs Les plages de valeurs sont introduites avec la clause Range Exemple : Range("A1: C3") désigne la plage de cellules se trouvant entre A1 et C3 Range ("A1: C3").cells(4) désigne la quatrième cellule dans la plage A1:C3 –Cest donc A2

27 27 Plages et feuilles Tout comme les cellules, les plages sont associées à des feuilles. Sheets(1).Range("A1:B3").cells(2) –Désigne la 2ème cellule de la plage A1:B3 de la première feuille.

28 28 VBA et Excel En licence, vous verrez plus de choses sur la manipulation des fichiers Excel avec VBA

29 29 Conclusion du cours A retenir : –Algorithmique = première étape de la programmation Une fois quon a trouvé lalgorithme, il est facile de passer au programme Pour lexamen : –Rédaction dalgorithmes –Connaissances de la syntaxe VB –Connaissances des notions vues pour Excel Fonctions ( Si, RechercheV, …) Listes Tableaux croisés dynamiques Adressage relatif, absolu, mixte

30 30 Merci et bonne réussite aux examens


Télécharger ppt "1 Portée des variables VBA & Excel. 2 Rappel Nous avons vu –Fonctions récursives –Procédures récursives."

Présentations similaires


Annonces Google