Pour partager cette vidéo sur les réseaux sociaux ou sur un site, voici son url :
Sujets que vous pourriez aussi aimer :Parcourir les cellules sélectionnées
Pour optimiser les traitements sur des tableaux volumineux, il est important de savoir
parcourir toutes les cellules sélectionnées en
VBA Excel. Et c'est la technique que propose d'offrir cette nouvelle
astuce.
Sur l'exemple illustré par la capture, l'utilisateur sélectionne tous les résultats réalisés par les commerciaux. Puis, il clique sur le
bouton Repérer. Aussitôt, des couleurs de repérage sont attribuées en fonction de critères énoncés sous le bouton. Cette signalétique dynamique permet de grandement simplifier l'interprétation des données, à plus forte raison qu'elles sont nombreuses. C'est bien sûr une
boucle For Each qui passe les cellules en revue tour à tour, pour les confronter au petit tableau des conditions.
Classeur Excel à télécharger
Pour la démonstration de la technique, nous suggérons d'appuyer l'étude sur un
classeur offrant ces chiffres à analyser.
Nous retrouvons bien le tableau des commerciaux avec leurs résultats, le bouton d'action sur la droite et la plage de critères juste en-dessous. Ce bouton est déjà associé à une procédure et nous proposons de la constater.
- Réaliser le raccourci clavier ALT + F11 pour basculer dans l'éditeur VBA Excel,
Nous y découvrons la procédure du même nom que le bouton.
Sub reperer()
End Sub
Elle est écrite dans un
module du projet comme le confirme l'
explorateur de projet sur la gauche de l'écran.
La variable des cellules
Pour parcourir les cases sélectionnées, nous avons tout d'abord besoin d'une
variable représentant ces
cellules.
- Dans les bornes de la procédure reperer, ajouter la déclaration de variable suivante :
Sub reperer()
Dim cellule As Range
End Sub
Un
objet de type Range représente une
plage de cellules ou à défaut une
seule cellule. C'est donc cette
variable que nous allons utiliser pour parcourir toutes les cellules de la sélection.
Parcourir les cellules de la sélection
Et pour cela, nous avions déjà démontré la technique à l'occasion d'une
formation VBA Excel dédiée. Nous allons enclencher une
boucle For Each sur la collection des cellules actives.
- A la suite du code, ajouter la boucle For Each suivante :
...
For Each cellule In Selection
Next cellule
...
L'
objet cellule à gauche de l'instruction est du même type que l'
objet Selection à droite de l'instruction. Il représente la
collection des cellules sélectionnées. C'est ainsi que nous les parcourons toutes, de la première à la dernière.
Regrouper les propriétés
Pour la suite du traitement, nous allons massivement appeler les propriétés de l'objet cellule pour influer sur les couleurs des cases passées en revue. C'est la raison pour laquelle, nous suggérons d'optimiser le code avec un
bloc With.
- Dans les bornes de la boucle, créer le bloc With suivant :
...
With cellule
End With
...
Grâce à lui, nous allons maintenant pourvoir appeler les
propriétés de l'objet cellule sans devoir rappeler son nom à chaque occasion.
Vérifier les conditions
Désormais, il est question de confronter chaque cellule passée en revue par la boucle, aux trois critères numériques associés à des couleurs en cellules F6, F7 et F8. Pour cela, une
instruction conditionnelle multiple est nécessaire.
- Dans le bloc With, créer l'instruction conditionnelle suivante :
...
If (.Value > [F6].Value) Then
ElseIf (.Value > [F7].Value) Then
Else
End If
...
La hiérarchie des critères à vérifier est importante. Nous partons du plus haut pour rejoindre le plus bas. Nous comparons le contenu de chaque cellule passée en revue (.Value) tout d'abord avec la première condition ([F6].Value). Si elle n'est pas vérifiée, alors nous comparons le contenu (.Value) avec la deuxième condition ([F7].Value). Et lorsqu'aucun des deux premiers critères n'est satisfait, nous en déduisons que la cellule répond à la dernière contrainte en F8.
Attribuer les couleurs aux cellules
Maintenant, dans chaque branche de l'
instruction conditionnelle, il est simplement question de prélever les attributs de la cellule du critère (Couleur de fond et couleur de police), pour les affecter à la cellule en cours d'analyse par la boucle.
- Dans les branches de l'instruction If, ajouter les lignes VBA suivantes :
...
If (.Value > [F6].Value) Then
.Interior.Color = [F6].Interior.Color
.Font.Color = [F6].Font.Color
ElseIf (.Value > [F7].Value) Then
.Interior.Color = [F7].Interior.Color
.Font.Color = [F7].Font.Color
Else
.Interior.Color = [F8].Interior.Color
.Font.Color = [F8].Font.Color
End If
...
Grâce à la
propriété enfant Color de la
propriété Interior de l'
objet cellule, nous récupérons la
couleur de fond de la cellule (F6, F7 ou F8) qui honore le critère, selon les mêmes propriétés d'objet. Et grâce à la
propriété enfant Color de la
propriété Font, nous appliquons à l'
objet cellule la même couleur de police que celle de la cellule qui honore le critère.
Il est temps de tester le code pour vérifier que nous sommes bien en mesure d'analyser chaque cellule sélectionnée par l'utilisateur.
- Enregistrer les modifications (CTRL + S) et revenir sur la feuille (ALT + Tab),
- Sélectionner les données de la troisième colonne du tableau, soit la plage D3:D18,
- Puis, cliquer sur le bouton Repérer,
Comme vous pouvez l'apprécier,
toutes les cellules de la sélection sont effectivement parcourues, en atteste les couleurs qui leurs sont attribuées, eu égard aux tests réalisés sur chacune d'entre elles. Et bien entendu, si vous modifiez un ou plusieurs critères, que vous resélectionnez la plage et que vous recliquez sur le
bouton Repérer, les couleurs s'ajustent automatiquement en fonction des nouvelles conditions.