Comment faire clignoter une cellule Excel ? La mise en forme dynamique

Guide « 108 astuces pour grands débutants sur Excel ! » Offert
Booster votre productivité en téléchargeant gratuitement votre ebook PDF des meilleures astuces pour les débutants et les pros d'Excel
Excel formation - 00 Astuces - 100
 

Dans ce tutoriel, je vais vous montrer comment créer une mise en forme dynamique avancée sur une cellule Excel afin de faire clignoter celle-ci. Pour cela, nous allons voir comment modifier automatiquement la couleur affectée à une cellule de manière répétée, à un intervalle régulier.

 

Téléchargement

Vous pouvez télécharger le fichier d'exemple de cet article en cliquant sur le lien suivant :

This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.
 

 

Tutoriel Vidéo

 

Partie 1 : Comment faire clignoter des cellules Excel ?

 

Partie 2 : Comment faire clignoter des cellules Excel selon un critère ?

 

Partie 3 : Comment faire clignoter toutes les cellules d'une ligne selon un critère ?

 

1. Introduction

Au cours de mes nombreux tutoriels précédents, vous avez été nombreux à me demander s'il était possible de mettre en place une mise en forme conditionnelle capable de faire clignoter une cellule Excel ?

Malheureusement notre tableur préféré ne propose pas une telle fonctionnalité par défaut…

Mais comme vous le savez Excel est extrêmement puissant et il est possible d'ajouter toutes les fonctionnalités que nous pouvons imaginer !

Pour ce tutoriel, nous allons donc découvrir une méthode qui va nous permettre d’arriver à faire clignoter des cellules en fonction d'un critère que nous définirons.

Et pour cela, nous allons évidemment devoir développer une petite macro commande développé en VBA.

Comme d'habitude, nous reviendrons dans le détail sur l'ensemble des lignes de commandes que nous allons mettre en place, mais si vous souhaitez en savoir davantage, vous retrouverez bien entendu sur le blog excelformation.fr et sur ma chaîne YouTube des centaines de tutoriels qui vous permettront d'en apprendre davantage.

 

2. Création de la macro-commande

Pour commencer, nous allons devoir lancer l’éditeur de code VBE, qui est l’outil qui permet de développer des macros commandes en VBA.

Pour cela, il existe plusieurs possibilités et nous allons aller au plus rapide en utilisant le raccourci clavier [Alt]+[F11].

VBA s’ouvre alors directement sur le projet sur lequel nous étions en train de travailler, c’est-à-dire le classeur Excel.

Nous allons commencer par y insérer un nouveau module en nous rendant dans le menu Insertion et en cliquant sur Module.

VBA ajoute alors une feuille blanche dans laquelle nous allons pouvoir saisir les lignes de commandes.

Pour commencer, nous allons créer une nouvelle.

Macro, que nous allons appeler, faireClignoter, en utilisant le mot clé Sub, suivi de ce nom :

Sub faireClignoter()

Lorsque nous validons, en appuyant sur la touche [Entrée] du clavier, Excel la ligne End Sub qui vient marquer la fin de la macro.

Excel formation - faire clignoter texte - 01

Tout ce que nous avons saisi entre ces deux lignes se lancera à chaque fois que nous appellerons la macro faireClignoter.

 

3. Faire clignoter des cellules… manuellement

Maintenant que la macro est créée, nous allons pouvoir y développer son fonctionnement.

Mais avant cela, nous allons revenir sur la feuille de calcul afin de pouvoir y créer une plage de cellules nommées qui nous permettra de manipuler facilement un ensemble de cellules en VBA en les appelant simplement à partir de ce nom.

Pour cela, nous sélectionnons plusieurs cellules, que nous choisissons de manière aléatoire, nous verrons dans une seconde partie comment automatiser la sélection de ces cellules :

Excel formation - faire clignoter texte - 02

Et nous saisissons le nom clignotement dans la zone des noms située en haut à gauche de la barre des formules.

De retour dans notre code, nous pourrons maintenant appeler ces cellules, en saisissant le nom de la plage clignotement entre crochets.

Pour commencer, nous allons modifier la couleur de fond et la couleur de police de ces cellules.

Pour cela, nous allons définir par exemple une couleur de fond rouge et une couleur de police blanche, en utilisant les propriétés Interior.ColorIndex et Font.ColorIndex.

Les index correspondants aux couleurs rouge et blanc sont respectivement le 3 et le 2 :

        [clignotement].Interior.ColorIndex = 3
        [clignotement].Font.ColorIndex = 2

Pour tester, nous pouvons appuyer sur la touche [F5] puis revenir sur la feuille de calculs pour constater qu'effectivement les couleurs des cellules ont été modifiés.

Donc maintenant, pour mettre en place le clignotement, nous allons utiliser une instruction If… Then que nous avions découverte dans un tutoriel précédent et qui permet d'effectuer un test.

Nous allons donc regarder si la première cellule de la plage de cellules clignotement (que - pour rappel - nous récupérons en appelant le nom de la plage nommée entre crochets) a une couleur de fond égal à 3.

Lorsque ce sera le cas, alors nous pourrons supprimer la couleur de fond et redéfinir une couleur de police automatique :

    If [clignotement].Cells(1).Interior.ColorIndex =  3 Then
        [clignotement].Interior.ColorIndex = xlNone
        [clignotement].Font.ColorIndex = xlAutomatic
    End If

En revanche, lorsque ce ne sera pas le cas, nous pourrons modifier les couleurs en rouge et blanc comme nous l'avons fait juste avant en utilisant l’instruction Else :

    If [clignotement].Cells(1).Interior.ColorIndex =  3 Then
        [clignotement].Interior.ColorIndex = xlNone
        [clignotement].Font.ColorIndex = xlAutomatic
    Else
        [clignotement].Interior.ColorIndex = 3
        [clignotement].Font.ColorIndex = 2
    End If

Maintenant, à chaque fois que nous lancerons la macro, les couleurs de cellules alternerons entre ces deux palettes de couleurs.

 

4. Faire clignoter des cellules… automatiquement

Comme vous pouvez le constater, notre macro fonctionne effectivement, mais à condition de relancer la macro manuellement, ce qui n’est évidemment pas une solution aboutie.

Pour automatiser l’opération, nous allons pouvoir utiliser une instruction, Application.OnTime qui permet de lancer une macro commande à un horaire donné.

Ici, nous souhaiterons relancer la macro faireClignoter, au bout d’une seconde :

    Application.OnTime Now +  TimeValue("00:00:01"), "faireClignoter"

Cela a pour effet d’ajouter un enregistrement dans la mémoire d’Excel pour effectuer cette opération le moment venu.

C’est pourquoi, si nous fermons le classeur, mais qu’Excel reste ouvert (par exemple s’il y a d’autres classeurs d’ouverts en même temps), alors ce dernier va rouvrir le classeur dans lequel se trouve la macro pour pouvoir l’exécuter le moment venu.

Voyons maintenant comment corriger ce problème.

En fait, ici, l’objectif sera maintenant de stocker le moment auquel nous souhaitons que la macro soit à nouveau lancée dans une variable.

Seulement étant donné qu’il s’agit d’une variable que nous allons avoir besoin d’utiliser à plusieurs endroits au sein du projet nous allons la définir en tant que variable publique.

Pour cela nous nous rendons au tout début du module de code afin de saisir la ligne suivante :

Public prochainLancement As Double

De cette manière, la portée de cette variable est étendue à l’ensemble du projet, nous pourrons donc l’exploiter comme nous le souhaitons, même en dehors de la macro.

Maintenant, revenons dans la macro faireClignoter.

Puis, juste avant l’instruction Application.OnTIme, nous allons affecter l’heure du prochain lancement de la macro dans la variable prochainLancement que nous venons de créer.

prochainelancement = Now() +  TimeValue("00:00:01")

De cette manière c’est cette variable que nous allons utiliser pour relancer la macro :

    prochaineLancement = Now() +  TimeValue("00:00:01")
    Application.OnTime prochainLancement,  "faireClignoter"

Le fait d’avoir utilisé une variable pour récupérer l’heure exact du lancement de la macro va maintenant nous permet de l’annuler la programmation du prochain lancement en fermant le classeur.

Pour cela nous revenons dans la feuille de code du classeur en double cliquant sur ThisWorkbook, puis nous allons chercher l’événement qui va se lancer automatiquement lorsque nous allons la fermer le classeur, il s’agit de l’événement BeforeClose. Pour l’ajouter, nous faisons comme nous l’avons vu un peu plus tôt : nous commençons par sélectionner WorkBook dans le premier menu déroulant et BeforeClose dans le second menu déroulant.

Une fois que l’événement est ajouté, il suffit de revenir saisir l’instruction Application.OnTime, en effectuant un simple copier-coller depuis la macro faireClignoter :

Private Sub Workbook_BeforeClose(Cancel As  Boolean)
    Application.OnTime prochainLancement,  "faireClignoter"
End Sub

Nous allons maintenant aller un petit peu plus loin dans le renseignement des arguments en donnant au dernier de ces arguments la valeur de False pour permettre d’annuler la planification du relancement de la macro :

Private Sub Workbook_BeforeClose(Cancel As  Boolean)
    Application.OnTime prochainLancement,  "faireClignoter", , False
End Sub

Avant de tester le fonctionnement de la macro faireClignoter, revenons rapidement sur celle-ci afin d'en améliorer le rendu visuel.

Pour cela, nous pouvons en effet insérer une instruction Application.ScreenUpdating qui permet de stopper le rafraîchissement de l'écran.

Nous donnons alors à celle-ci la valeur de False au tout début de la macro, puis nous n’oublions pas de lui redonner la valeur True en fin de la macro, pour que le rafraîchissement puisse se remettre en route par la suite :

Sub faireClignoter()
    Application.ScreenUpdating = False
…
    Application.ScreenUpdating = True
End Sub 

Pour finir, afin d’éviter toutes sortes de problèmes, notamment si nous supprimons par inadvertance la plage de cellules nommée clignotement, nous allons insérer au tout début de la macro une ligne « On Error Resume Next » qui permet, comme nous l'avons déjà vu dans un tutoriel précédent de passer outre toutes les erreurs que le code pourrait rencontrer, afin de continuer le déroulement de la macro :

    On Error Resume Next

 

5. Faire clignoter toute une ligne de tableau

Maintenant nous allons répondre à la question posée par Rom Lef dans les commentaires de la vidéo qui demande s’il est possible d’utiliser non plus une valeur numérique, mais directement un texte saisi dans la cellule :

Excel formation - faire clignoter texte - 02


Pour cela nous allons revenir sur la feuille de calcul, afin d’insérer une nouvelle colonne dans notre tableau qui sera donc située dans la colonne C, et nous allons y insérer la formule suivante :

=SI([@[Ventes  annuels]]<$B$7;"Urgent";"")

Excel formation - faire clignoter texte - 03

De retour dans notre code VBA, plus précisément dans la macro plageAutomatique, nous allons maintenant contrôler si la valeur de la cellule obtenue avec la variable c est égale au terme « Urgent », que nous saisissons entre guillemets étant donné qu’il s’agit d’une chaîne de caractère :

    For Each c In [b10:b26]
        If c = "Urgent" Then
            …
        End If
    Next

Nous allons également modifier l’adresse de la plage des cellules depuis laquelle est extraite la variable c : il ne s’agit plus des cellules de la colonne B, mais maintenant de cellules contenues dans la colonne C :

    For Each c In [c10:c26]
        …
    Next

Et maintenant nous allons vouloir que ce ne soit pas uniquement la cellule concernée, donc retournées par la variable c, qui clignotent mais celles situées sur toute la ligne du tableau.

Pour cela nous allons créer une nouvelle variable que nous allons appeler cLigne, que nous allons typer en tant que Range afin que celle-ci puisse enregistrer une plage de cellules.

Ensuite, nous allons lui affecter toute la ligne sur laquelle se trouve la cellule c. Pour cela, nous allons utiliser l’instruction Intersect qui permet comme nous l’avons vu dans un tutoriel précédent de récupérer les cellules qui se trouvent à l’intersection de plusieurs plages de cellule.

Celle-ci va nous permettre de récupérer les cellules qui se trouvent à l’intersection de l’ensemble de la plage de cellules du tableau et de nous la ligne de la cellule c.

Nous pouvons pas utiliser directement toutes les cellules de la ligne c avec c.EntireRow, car dans ce cas-là ce serait toute la ligne de la feuille de calcul qui serait sélectionnée :

    Dim c As Range, p As Range, cLigne As  Range
    
    For Each c In [c10:c26]
        Set cLigne = Intersect(c.CurrentRegion,  c.EntireRow)
        …
    Next

Maintenant que nous avons cette nouvelle variable nous allons pouvoir l’utiliser lors de l’affectation à la plage de la cellule, à la place de la variable c :

        If c = "Urgent" Then
            If p Is Nothing Then
                Set p = cLigne
            Else
                Set p = Union(p, cLigne)
            End If
        End If

 

6. Faire clignoter les cellules durant un laps de temps

Pour finir nous allons découvrir une autre méthode de fonctionnement qui ne va plus consister à faire clignoter de manière infinie les cellules concernées, nous allons plutôt souhaiter ne les faire clignoter que durant un laps de temps donné, par exemple 4 secondes.

Pour cela, de retour dans la macro faireClignoter, nous allons utiliser une boucle For… Next, qui permet comme nous l’avons vu dans un tutoriel précédent de répéter une opération un certain nombre de fois.

Nous commençons par créer une nouvelle variable i, que nous utiliserons pour la boucle :

    Dim i As Integer
    For i = 1 To 4
    …
    Next

Ensuite à l’intérieur de cette boucle nous allons souhaiter réaliser une pause d’une seconde avant de modifier l’apparence des cellules.

Pour cela, nous allons mettre en place une boucle Do While… Loop.

Pour faire fonctionner cette boucle, nous allons encore créer une variable que nous appelons t (pour « temp »), et dans laquelle nous enregistrons l’horodatage qu’une seconde plus tard :

        Dim t As Double
        t = Now() + TimeValue("00:00:01") 

Ensuite, nous insérons dans cette boucle Do While… Loop l’instruction DoEvents qui permet de ne pas bloquer Excel tant que la macro est en fonctionnement :

        DoEvents 

Pour finir, à la suite de cette boucle, nous venons déplacer les lignes permettant de mettre en place le clignotement :

            Dim i As Integer
    For i = 1 To 3
        Dim t As Double
        t = Now() + TimeValue("00:00:01")
    
        Do While Now < t
            DoEvents
        Loop
        
        If [clignotement].Cells(1).Interior.ColorIndex  = 3 Then
            [clignotement].Interior.ColorIndex =  xlNone
            [clignotement].Font.ColorIndex =  xlAutomatic
        Else
            [clignotement].Interior.ColorIndex = 3
            [clignotement].Font.ColorIndex = 2
        End If
    Next

Il ne reste plus qu’à supprimer les lignes inutiles :

    prochaineLancement = Now() +  TimeValue("00:00:01")
    Application.OnTime prochainLancement,  "faireClignoter"

Ainsi que :

    Application.ScreenUpdating = False    
    Application.ScreenUpdating = True

Pour finir, dans le fonctionnement actuel, nous allons devoir lancer automatiquement la macro lors de chaque modification effectuée sur la feuille, étant donné que celle-ci ne se lance plus de manière infinie comme c’était le cas avant.

Pour cela, nous appellons la macro faireClignoter depuis l’évènement Worksheet_Change, après avoir redéfini la plage de cellules clignotement :

Private Sub Worksheet_Change(ByVal Target As  Range)
    plageAutomatique
    faireClignoter
End Sub

 



Articles qui pourraient vous intéresser

Comment remplir automatiquement des cellules d'un tableau Excel avec la complétion automatique
Comment regrouper (ou pas !) les dates d’un tableau croisé dynamique (TCD) sur Excel ?
Comment connecter Excel sur Internet, sans VBA ?
Comment traduire automatiquement des fonctions Excel dans leur version originale ?
Comment analyser les résultats d’un sondage ou questionnaire avec Excel ?
Comment utiliser la fonction SOMME.SI pour effectuer des recherches sur des textes sur Excel ?
Comment calculer et étudier des écarts budgétaires avec Excel ?
Comment verrouiller et protéger un objet (graphique, image, zone de texte…) sur Excel ?
Comment formater des dates correctement dans Excel ?
Comment protéger le formatage des cellules tout en autorisant la saisie de données dans Excel ?
Comment transformer une photo en tableau Excel ?
Comment créer un publipostage automatique avec Excel ? (sans Word !)

Contact - Plan du site - À propos - Contact

© Excelformation.fr 2018-2024 - Excel, simplement

Haut de la page

Excelformation.fr propose de nombreuses formations pratiques et gratuites sur Microsoft Excel : des cours pour apprendre à structurer et analyser les données, des tutos sur les fonctions avancées, les formules et les formules avancées d'Excel, les formules matricielles, les mise-en-formes conditionnelles, les graphiques Excel (xls, xlsx, xlsm,…). Des tutoriels pour apprendre à automatiser les tâches répétitives (via des macro-commandes en VBA) de vos classeurs Excel.