TOP

VBA-Leçon 8.2. Boucles (Loops)

YouLibreCalc for Excel logo

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