Pour partager cette vidéo sur les réseaux sociaux ou sur un site, voici son url :
Sujets que vous pourriez aussi aimer :
Faire clignoter des cellules
Avec des
boucles de temps en VBA Excel , il est plutôt facile de faire
clignoter des cellules spécifiques pour les repérer sans équivoque.
Sur l'exemple illustré par la capture, lorsque l'utilisateur clique sur le
bouton intitulé Repérer , toutes les cellules dépassant le
critère numérique dynamique stipulé au-dessus du bouton, se mettent Ã
clignoter en rouge sur un fond jaune . Lorsque l'utilisateur clique sur le
bouton intitulé Stopper , le signalement s'arrête. Bien sûr, si l'opérateur change de critère numérique et qu'il clique de nouveau sur le bouton Repérer, c'est un autre panel de cellules concordantes qui clignotent.
Classeur Excel à télécharger
Pour développer ce mécanisme, nous proposons de récupérer un classeur hébergeant une feuille avec un tableau de valeurs numériques à faire ressortir, pour certaines d'entre elles.
Télécharger le classeur clignoter-cellules-critere.xlsm en cliquant sur ce lien ,
Cliquer droit sur le fichier réceptionné,
Dans le menu contextuel, tout en bas, choisir la rubrique Propriétés ,
En bas de la boîte de dialogue, cocher la case Débloquer et valider par Ok,
Dès lors, double cliquer sur le fichier pour l'ouvrir dans Excel ,
Nous découvrons le tableau des nombres entre les colonnes B et H. Pour le repérage, le critère numérique à dépasser doit être inscrit en
cellule J4 . Les
deux boutons du dessous sont déjà attachés à des
procédures événementielles . Nous allons le constater. Ils permettent respectivement de démarrer le
clignotement des cellules concordantes et de le stopper.
Les procédures attachées aux boutons
Nous proposons de découvrir les procédures des deux boutons de la feuille.
Réaliser le raccourci clavier ALT + F11 pour basculer dans l'éditeur VBA Excel ,
De cette manière, nous découvrons le code existant, hébergé par un module :
...
Option Explicit
Dim enCours As Boolean
Sub reperer()
End Sub
Sub stopper()
enCours = False
End Sub
...
Une variable booléenne publique est déclarée. Elle se nomme
enCours . C'est elle qui doit décider de l'arrêt ou de la poursuite du clignotement des cellules repérées, en fonction du bouton cliqué. Précisément, le
bouton stopper bascule sont état Ã
False . La procédure associée au
bouton intitulé Repérer est vide pour l'instant. Mais elle a le mérite d'exister.
Les variables
Nous avons besoin d'une variable pour parcourir toutes les cellules du tableau. Au passage, celui-ci est reconnu sous le nom
montants . Vous pouvez le constater en déployant la
zone Nom en haut à gauche de la
feuille Excel . Nous avons besoin d'une variable pour initier la
boucle de temps et d'une dernière pour
alterner les attributs de mise en forme des cellules concordantes.
Dans les bornes de la procédure reperer , ajouter les déclarations et affectations suivantes :
...
Dim cellule As Range: Dim leTemps As Variant: Dim bascule As Boolean
enCours = True: bascule = True
[montants].Font.Color = [modele].Font.Color
[montants].Interior.Color = [modele].Interior.Color
...
Nous déclarons les trois variables comme annoncé avec leurs types respectifs. Nous ouvrons l'autorisation au clignotement (enCours = True). Nous initialisons le
booléen Ã
True qui doit servir de bascule pour
alterner les mises en forme clignotantes . Puis, nous réinitialisons la couleur de police et la couleur de fond du tableau nommé
montant . Pour cela, nous récupérons les attributs d'une cellule nommée
modele . Il s'agit de la cellule O1. Une fois encore, vous pouvez le constater en déployant la
zone Nom en haut à gauche de la
feuille Excel .
La boucle de temps - Temporisations
Nous devons maintenant créer une
boucle de temps marquant des
temporisations pour permettre l'
effet de clignotement escompté. Cette
boucle de temps , donc ce
clignotement , doit se poursuivre tant que la
variable enCours vaut
True .
A la suite du code de la procédure, ajouter les instructions VBA suivantes :
...
If (IsNumeric([J4].Value) = True) Then
While enCours = True
leTemps = Timer
While Timer < leTemps + 0.4
DoEvents
Wend
If bascule = False Then bascule = True Else bascule = False
Wend
End If
...
Tout d'abord, nous engageons une
instruction conditionnelle (If) consistant à vérifier que le
critère en J4 existe bien et qu'il est numérique (IsNumeric). Si tel est le cas, nous initions la boucle (While) qui doit poursuivre son traitement jusqu'à ordre contraire (enCours = True). C'est ainsi et à chaque passage que nous prélevons le
temps qu'il est dans la
variable leTemps , grâce à la
fonction VBA Timer . Nous y incrustons une autre boucle pour réaliser une
temporisation de quatre dizièmes (Timer < leTemps + 0.4). C'est la
commande DoEvents qui permet de tourner dans le vide pendant ce laps de temps. L'objectif est de
simuler le clignotement . A l'issue de cette
boucle de temporisation , nous basculons l'état de la
variable bascule . C'est en effet en fonction de la valeur qu'elle porte que nous déciderons des attributs de mise en forme neutres ou de repérages à appliquer aux cellules concordantes.
Parcourir les cellules du tableau
C'est maintenant que nous devons déceler les cellules concordantes. Pour cela, nous devons les parcourir toutes. Donc, nous devons engager une
boucle For Each sur le tableau intitulé
montants .
Après l'instruction conditionnelle et dans la boucle While , ajouter les instructions suivantes :
...
For Each cellule In [montants]
If cellule.Value >= [J4].Value Then
If bascule = False Then
cellule.Interior.Color = vbYellow
cellule.Font.Color = vbRed
Else
cellule.Interior.Color = [modele].Interior.Color
cellule.Font.Color = [modele].Font.Color
End If
End If
Next cellule
...
Nous parcourons donc toutes les cellules du tableau nommé montants (For Each cellule In [montants]). Dès que l'une d'entre elles vérifie le critère (If cellule.Value >= [J4].Value), nous décidons de la mise en forme à adopter pour la police et le fond (Font et Interior), selon l'état de la
variable bascule qui "clignote". Un coup sur deux, il s'agit d'un texte rouge sur un fond jaune et dans l'autre cas, il s'agit de la réinitialisation des attributs d'origine selon l'aspect de la case nommée
modele .
Stopper le clignotement
Si l'utilisateur a cliqué sur le
bouton Stopper , il a réinitialisé l'état de la
variable enCours . Dans ces conditions, le
clignotement doit être arrêté et les cellules repérées doivent recouvrer leurs attributs d'origine. Pour cela, il suffit de les emprunter à la cellule reconnue sous le
nom modele .
A la toute fin de la procédure, créer l'instruction conditionnelle suivante :
...
End If
If enCours = False Then
[montants].Font.Color = [modele].Font.Color
[montants].Interior.Color = [modele].Interior.Color
End If
End Sub
...
Si l'utilisateur a cliqué sur le
bouton Stopper (enCours = False), nous réinitialisons toutes les cellules de la base de données en calquant leurs attributs sur ceux de la cellule modèle en colonne O. C'est ainsi que nous supprimons les couleurs de repérage.
Maintenant, si vous enregistrez les modifications, que vous basculez sur la feuille Excel, que vous modifiez le critère en cellule J4 et que vous cliquez sur le bouton Repérer, vous avez le plaisir de constater que toutes les cellules portant une valeur supérieure à celle du critère, sont repérées sans équivoque.
Bien sûr, si vous cliquez sur le bouton Stopper, les clignotements s'arrêtent et toutes les cellules reprennent leurs attributs d'origine.