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

Portée des variables VBA & Excel

Présentations similaires


Présentation au sujet: "Portée des variables VBA & Excel"— Transcription de la présentation:

1 Portée des variables VBA & Excel

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

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

4 Problème Que fait cet algorithme ?
Algorithme ex1 Variable i : entier Variable T: Tableau[6] d’entiers 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 l’utiliser avec des tableaux de taille 7 ?

5 Solution C’est facile quand il s’agit d’un petit algorithme
Il faut remplacer le 6 par 7 partout Algorithme ex1 Variable i : entier Variable T: Tableau[7] d’entiers 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 C’est facile quand il s’agit d’un petit algorithme

6 Meilleure solution Utiliser une constante pour fixer la taille Algorithme ex1 Const n = 7 Variable i : entier Variable T: Tableau[n] d’entiers 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 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 Autre problème On veut afficher l’indice 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 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 Portée des variables et des constantes : Locale ou globale
Toute variable déclarée au sein d’un programme n’est visible qu’au sein de ce même programme (Variable locale) La même remarque est valable pour les constantes (Constante locale) Pour qu’une variable ou constante soit globale, il faut la déclarer en dehors de tout programme

11 Solution n est une constante globale
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 Portée des variables : Exo
Sub ex1() Dim i As Integer i = 3 End Sub Sub ex2() MsgBox (i) On exécute ex1 puis ex2, que va afficher ex2 ?

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

14 Conclusion sur la portée
Quand l’exécution d’un programme rencontre une variable Le système regarde si la variable est définie localement Auquel cas, il utilise la version locale Sinon, il regarde si la variable est définie d’une manière globale Auquel cas, il utilise la version globale Sinon, c’est à dire la variable n’est 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 l’initialisant à 0

15 Autre problème Notre programme ex1() qui saisit les éléments d’un tableau à n cases n’est 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 Solution Pour faire en sorte que ex1() soit directement utilisable avec n’importe 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(T’) Call ex1(M) Si T, T’, M sont des variables de type tableau à une dimension.

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 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 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 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 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 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 La commande With Pour ne pas avoir à retaper plusieurs fois la même chose, on peut utiliser la commande with Sub ex1() Sub ex1() Dim i,j as integer Dim i, j as Integer For i = 1 to For i=1 to 3 For j = 1 to For j = 1 to 3 sheets(3).cells(i,j).value= 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 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 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 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 C’est donc A2

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 VBA et Excel En licence, vous verrez plus de choses sur la manipulation des fichiers Excel avec VBA

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

30 Merci et bonne réussite aux examens


Télécharger ppt "Portée des variables VBA & Excel"

Présentations similaires


Annonces Google