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

Aucun commentaire:

Enregistrer un commentaire