L3 Management/ Comptabilité Contrôle Finances/ Economie de la Firme
Retour au sommaire Séance 5 - VBA: Tableaux et Enregistrements
Lorsque l’on répète plusieurs fois les mêmes actions, on parle d’itération.
Une structure d’itération permet de rejouer les mêmes actions, avec d’éventuelles petites différences.
Les structures itératives fournissent un moyen d’effectuer des boucles sur des instructions : la boucle permet d’exécuter des itérations.
Il existe plusieurs types de structures itératives, mais elles sont généralement communes entre les différents langages.
Une boucle s’exécute un certain nombre de fois avant de s’interrompre et que la suite du programme poursuive son exécution. Si une boucle ne s’interrompt jamais, c’est une boucle infinie : le programme reste bloqué car la boucle se répète indéfiniment.
Les structures itératives nécessitent donc une condition d’arrêt, c’est-à-dire une condition qui interrompt les itérations dès qu’elle est remplie.
Un compteur est souvent utilisé à l’intérieur de la boucle : une variable entière, généralement initialisée à 0, est incrémentée à chaque nouvelle itération. Le compteur permet ainsi simplement de compter le nombre d’itérations déjà effectué.
La valeur du compteur est très souvent utilisée dans la condition de sortie, pour interrompre la boucle au bout d’un certain nombre d’itération.
La boucle While (Tant que en français) permet d’exécuter une instruction tant qu’une condition est vraie.
La syntaxe est la suivante :
While condition
'instruction'
Wend
Si l’on souhaite afficher les nombres de 1 à 10, le code sera le suivant :
Dim i As Integer 'On initialise le compteur'
i = 1
While i <= 10
MsgBox i
i = i + 1 'On incrémente (on augmente de 1) le compteur'
Wend
Un autre exemple serait de demander à l’utilisateur de saisir un nombre. Tant que ce nombre n’est pas compris entre 1 et 10, on lui redemande.
Sub boucle_while()
Dim nombre As Integer
nombre = InputBox("Entrez un nombre", "Nombre")
While nombre < 1 Or nombre > 10
nombre = InputBox("Entrez un nombre", "Nombre")
Wend
End Sub
Dans cet exemple, on peut voir que l’on doit écrire deux fois le code
nombre = InputBox("Entrez un nombre", "Nombre")
En effet, il faut d’abord que l’utilisateur saisisse un nombre, puis que le programme vérifie si ce nombre est compris entre 1 et 10.
Si ce n’est pas le cas, on redemande à l’utilisateur de saisir un nombre.
La boucle Do While permet d’exécuter une instruction tant qu’une condition est vraie.
Elle est similaire à la boucle While mais la condition est testée à la fin de l’exécution de l’instruction. La syntaxe est la suivante :
Do
'instruction'
Loop While condition
A la différence de la boucle While , les instructions sont exécutées au moins une fois.
Pour afficher les nombres de 1 à 10, le code sera le suivant :
Dim i As Integer
i = 1
Do
MsgBox i
i = i + 1
Loop While i <= 10
Si nous reprenons le même exemple que la boucle While , on obtient le code suivant :
Dim nombre As Integer
Do
nombre = InputBox("Entrez un nombre", "Nombre")
Loop While nombre < 1 Or nombre > 10
La boucle Do Loop Until permet d’exécuter une instruction tant qu’une condition est fausse. Elle est similaire à la boucle Do While mais la condition est testée à la fin de l’exécution de l’instruction. La syntaxe est la suivante :
Do
instruction
Loop Until condition
Pour afficher les nombres de 1 à 10, le code sera le suivant :
Dim i As Integer
i = 1
Do
MsgBox i
i = i + 1
Loop Until i > 10
Si nous reprenons le même exemple que la boucle While, on obtient le code suivant :
Sub do_while()
Dim nombre As Integer
Do
nombre = InputBox("Entrez un nombre", "Nombre")
Loop Until nombre >= 1 And nombre <= 10
End Sub
La boucle For permet d’exécuter une instruction un nombre défini de fois.
La syntaxe est la suivante :
For i = valeur_de_depart To valeur_de_fin Step pas
'instruction'
Next i
Step sert à définir le pas d’itération. Il est toutefois optionnel. Si on ne le précise pas, le pas vaut 1.
Next i permet de terminer la boucle. Il est important de préciser i car il s’agit du nom de la variable de boucle.
Pour afficher les nombres de 1 à 10, le code sera le suivant :
For i = 1 To 10
MsgBox i
Next i
On peut aussi utiliser la boucle For pour parcourir un tableau.
Pour afficher les valeurs d’un tableau tableau de taille 3, le code sera le suivant :
Dim tableau(2) As Integer
tableau(0) = 1
tableau(1) = 2
tableau(2) = 3
For i = 0 To 2
MsgBox tableau(i)
Next i
Une autre façon de définir le tableau est la suivante :
Dim tableau() As Variant
tableau = Array(1, 2, 3)
For i = 0 To 2
MsgBox tableau(i)
Next i
La boucle For Each In Next permet d’exécuter une instruction pour chaque élément d’un tableau.
La syntaxe est la suivante :
For Each element In tableau
'instruction'
Next element
Pour afficher les valeurs d’un tableau tableau de taille 3, le code sera le suivant:
Dim tableau(2) As Integer
tableau(0) = 1
tableau(1) = 2
tableau(2) = 3
For Each element In tableau
MsgBox element
Next element
Le type Range permet de manipuler des cellules ou des plages de cellules.
Pour créer un objet Range , on utilise la syntaxe suivante :
Dim range As Range
Set range = Range("A1")
On peut aussi créer un objet Range à partir d’une plage de cellules :
Dim range As Range
Set range = Range("A1:B2")
On peut aussi créer un objet Range à partir d’une plage de cellules en utilisant les coordonnées :
Dim range As Range
Set range = Range(Cells(1, 1), Cells(2, 2))
La méthode Clear permet de supprimer le contenu d’une cellule ou d’une plage de cellules :
Dim range As Range
Set range = Range("A1:B2")
range.Clear
La méthode Value permet de récupérer la valeur d’une cellule ou d’une plage de cellules :
Dim range As Range
Set range = Range("A1:B2")
MsgBox range.Value
La méthode Cells permet de spécifier une cellule à partir d’une plage de cellules :
Dim range As Range
Set range = Range("A1:B2")
range.Cells(1, 1).Value = 1
range.Cells(1, 2).Value = 2
range.Cells(2, 1).Value = 3
range.Cells(2, 2).Value = 4
L’objet Application permet de manipuler Excel.
Pour créer un objet Application , on utilise la syntaxe suivante :
Dim app As Application
Set app = Application
La méthode Run permet d’exécuter une macro :
Dim app As Application
Set app = Application
app.Run "NomDeLaMacro"
La méthode Run permet aussi d’exécuter une macro avec des paramètres :
Dim app As Application
Set app = Application
app.Run "NomDeLaMacro", "param1", "param2"
Ecrire une fonction qui demande à l’utilisateur un entier n et fait la somme des entiers de 1 à n.
Puis, ecrire une procédure qui affiche le résultat de la fonction.
Tout d’abord, comme on connait le nombre d’itérations, on sait que l’on peut utiliser une boucle For.
Ensuite, on crée une variable somme qui contiendra la somme des entiers de 1 à n.
Enfin, on fait la somme des entiers de 1 à n en ajoutant la valeur de i à la variable somme à chaque itération.
A la fin de la boucle, on renvoie la valeur de somme en oubliant pas de l’affecter à sommeEntiers (le nom de la fonction).
Function sommeEntiers() As Integer
Dim n As Integer
Dim somme As Integer
Dim i As Integer
n = InputBox("Entrez un entier")
somme = 0
For i = 1 To n
somme = somme + i
Next i
sommeEntiers = somme
End Function
Sub afficherSomme()
MsgBox sommeEntiers()
End Sub
Ecrire une procédure prenant un entier n en paramètre et qui affiche les entiers pairs de 1 à n.
Vous pouvez utiliser la fonction Mod pour tester si un entier est pair ou impair.
La syntaxe de la fonction Mod est la suivante :
n Mod x = y
Si y est égal à 0, alors n est divisible par x.
Sub afficherPairs(n As Integer)
Dim i As Integer
For i = 1 To n
If i Mod 2 = 0 Then
MsgBox i
End If
Next i
End Sub
Ecrire une procédure demandant à l’utilisateur un entier n et l’écrire dans la cellule A1 en utilisant l’objet Range.
Sub ecrireDansCellule()
Dim n As Integer
Dim range As Range
n = InputBox("Entrez un entier")
Set range = Range("A1")
range.Value = n
End Sub