IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Cellule qui clignote pendant un temps limité


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Homme Profil pro
    EPSECO
    Inscrit en
    Juin 2017
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Dordogne (Aquitaine)

    Informations professionnelles :
    Activité : EPSECO
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2017
    Messages : 108
    Points : 54
    Points
    54
    Par défaut Cellule qui clignote pendant un temps limité
    Bonjour à, tous,
    Je vous communique ci-dessous un code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
    Public Tempo As Date
    Sub clignotant()
    Dim R As Range
    Dim l As Long
    Set R = ActiveSheet.UsedRange
    For l = 2 To R.Rows.Count
        If R(l, 1) = Date Then
            R(l, 1).Offset(0, 1) = ""
        Else
            R(l, 1).Offset(0, 1) = "Attention!"
            R(l, 1).Offset(0, 1).Font.Bold = True
            R(l, 1).Offset(0, 1).Font.Color = -16776961
            If R(l, 1).Offset(0, 1).Font.Size = 11 Then R(l, 1).Offset(0, 1).Font.Size = 20 Else R(l, 1).Offset(0, 1).Font.Size = 11
     
        End If
      DoEvents
    Next
    Tempo = Now + TimeValue("00:00:01")
    Application.OnTime Tempo, "clignotant"
    End Sub
    Je voudrais que la cellule clignote pendant seulement 1 minute et ensuite s'arrête toute seule sans intervention de ma part.
    Merci pour votre aide (je pense notamment à ARTURO83)

  2. #2
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    Sub clignotant()
        Dim Plage As Range
        Dim R As Range
     
        Set Plage = Intersect(ActiveSheet.UsedRange, Columns(1))
        For Each R In Plage
            With R.Offset(0, 1)
            If R.Value = Date Then
                .Value = IIf(.Row=1, .Value, "")
            Else
                .Value = "Attention!"
                .Font.Bold = True
                .Font.Color = -16776961
            End If
        Next R
        Call clignotantNext(Now() + TimeValue("00:01:00"))
    End Sub
     
    Sub clignotantNext(Fin As Date)
        Dim Plage As Range
        Dim R As Range
        Dim Tempo As Date
     
        Set Plage = Intersect(ActiveSheet.UsedRange, Columns(1))
        For Each R In Plage
            If R.Value <> Date And R.Row > 1 Then R.Offset(0, 1).Font.Size = 31 - R.Offset(0, 1).Font.Size
        Next R
        DoEvents
        Tempo = Now + TimeValue("00:00:01")
        If Tempo < Fin Then Application.OnTime Tempo, "clignotantNext(" & Fin & ")"
    End Sub
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  3. #3
    Membre émérite Avatar de Zekraoui_Jakani
    Homme Profil pro
    Inscrit en
    Novembre 2013
    Messages
    1 670
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 670
    Points : 2 489
    Points
    2 489
    Par défaut
    J'aime bien la solution proposée par Menhir, et j'avais préparé aussi presque en même temps une solution plutôt intuitive:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    Private Sub CommandButton1_Click()  'lié à un bouton créé sur ActiveSheet
        NewClignotant
    End Sub
     
    Sub NewClignotant()
     
        Dim R As Range
        Dim j As Long
        Dim freq As Long: freq = 240    'à faire varier à souhait
     
        Set R = ActiveSheet.UsedRange
     
        For j = 2 To R.Rows.Count
            If R(j, 1) = Date Then
            R(j, 1).Offset(0, 1) = ""
            Else
                With R(j, 1).Offset(0, 1)
                    .Value = "Attention!"
                    .Font.Bold = True
                    .Font.Color = -16776961
                    If .Font.Size = 11 Then .Font.Size = 20
                End With
            End If
     
            For k = 1 To freq
                R(j, 1).Offset(0, 1).NumberFormat = ";;;"
                DoEvents
                R(j, 1).Offset(0, 1).NumberFormat = "General"
            Next k
        Next j
     
    End Sub

  4. #4
    Membre du Club
    Homme Profil pro
    EPSECO
    Inscrit en
    Juin 2017
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Dordogne (Aquitaine)

    Informations professionnelles :
    Activité : EPSECO
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2017
    Messages : 108
    Points : 54
    Points
    54
    Par défaut Erreur ...
    J'ai un message d'erreur dans un MsgBox lorsque j'applique tel quel le Code de Menhir:

    Erreur de compilation
    Next sans For

    OK Aide

    Que fais-je ?
    EAU24

  5. #5
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Citation Envoyé par EAU24 Voir le message
    J'ai un message d'erreur dans un MsgBox lorsque j'applique tel quel le Code de Menhir:

    Que fais-je ?
    Bin... tu essayes de débuguer.

    Et tu commences par virer le On Error qui se trouve certainement dans ton code et qui empêche de savoir sur quelle ligne se produit le bug.
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  6. #6
    Membre du Club
    Homme Profil pro
    EPSECO
    Inscrit en
    Juin 2017
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Dordogne (Aquitaine)

    Informations professionnelles :
    Activité : EPSECO
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2017
    Messages : 108
    Points : 54
    Points
    54
    Par défaut
    Citation Envoyé par Menhir Voir le message
    Bin... tu essayes de débuguer.

    Et tu commences par virer le On Error qui se trouve certainement dans ton code et qui empêche de savoir sur quelle ligne se produit le bug.
    J'ai pas dans le code "On Error" désoled....

  7. #7
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Citation Envoyé par EAU24 Voir le message
    J'ai pas dans le code "On Error" désoled....
    Alors comment se fait-il que les messages d'erreur s'ouvrent dans une MsgBox ?
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  8. #8
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 924
    Points
    55 924
    Billets dans le blog
    131
    Par défaut
    Salut.

    Si tu as des On Error... dans ton code (ce que je n'ai pas vu mais qui a été suggéré), il est préférable d'apprendre à bien les coder plutôt que les virer

    Indente ton code, ce sera plus clair pour identifier les blocs... (décaler vers la droite les lignes qui font partie d'un bloc...)
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  9. #9
    Membre du Club
    Homme Profil pro
    EPSECO
    Inscrit en
    Juin 2017
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Dordogne (Aquitaine)

    Informations professionnelles :
    Activité : EPSECO
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2017
    Messages : 108
    Points : 54
    Points
    54
    Par défaut
    Citation Envoyé par Pierre Fauconnier Voir le message
    Salut.

    Si tu as des On Error... dans ton code (ce que je n'ai pas vu mais qui a été suggéré), il est préférable d'apprendre à bien les coder plutôt que les virer

    Indente ton code, ce sera plus clair pour identifier les blocs... (décaler vers la droite les lignes qui font partie d'un bloc...)
    Bonsoir,
    Le Code que j'ai affiché (avec des #) tout en haut, fonctionne très bien. Mais je dois créer deux boutons : un pour lancer l'application l'autre pour stop l'application.
    Donc pour revenir à ma première question : je souhaite supprimer le bouton "Stop" et que le clignotement une fois lancée s'arrête tout seul au bout d'une minute.

    C'est pas compliqué...
    Merci

  10. #10
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 924
    Points
    55 924
    Billets dans le blog
    131
    Par défaut
    @Menhir,

    Il manque End With juste avant Next R. Le msgbox dont parle Eau24 est le message qui s'affiche à cause de cette ligne manquante. De plus, ton code bogue chez moi au premier appel récursif de ClignotantNext. Voici ce que dit l'aide sur OnTime : Procedure ne doit prendre aucun argument et ne peut pas être déclarée dans une classe ou un formulaire personnalisé.

    Ce code a-t-il été testé?

    @Zekraoui,

    Il manque la déclaration de la variable k, le code a-t-il été testé avec Option Explicit?
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  11. #11
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 924
    Points
    55 924
    Billets dans le blog
    131
    Par défaut
    Voilà la solution de menhir corrigée, à l'aide d'une variable publique

    Code vba : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    Dim Fin As Date
     
    Sub clignotant()
        Dim Plage As Range
        Dim R As Range
     
        Set Plage = Intersect(ActiveSheet.UsedRange, Columns(1))
        For Each R In Plage
            With R.Offset(0, 1)
              If R.Value = Date Then
                  .Value = IIf(.Row = 1, .Value, "")
              Else
                  .Value = "Attention!"
                  .Font.Bold = True
                  .Font.Color = -16776961
              End If
            End With
        Next R
        Fin = Now() + TimeValue("00:01:00")
        Call clignotantNext
    End Sub
     
    Sub clignotantNext()
        Dim Plage As Range
        Dim R As Range
        Dim Tempo As Date
     
        Set Plage = Intersect(ActiveSheet.UsedRange, Columns(1))
        For Each R In Plage
            If R.Value <> Date And R.Row > 1 Then R.Offset(0, 1).Font.Size = 31 - R.Offset(0, 1).Font.Size
        Next R
        DoEvents
        Tempo = Now + TimeValue("00:00:01")
        If Tempo < Fin Then Application.OnTime Tempo, "clignotantNext"
    End Sub

    J'espère n'avoir jamais à travailler avec un truc qui me fait cela à l'écran, ceci dit...

    A cause de l'utilisation de la variable publique (que perso je n'aime pas utiliser) dans la solution de menhir, je préfère celle de Zakraoui.

    Sur le fond, je me pose la question de l'utilité de faire clignoter une cellule ou une plage de cellules dans Excel (bonjour les yeux), surtout pendant 1 minute. C'est exagérément long, 1 minute.
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  12. #12
    Expert confirmé Avatar de Patrice740
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2007
    Messages
    2 475
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 475
    Points : 5 630
    Points
    5 630
    Par défaut
    Bonjour Pierre,
    Citation Envoyé par Pierre Fauconnier Voir le message
    Sur le fond, je me pose la question de l'utilité de faire clignoter une cellule ou une plage de cellules dans Excel (bonjour les yeux), surtout pendant 1 minute. C'est exagérément long, 1 minute.
    C'est bientôt Noël ... cette année on va manquer de sapins à cause de la sécheresse

    Outre les variables publiques, j'évite aussi les objets actifs (ici Activesheet), en 1 minute, on peut changer de feuille avec des conséquences inattendues.
    Cordialement,
    Patrice
    Personne ne peut détenir tout le savoir, c'est pour ça qu'on le partage.

    Pour dire merci, cliquer sur et quand la discussion est finie, penser à cliquer sur

  13. #13
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Entièrement d'accord avec vous deux.
    Les possibilités des mises en forme conditionnelles sont largement suffisantes pour mettre en évidence des cellules sans se compliquer la vie avec de pareilles acrobaties.
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  14. #14
    Membre du Club
    Homme Profil pro
    EPSECO
    Inscrit en
    Juin 2017
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Dordogne (Aquitaine)

    Informations professionnelles :
    Activité : EPSECO
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2017
    Messages : 108
    Points : 54
    Points
    54
    Par défaut Merci
    Grand Merci à Pierre Fauconnier.
    Je rentre de voyage et avec le décalage horaire c'est pas facile.
    Cela fonctionne. Mais si je veux introduire un Private Sub Worksheet_Change (ByVal Target As Range) pour que le module se mette en route lorsque la date indiquée n'est pas celle du système.
    il ne se passe rien.
    Merci encore
    EAU24

  15. #15
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Citation Envoyé par EAU24 Voir le message
    Cela fonctionne. Mais si je veux introduire un Private Sub Worksheet_Change (ByVal Target As Range) pour que le module se mette en route lorsque la date indiquée n'est pas celle du système.
    il ne se passe rien.
    Si tu ne montres pas le code que tu utilises, difficile de savoir où se trouve le problème.
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  16. #16
    Membre du Club
    Homme Profil pro
    EPSECO
    Inscrit en
    Juin 2017
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Dordogne (Aquitaine)

    Informations professionnelles :
    Activité : EPSECO
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2017
    Messages : 108
    Points : 54
    Points
    54
    Par défaut Réponse à Mehnir
    Le Code est en haut, c'est celui de Pierre Fauconnier.
    EAU24

Discussions similaires

  1. [XL-2010] Cellule qui clignote si doublon
    Par facteur dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 29/12/2017, 16h08
  2. Clignoter une cellule qui est orange
    Par Tom_2_Rouen dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 28/09/2017, 16h29
  3. [XL-2010] Cellule qui se colorie sous conditions puis clignote jusqu’à condition remplie
    Par diss10 dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 19/04/2017, 14h17
  4. cellules qui clignotent en fonction d'une plage horaire
    Par serial-liqueur dans le forum Général VBA
    Réponses: 3
    Dernier message: 10/11/2015, 00h02
  5. Cellule qui clignote en Excel
    Par NEC14 dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 07/10/2013, 14h52

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo