formateur informatique

Faire clignoter des cellules Excel selon un critère

Accueil  >  Bureautique  >  Excel  >  Excel VBA  >  Faire clignoter des cellules Excel selon un critère
Livres à télécharger


Pour partager cette vidéo sur les réseaux sociaux ou sur un site, voici son url :


Inscription Newsletter    Abonner à Youtube    Vidéos astuces Instagram
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.

Faire clignoter des cellules sur une feuille Excel en fonction d-un critère

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.

Faire clignoter les cellules d-un critère en VBA Excel

Bien sûr, si vous cliquez sur le bouton Stopper, les clignotements s'arrêtent et toutes les cellules reprennent leurs attributs d'origine.

 
Sur Facebook
Sur Youtube
Les livres
Contact
Mentions légales



Abonnement à la chaîne Youtube
Partager la formation
Partager sur Facebook
Partager sur Twitter
Partager sur LinkedIn