Cours VBA : les boucles (exercice)
Pour mettre en pratique ce qui a été vu jusque-là, nous allons créer étape par étape une macro qui va colorer 10x10 cellules (en damier rouge et noir) à partir de la cellule sélectionnée, aperçu :
Voici le point de départ de l'exercice :
Sub exercice_boucles()
Const NB_CASES As Integer = 10 'Nombre de cellules à colorer
'...
End SubPour commencer, ajoutez une boucle For qui va colorer en noir les cellules de la colonne A de 1 à 10 (10 étant la constante NB_CASES), aperçu :
Prenez quelques instants pour créer cette boucle avant de passer à la solution ...
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
La solution :
Sub exercice_boucles()
Const NB_CASES As Integer = 10 'Nombre de cellules à colorer
For l = 1 To NB_CASES 'l => n° ligne
Cells(l, 1).Interior.Color = RGB(0, 0, 0) 'Noir
Next
End SubLa prochaine étape est la coloration en rouge d'une cellule sur 2 grâce à une instruction If (en fonction des n° de ligne pairs/impairs), aperçu :
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
La solution :
Sub exercice_boucles()
Const NB_CASES As Integer = 10 'Nombre de cellules à colorer
For l = 1 To NB_CASES 'l => n° ligne
If l Mod 2 = 0 Then 'Mod => est le reste d'une division
Cells(l, 1).Interior.Color = RGB(200, 0, 0) 'Rouge
Else
Cells(l, 1).Interior.Color = RGB(0, 0, 0) 'Noir
End If
Next
End SubLa condition If l Mod 2 = 0 signifie : si le reste de la division de l par 2 est égal à 0 ...
Seuls les n° de ligne pairs ont un reste égal à 0 lorsqu'ils sont divisés par 2.
Créez maintenant une boucle qui va exécuter la première boucle sur 10 colonnes, aperçu :
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
La solution :
Sub exercice_boucles()
Const NB_CASES As Integer = 10 'Damier de 10x10 cellules
For l = 1 To NB_CASES 'l => n° ligne
For c = 1 To NB_CASES 'c => n° colonne
If l Mod 2 = 0 Then
Cells(l, c).Interior.Color = RGB(200, 0, 0) 'Rouge
Else
Cells(l, c).Interior.Color = RGB(0, 0, 0) 'Noir
End If
Next
Next
End SubLa seconde boucle est donc imbriquée dans la première.
Pour obtenir ce résultat ...
Remplacez :
If l Mod 2 = 0 ThenPar :
If (l + c) Mod 2 = 0 ThenIl ne reste plus qu'à modifier le code pour créer le damier à partir de la cellule active (à la place de A1), aperçu :
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
La solution :
Sub exercice_boucles()
Const NB_CASES As Integer = 10 'Damier de 10x10 cellules
Dim lig As Integer, col As Integer ' => ajout de 2 variables
'Décalage (lignes) à partir de la première cellule = n° de ligne de la cellule active - 1
lig = ActiveCell.Row - 1
'Décalage (colonnes) à partir de la première cellule = n° de colonne de la cellule active - 1
col = ActiveCell.Column - 1
For l = 1 To NB_CASES 'N° ligne
For c = 1 To NB_CASES 'N° colonne
If (l + c) Mod 2 = 0 Then
'Cells(n° de ligne + décalage lignes, n° de colonne + décalage colonnes)...
Cells(l + lig, c + col).Interior.Color = RGB(200, 0, 0) 'Rouge
Else
Cells(l + lig, c + col).Interior.Color = RGB(0, 0, 0) 'Noir
End If
Next
Next
End Sub
