Vous avez apprécié ?
Partagez ;-)

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 :

apercu - boucles suite

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 :

1 - boucles suite

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 :

2 - boucles suite

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

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 :

3 - boucles suite

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

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 ...

4 - boucles suite

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 :

5 - boucles suite

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

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