Vous êtes sur la page 1sur 5

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 :

Achetez les autos d'USA

200,000 véhicules à choisir


Livraison en grands ports
Africains
auctionexport.com

Voici le point de départ de l'exercice :

Sub exercice_boucles()

Const NB_CASES As Integer = 10 'Nombre de cellules à colorer

'...

End Sub

Pour 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 Sub

La 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 Sub

La 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 Sub

La seconde boucle est donc imbriquée dans la première.

Pour obtenir ce résultat ...

Remplacez :

If l Mod 2 = 0 Then

Par :

If (l + c) Mod 2 = 0 Then

Il 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

Achetez les autos d'USA


200,000 véhicules à choisir Livraison en grands ports Africains
auctionexport.com

Vous aimerez peut-être aussi