TOP

VBA-Leçon 8.2. Boucles (Loops)

Pour mettre en pratique ce que nous venons d'apprendre, nous allons parcourir le processus de création d'une macro pour peindre un damier 10x10 (rouge et noir) à partir de la cellule actuellement active.


Regardons le résultat de la boucle que nous voulons obtenir :

Ensuite, la première étape de l’exercice consistera à créer une procédure vide :

Sub loops_exercise()

    Const NB_CELLS As Integer = 10 'Le nombre de cellules que nous voulons peindre

    '...
   
End Sub

Commençons par ajouter une boucle FOR pour noircir la colonne A (la constante NB_CELLS est 10).

Nous devrions obtenir le résultat suivant :

Jetons un coup d'œil au code :

Sub loops_exercise()

    Const NB_CELLS As Integer = 10 'Le nombre de cellules que nous voulons peindre

    For r = 1 To NB_CELLS 'r => numéro de ligne
   
        Cells(r, 1).Interior.Color = RGB(0, 0, 0) 'Noir

    Next
   
End Sub

L'étape suivante colore chaque cellule suivante en rouge, à l'aide de l'instruction IF (selon que le numéro de ligne est pair ou impair). Voir inférieur:

Le code pour résoudre cette sous-tâche est le suivant :

Sub loops_exercise()

    Const NB_CELLS As Integer = 10 'Le nombre de cellules que nous voulons peindre

    For r = 1 To NB_CELLS 'r => numéro de ligne
   
       If r Mod 2 = 0 Then 'Mod => est le reste de la division
           Cells(r, 1).Interior.Color = RGB(200, 0, 0) 'Rouge
       Else
           Cells(r, 1).Interior.Color = RGB(0, 0, 0) 'Noir
       End If

    Next
   
End Sub

La condition IF r Mod 2 = 0 signifie : si le reste de la division de r par 2 est 0...

Seul le numéro de ligne pair a un reste de 0 lorsqu'il est divisé par 2 :

Comment créer une autre boucle qui exécuterait la boucle que nous avons déjà écrite pour 10 colonnes. Voir inférieur:

Le code pour résoudre cette sous-tâche est le suivant :

Sub loops_exercise()

    Const NB_CELLS As Integer = 10 'Damier 10x10 avec alvéoles

    For r = 1 To NB_CELLS 'r => Numéro de ligne
   
        For c = 1 To NB_CELLS 'c => Numéro de colonne
       
           If r Mod 2 = 0 Then
               Cells(r, c).Interior.Color = RGB(200, 0, 0) 'Rouge
           Else
               Cells(r, c).Interior.Color = RGB(0, 0, 0) 'Noir
           End If
           
        Next
    Next
   
End Sub

Maintenant, le deuxième cycle est inséré dans le premier.

Pour obtenir le résultat suivant...

Remplacer:

If r Mod 2 = 0 Then

Sur:

If (r + c) Mod 2 = 0 Then

Il ne reste plus qu'à changer le code pour que le damier soit créé à partir de la cellule sélectionnée (et non A1). Voir ci-dessous:

Pour cela, nous écrirons le code suivant :

Sub loops_exercise()

   Const NB_CELLS As Integer = 10 'Damier 10x10 avec alvéoles
   Dim offset_row As Integer, offset_col As Integer '=> ajouter 2 variables
   
   'Décalage (lignes) à partir de la première cellule = numéro de ligne de la cellule active actuelle - 1
   offset_row = ActiveCell.Row - 1
   'Décalage (colonnes) à partir de la première cellule = numéro de colonne de la cellule active actuelle - 1
   offset_col = ActiveCell.Column - 1
   
   For r = 1 To NB_CELLS 'Numéro de ligne
   
        For c = 1 To NB_CELLS 'Numéro de colonne
       
            If (r + c) Mod 2 = 0 Then
            'Cellule (numéro de ligne + décalage de ligne supplémentaire, numéro de colonne +
            'déplacement supplémentaire des enceintes)
                Cells(r + offset_row, c + offset_col).Interior.Color = RGB(200, 0, 0) 'Rouge
            Else
                Cells(r + offset_row, c + offset_col).Interior.Color = RGB(0, 0, 0) 'Noir
            End If
           
        Next
   Next
   
End Sub