Pour partager cette vidéo sur les réseaux sociaux ou sur un site, voici son url :
Couleurs aux croisements
Nous l'avons déjà compris, le
VBA Excel est capable de gérer de nombreux
événements de feuilles. Ici, nous allons en profiter pour mettre instantanément en lumière les données attachées à la
cellule cliquée par l'utilisateur.
Sur l'exemple illustré par la capture, l'utilisateur clique sur une cellule à mettre en évidence. Instantanément, le
code VBA intercepte l'action et se charge de colorier l'intégralité de sa ligne et de sa colonne.
Classeur Excel à télécharger
Pour la mise en place de cette astuce, nous proposons d'agir à partir d'un
tableau offrant de nombreuses données intéressantes à croiser.
Nous découvrons un tableau recensant des activités de sorties dans différents départements. Il s'étend entre les colonnes B et F et sur plusieurs centaines de lignes.
Changement de sélection en VBA
Pour matérialiser ces lignes croisées et colorées, nous devons commencer par gérer l'action du clic de l'utilisateur dans n'importe laquelle des cellules de la feuille. Et pour cela, le
VBA Excel offre un
événement tout à fait dédié.
- Réaliser le raccourci clavier ALT + F11 pour basculer dans l'éditeur VBA Excel,
- Dans l'explorateur de projet sur la gauche, double cliquer sur l'élément Feuil1 (Id2Sorties),
Ainsi, nous affichons au centre de l'écran, la
feuille de code VBA associée à la feuille du tableau.
- En haut de cette feuille de code, déployer la liste déroulante de gauche,
- Dans les propositions, choisir l'objet Worksheet,
Cet objet désigne une feuille, en l'occurrence ici la feuille active.
Cette action a pour effet de créer la
procédure événementielle Worksheet_SelectionChange. C'est elle qui déclenchera un
code VBA au clic dans une nouvelle cellule de la feuille Excel associée. C'est donc elle qui doit se charger d'illuminer la ligne et la colonne de la cellule cliquée. A ce titre, vous notez la présence de l'
objet Target transmis en paramètre de la procédure. Il désigne la
cellule cliquée. Nous allons donc l'exploiter pour pointer sur sa ligne et sur sa colonne.
Réinitialiser les couleurs
Avant de penser à colorier les rangées qui croisent la cellule cliquée, nous devons réinitialiser les couleurs potentiellement générées au croisement d'une précédente cellule. En l'absence de cette action préliminaire, les couleurs se cumuleraient à chaque nouveau clic.
- Dans les bornes de la procédure événementielle, ajouter l'instruction VBA suivante :
...
Cells.Interior.ThemeColor = xlThemeColorDark2
...
L'
objet Cells, en l'absence de paramètres transmis, représente la
collection des cellules de la feuille. En d'autres termes, il désigne
toutes les cellules de la feuille active. C'est grâce à lui que nous allons pouvoir influer sur la
couleur d'arrière-plan de
toutes les cellules, sans exception. Donc, les précédentes potentielles rangées croisées seront incluses dans cette réinitialisation. Sa
propriété Interior désigne le
fond des cellules. Grâce à elle, nous atteignons sa
propriété enfant ThemeColor que nous réglons sur la
valeur xlThemeColorDark2. Ce thème applique une
couleur de fond gris clair à l'ensemble des cellules. Il s'agit bien sûr du thème en vigueur par défaut sur cette feuille.
Regrouper les actions
Deux actions doivent maintenant intervenir pour changer l'aspect de la ligne et de la colonne de la
cellule cliquée. Et rappelons-le, c'est l'
objet Target qui représente cette dernière. Plutôt que de répéter cet objet à deux reprises, nous proposons d'optimiser le code avec un
bloc With comme nous l'avons enseigné à maintes reprises. Dans ce bloc, nous pourrons ensuite énumérer les propriétés à affecter.
- A la suite du code VBA, créer le bloc With suivant :
...
With Target
End With
...
Colorier la ligne et la colonne
Maintenant, nous avons tout pouvoir pour agir sur cette cellule (Target) et ses dépendances.
- Dans le bloc With, ajouter les deux instructions VBA suivantes :
...
.EntireRow.Interior.Color = RGB(222, 225, 2)
.EntireColumn.Interior.Color = RGB(254, 179, 0)
...
Ce sont les propriétés respectives
EntireRow et
EntireColumn qui désignent la
ligne et la colonne entières de la
cellule cliquée, représentée par l'
objet Target. Dès lors, nous descendons de nouveau jusqu'à la
propriété Interior pour influer sur le remplissage. Mais cette fois, il n'est pas question de thème. Nous exploitons la
fonction VBA RGB pour définir les composantes des couleurs à affecter à la
propriété enfant Color. C'est ainsi que nous choisissons un fond jaune pour la ligne et un fond orange pour la colonne.
Le développement est déjà terminé. Il ne nous reste plus qu'à tester.
- Enregistrer les modifications (CTRL + S) et basculer sur la feuille Excel (ALT + Tab),
- Dès lors, réaliser des clics successifs dans des cellules du tableau à illuminer,
Désormais, à chaque clic dans une nouvelle cellule, en même temps que les précédentes couleurs sont réinitialisées grâce à l'
objet VBA Cells, la ligne et la colonne de la nouvelle
intersection sont parfaitement mises en lumière dans les couleurs que nous avons choisies.