Vous êtes sur la page 1sur 5

Cours VBA : les boucles (exercice) http://www.excel-pratique.com/fr/vba/boucles_suite.

php

Pour mettre en pratique ce qui a t vu jusque-l, nous allons crer tape par tape une macro qui va
colorer 10x10 cellules (en damier rouge et noir) partir de la cellule slectionne, aperu :

Voici le point de dpart 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), aperu :

Prenez quelques instants pour crer cette boucle avant de passer la solution ...

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

1 of 5 16/10/2016 14:16
Cours VBA : les boucles (exercice) http://www.excel-pratique.com/fr/vba/boucles_suite.php
.
.
.
.
.
.
.
.

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 grce une instruction If (en fonction des n de ligne pairs/impairs), aperu :

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

La solution :

Sub exercice_boucles()

Const NB_CASES As Integer = 10 'Nombre de cellules colorer

2 of 5 16/10/2016 14:16
Cours VBA : les boucles (exercice) http://www.excel-pratique.com/fr/vba/boucles_suite.php

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 diviss par 2.

Crez maintenant une boucle qui va excuter la premire boucle sur 10 colonnes, aperu :

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

La solution :

Sub exercice_boucles()

Const NB_CASES As Integer = 10 'Damier de 10x10 cellules

For l = 1 To NB_CASES 'l => n ligne

3 of 5 16/10/2016 14:16
Cours VBA : les boucles (exercice) http://www.excel-pratique.com/fr/vba/boucles_suite.php

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 imbrique dans la premire.

Pour obtenir ce rsultat ...

Remplacez :

If l Mod 2 = 0 Then

Par :

If (l + c) Mod 2 = 0 Then

Il ne reste plus qu' modifier le code pour crer le damier partir de la cellule active ( la place de A1), aperu :

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
4 of 5 16/10/2016 14:16
Cours VBA : les boucles (exercice) http://www.excel-pratique.com/fr/vba/boucles_suite.php
.
.
.
.
.
.
.
.
.
.
.
.

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

'Dcalage (lignes) partir de la premire cellule = n de ligne de la cellule active - 1


lig = ActiveCell.Row - 1
'Dcalage (colonnes) partir de la premire 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 + dcalage lignes, n de colonne + dcalage 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

5 of 5 16/10/2016 14:16