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