XL 2016 Mettre le mois actif en clignotement

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Dennnisss

XLDnaute Occasionnel
Bonjour j'ai modifier mon user au minimum , lorsque j'entre mes données de vélo j'aimerais que le mois actif dans ce cas ici c'est avril , j'ai mit 12 la valeur par defaut j'ai mit a intérieur de mon user un petit test trouver sur le site mais vue que c'est une boucle il tourne en rond , alors besoin de votre aide svp ,, mon besoin est que le mois clignote selon la date(mois) ou je suis rendu durant mon année ,,, merci de votre aide
 

Pièces jointes

Salut Dennnisss,

Si j'ai bien compris, voici le fichier avec le code qu'il faut 😉
Dans l'USF
VB:
Private Sub UserForm_Activate()
  Dim IndLbl As Integer
  IndLbl = 325 + Month(Date)
  Call FaireClignoter(Me.Controls("Label" & IndLbl), 3) ' Clignoter pendant 3 secondes
End Sub

Dans le module
Code:
Private Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As LongPtr)

Sub FaireClignoter(Lb As MSForms.Label, dureeEnSecondes As Integer)
  Dim tempsDebut As Single
  Dim clignotes As Boolean
  clignotes = False
  tempsDebut = Timer
 
  Do While Timer < tempsDebut + dureeEnSecondes
    If clignotes Then
      Lb.Visible = True
    Else
      Lb.Visible = False
    End If
    clignotes = Not clignotes
    DoEvents
    Sleep 300                                    ' Delai en millisecondes (300 ms)
  Loop
  Lb.Visible = True                              ' S'assurer que le Label reste visible à la fin
End Sub

A+
 

Pièces jointes

Bonjour, grillé sur le fil : à rajouter à l'userform ( comme @Xl60PassionFr )
VB:
Option Compare Text
Private Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Private Sub UserForm_Activate()
Dim Ctl As Control, N As Integer
    For Each Ctl In Me.Controls
        If MonthName(Month(Now)) Like Ctl.Caption & "*" Then
            For N = 1 To 10 ' nombre de clignotements
                Ctl.Visible = Not Ctl.Visible
                Me.Repaint ' C'est l'userform entier qui est reconstruit sinon il n'est pas affiché
                Sleep 600  ' durée d'affichage en milisecondes
            Next
            Ctl.Visible = True
            Exit For
        End If
    Next
End Sub
 
Dernière édition:
Salut Dennnisss,

Si j'ai bien compris, voici le fichier avec le code qu'il faut 😉
Dans l'USF
VB:
Private Sub UserForm_Activate()
  Dim IndLbl As Integer
  IndLbl = 325 + Month(Date)
  Call FaireClignoter(Me.Controls("Label" & IndLbl), 3) ' Clignoter pendant 3 secondes
End Sub

Dans le module
Code:
Private Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As LongPtr)

Sub FaireClignoter(Lb As MSForms.Label, dureeEnSecondes As Integer)
  Dim tempsDebut As Single
  Dim clignotes As Boolean
  clignotes = False
  tempsDebut = Timer
 
  Do While Timer < tempsDebut + dureeEnSecondes
    If clignotes Then
      Lb.Visible = True
    Else
      Lb.Visible = False
    End If
    clignotes = Not clignotes
    DoEvents
    Sleep 300                                    ' Delai en millisecondes (300 ms)
  Loop
  Lb.Visible = True                              ' S'assurer que le Label reste visible à la fin
End Sub

A+
Bonjour Mrs X160 passion Fr ,,,, merci pour ton aide oui sa va très bien moi j'ai juste modifier la vitesse des micros seconde a 600 et le nombre de clignotement a 20 environ ,,,, juste comme ca voici le code dont je me pose la question ( Call FaireClignoter(Me.Controls("Label" & IndLbl), 20),,,, si je veut qu'il clignote sans arrêt que dois-je mettre a la place de 20 cligno ,,,,, merci pour ton code et bonne journée a toi dennnisss
 
Bonsoir.
Si ça doit clignoter indéfiniment, pour ne pas empêcher l'UserForm de fonctionner, utilisez un objet Rythmeur du classeur joint. Initialisez le dans Sub UserForm_Initialyze et lancez le dans la Sub Userform_Activate. Implantez dans le projet VBA de votre classeur le module de classe Rythmeur et aussi le module standard de service interne XRythmeur.
 

Pièces jointes

Notez que pour faire clignoter 2 fois plus rapidement le label du nom de mois en cours vous pouvez écrire la Sub UserForm_Activate comme ça :
VB:
Private Sub UserForm_Activate()
   Set CTrl = Me("Label" & Month(Date) + 325)
   RythClign.Lancer 4
   End Sub
 
Bonjour, grillé sur le fil : à rajouter à l'userform ( comme @Xl60PassionFr )
VB:
Option Compare Text
Private Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Private Sub UserForm_Activate()
Dim Ctl As Control, N As Integer
    For Each Ctl In Me.Controls
        If MonthName(Month(Now)) Like Ctl.Caption & "*" Then
            For N = 1 To 10 ' nombre de clignotements
                Ctl.Visible = Not Ctl.Visible
                Me.Repaint ' C'est l'userform entier qui est reconstruit sinon il n'est pas affiché
                Sleep 600  ' durée d'affichage en milisecondes
            Next
            Ctl.Visible = True
            Exit For
        End If
    Next
End Sub

Bonjour, grillé sur le fil : à rajouter à l'userform ( comme @Xl60PassionFr )
VB:
Option Compare Text
Private Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Private Sub UserForm_Activate()
Dim Ctl As Control, N As Integer
    For Each Ctl In Me.Controls
        If MonthName(Month(Now)) Like Ctl.Caption & "*" Then
            For N = 1 To 10 ' nombre de clignotements
                Ctl.Visible = Not Ctl.Visible
                Me.Repaint ' C'est l'userform entier qui est reconstruit sinon il n'est pas affiché
                Sleep 600  ' durée d'affichage en milisecondes
            Next
            Ctl.Visible = True
            Exit For
        End If
    Next
End Sub
Merci a toi fanch55 dossier résolu merci beaucoup de votre aide elle est très apprécié bonne soirée
 
Merci a toi fanch55 dossier résolu merci beaucoup de votre aide elle est très apprécié bonne soirée
Salut,
A noter qu'avec le code de fanch55 :
1 - On ne peut pas fermer le formulaire pendant le clignotement.
2 - Il repeint tout le formulaire ce qui peut faire un effet de "scintillement" sur celui-ci
Voici un code qui :
1 - Ne repeint que le mois qui clignote
2 - Permet de fermer le formulaire pendant le clignotement.
VB:
Private Sub UserForm_Activate()
Dim Ctl As Control, N As Integer
    For Each Ctl In Me.Controls
        If MonthName(Month(Now)) Like Ctl.Caption & "*" Then
            For N = 1 To 10 ' nombre de clignotements
                Ctl.Visible = Not Ctl.Visible
                DoEvents
                Sleep 600  ' durée d'affichage en milisecondes
            Next
            Ctl.Visible = True
            Exit For
        End If
    Next
End Sub
J'ai remplacé le Me.repaint par un DoEvents. Celui-ci a deux actions :
1 - Il permet de prendre en compte les actions sur le formulaire dans la boucle.
2 - Il repeint le contrôle mois car la propriété visible de celui-ci a été modifiée donc génére un rafraichissement.

Le code de Dranreb fonctionne bien aussi.

Nullosse
 
Bonjour le forum,

Pas besoin d'une API Windows ou d'un Rythmeur, de simples boucles d'attente sur le Timer suffisent :
VB:
Private Sub CommandButton1_Click()
Dim delai, c As Control, dat, t
delai = 0.5 'délai d'attente en seconde
With Ouverture
    .Show 0 'non modal
    For Each c In .Controls
        If c.Name Like "Label*" And Val(c) = 0 Then _
            dat = "1/" & c: If Month(dat) = Month(Date) Then Exit For
    Next c
End With
While UserForms.Count 'tant que l'UserForm est ouvert
    If UserForms.Count Then c.Visible = False
    t = Timer + delai
    While Timer < t And t < 86400: DoEvents: Wend 'attente
    If UserForms.Count Then c.Visible = True
    t = Timer + delai
    While Timer < t And t < 86400: DoEvents: Wend 'attente
Wend
End Sub
Nota : j'ai ajouté les accents sur les Labels de Fév, Août, Déc.

A+
 

Pièces jointes

Dernière édition:
bonjour,
 
Bonjour le forum,

Pas besoin d'une API Windows ou d'un Rythmeur, de simples boucles d'attente sur le Timer suffisent :
Code:
Do
    c.Visible = False
    t = Timer + delai
    While Timer < t And t < 86400: DoEvents: Wend 'attente
    c.Visible = True
    t = Timer + delai
    While Timer < t And t < 86400: DoEvents: Wend 'attente
Loop
Salut,
c'est bien gentil de ne pas utiliser les API, mais tes boucles sont énergivores. Sur ma machine quand le clignotement est actif, Excel consomme 8% de CPU ce qui correspond à 80% sur un Core du CPU. Dans la version fanch55 avec le sleep , Excel est entre 0 et 1% pendant le clignotement.
Nullosse
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
7
Affichages
559
Retour