Microsoft 365 VBA : faire clignoter une forme

vby

XLDnaute Nouveau
Bonjour Cher Forum,

Je sollicite votre appui pour faire clignoter cette forme (ATELIER INTERNE) dans la feuille SOMMAIRE. Vous avez en joint le fichier concerné.
Je voudrais qu'à l'ouverture du fichier que cette forme clignote en orange quelques secondes pour montrer que c'est une nouveauté.

J'ai travaillé avec ce code mais ca ne marche pas :
VB:
Private TimerID As Long ' Utilisé pour stocker l'ID de la minuterie
Private Const DureeClignotement As Double = 1 ' Durée d'affichage de la forme en secondes

Private Sub Workbook_Open()
    Application.DisplayFullScreen = True

    'Définir le zoom pour chaque feuille
    Dim ws As Worksheet
    For Each ws In ThisWorkbook.Worksheets
        Select Case ws.Name
            Case "SOMMAIRE"
                ws.Activate
                ActiveWindow.Zoom = 33
            Case "BASE DE DONNEES"
                ws.Activate
                ActiveWindow.Zoom = 55
            Case "BASE2"
                ws.Activate
                ActiveWindow.Zoom = 100
            Case "BASE1"
                ws.Activate
                ActiveWindow.Zoom = 100
            Case "INDICATEURS CLES DE PERFORMANCE"
                ws.Activate
                ActiveWindow.Zoom = 66
            Case "KPI-1"
                ws.Activate
                ActiveWindow.Zoom = 82
            Case "KPI-2"
                ws.Activate
                ActiveWindow.Zoom = 73
            Case "KPI-3"
                ws.Activate
                ActiveWindow.Zoom = 78
            Case "KPI-4"
                ws.Activate
                ActiveWindow.Zoom = 77
            Case "KPI-5"
                ws.Activate
                ActiveWindow.Zoom = 77
            Case "KPI-6"
                ws.Activate
                ActiveWindow.Zoom = 66
            Case "KPI-7"
                ws.Activate
                ActiveWindow.Zoom = 91
            Case "KPI-8"
                ws.Activate
                ActiveWindow.Zoom = 66
            Case "TOS"
                ws.Activate
                ActiveWindow.Zoom = 87
            Case "ACTIVITE"
                ws.Activate
                ActiveWindow.Zoom = 87
            Case "ATELIER INTERNE"
                ws.Activate
                ActiveWindow.Zoom = 87
            Case "SECTEUR"
                ws.Activate
                ActiveWindow.Zoom = 77
        End Select
    Next ws

    'Modifier nom de la feuille à protéger et le mot de passe
    Sheets("SOMMAIRE").Protect password:="adminn"
    Sheets("BASE DE DONNEES").Protect password:="passer"
    Sheets("BASE2").Protect password:="adminn"
    Sheets("BASE1").Protect password:="adminn"
    Sheets("BASE3").Protect password:="adminn"
    Sheets("INDICATEURS CLES DE PERFORMANCE").Protect password:="adminn"
    Sheets("KPI-1").Protect password:="adminn"
    Sheets("KPI-2").Protect password:="adminn"
    Sheets("KPI-3").Protect password:="adminn"
    Sheets("KPI-4").Protect password:="adminn"
    Sheets("KPI-5").Protect password:="adminn"
    Sheets("KPI-6").Protect password:="adminn"
    Sheets("KPI-7").Protect password:="adminn"
    Sheets("KPI-8").Protect password:="adminn"

    'Activer la feuille SOMMAIRE
    Sheets("SOMMAIRE").Activate

    'Démarrez le clignotement
    Call ClignoterForme
End Sub

Sub ClignoterForme()
    Dim ws As Worksheet
    Dim shp As Shape

    Set ws = ThisWorkbook.Sheets("SOMMAIRE")

    ' Recherchez la forme "ATELIER INTERNE" dans la feuille SOMMAIRE
    For Each shp In ws.Shapes
        If shp.Name = "ATELIER INTERNE" Then
            ' Inverser la visibilité de la forme
            shp.Visible = Not shp.Visible
            Exit For
        End If
    Next shp

    ' Planifier la prochaine exécution de la procédure ClignoterForme
    TimerID = Application.OnTime(Now + TimeSerial(0, 0, DureeClignotement), "ClignoterForme")
End Sub

Private Sub Workbook_BeforeClose(Cancel As Boolean)
    ' Annuler l'exécution planifiée de la procédure ClignoterForme
    On Error Resume Next
    Application.OnTime EarliestTime:=Now + TimeSerial(0, 0, DureeClignotement), Procedure:="ClignoterForme", Schedule:=False
    On Error GoTo 0
End Sub

Sub ShowScrollBars()
    Dim ws As Worksheet

    For Each ws In ThisWorkbook.Worksheets
        ' Définir la zone de défilement pour inclure toutes les cellules
        ws.ScrollArea = ""
        ' Activer la barre de défilement vertical et horizontal
        ws.ScrollBars = xlBoth
    Next ws
End Sub


Merci d'avance pour votre appui !
 

Pièces jointes

  • Dashboard (2).xlsm
    346.6 KB · Affichages: 5

Oneida

XLDnaute Impliqué
Bonjour,
Aucune Shape a pour nom ATELIER INTERNE, donc pas marche

J'ai donc renommer la Shape avec le texte ATELIER INTERNE avec ce texte et ca clignote visible/pas visible
J'ai aussi mis la procedure Clignoter..... dans un module avec quelques modifs

clignote en orange quelques secondes
Pouvez expliquer un peu plus?
 

Pièces jointes

  • Dashboard (2).xlsm
    387.2 KB · Affichages: 15

vby

XLDnaute Nouveau
Merci beaucoup @Oneida, ca marche.

J'ai voulu le réappliquer pour d'autres formes mais je n'y arrive je ne sais pas trop ce que tu as fait pour que ca réussisse.

J'ai vu le module clignote de que tu as créer et je l'ai dupliqué pour aboutir au même résultat mais je ne sais ce que tu as fait d'autres.

Pour la couleur Orange, comme la couleur de la forme est bleu, je voulais que en clignotant elle apparait en Orange un certain temps avant de revenir à la couleur initiale bleu.

Encore merci beaucoup pour l'appui !
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonjour @vby :), à tous :),

Pour le fun une méthode que je n'avais jamais écrite.
Dans module1, on trouve les macros associées à chaque bouton.
Le code du clignotement est dans le module de la feuille "Sommaire" :
VB:
Private Sub Worksheet_Activate()
Const duree = 0.75
Dim orange, bleu, i&, fin
   orange = RGB(255, 153, 0): bleu = RGB(47, 85, 151)
   Do
      Me.Shapes("ATELIER INTERNE").Fill.ForeColor.RGB = bleu
      fin = Timer + duree
      Do While Timer < fin: DoEvents: Loop
      Me.Shapes("ATELIER INTERNE").Fill.ForeColor.RGB = orange
      fin = Timer + duree
      Do While Timer < fin: DoEvents: Loop
      If ActiveCell.Parent.Name <> "SOMMAIRE" Then Exit Sub
   Loop
End Sub
 

Pièces jointes

  • vby- Dashboard (2)- v1.xlsm
    352.4 KB · Affichages: 9
Dernière édition:

Oneida

XLDnaute Impliqué
Bonjour mapomme,
Ca roule?

vby:
Ai modifie le fichier de mapomme pour clignotement a l'ouverture du classeur.
Temps clignotant: 10 secondes parametrable dans module2 CignoteShape
 

Pièces jointes

  • vby- Dashboard (2)- v1.xlsm
    386.6 KB · Affichages: 9

patricktoulon

XLDnaute Barbatruc
bonsoir à tous
pour le fun je vous l'ai fait en un seul do/loop
on contrôle toujours l'intervalle et la durrée

VB:
Sub ClignoteShape2()
    Dim orange&, bleu&, t#, nt#, Tmp_Clignote#
    Const Intervalle = 0.5   'echantillonage
    orange = RGB(255, 153, 0)
    bleu = RGB(47, 85, 151)
    t = Timer
    nt = Timer
    Tmp_Clignote = t + 10       '10 secondes
    With Worksheets("SOMMAIRE").Shapes("ATELIER INTERNE")
        Do While t <= Tmp_Clignote And ActiveSheet.Name = "SOMMAIRE"
            x = Timer - nt
            If x > Intervalle Then
                .Fill.ForeColor.RGB = Array(bleu, orange)(Abs(.Fill.ForeColor.RGB = bleu))
                nt = Timer
            End If
            DoEvents
            t = Timer
        Loop
        .Fill.ForeColor.RGB = bleu
    End With
End Sub
 

Statistiques des forums

Discussions
312 111
Messages
2 085 396
Membres
102 882
dernier inscrit
Sultan94