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