Incorporer une durée dans le (Sub ""_click) d'un bouton

SE44fr Messages postés 32 Statut Membre -  
cs_Le Pivert Messages postés 8437 Statut Contributeur -
Bonjour au forum,

Je voudrais incorporer une durée (de 2 secondes) dans le code d'un bouton situé dans un userform.

La durée dans ce code me permettrai de changer la couleurdu contour du bouton (vérification visuelle du clic) puis remettre la couleur de ce contour 2 secondes plus tard...
J'ai donc écrit cela :

--------------------------------------------------

Private Sub CommandButton23_Click()

CommandButton12.Locked = False
CommandButton14.Locked = False
CommandButton23.BackColor = vbWhite
Application.OnTime Now, TimeValue("00:00:02")
CommandButton23.BackColor = vbBlack

End Sub
--------------------------------------------------

Effectivement, j'ai écris le paramètre backcolor pour le moment.
Le problème vient du "Application.OnTime", même s'il ne m'affiche pas d'erreur, le fond reste noir au lieu de devenir blanc pendant 2 secondes. Enfin j'ai du mal l'écrire...

Merci d'avance,

Cordialement.

--
SE

4 réponses

  1. Frenchie83 Messages postés 2254 Statut Membre 339
     
    Bonjour
    Essayez ceci
        CommandButton23.BackColor = vbBlack
        Application.Wait Now + TimeValue("00:00:02")
        CommandButton23.BackColor = vbWhite
    

    Cdlt
    1
    1. SE44fr Messages postés 32 Statut Membre 2
       
      Merci à Frenchie83 et NHenry !

      Grâce à vous deux j'ai réussi a faire ce que je voulais,
      Et concrètement, si quelqu'un est intéressé, ça donne cela :
      ---------------------------------------------------------
      Private Sub CommandButton23_Click()

      CommandButton12.Locked = False
      CommandButton14.Locked = False
      CommandButton23.ForeColor = &HC0C0&
      CommandButton12.ForeColor = &HC0C0&
      CommandButton14.ForeColor = &HC0C0&
      DoEvents
      Application.Wait Now + TimeValue("00:00:01")
      DoEvents
      CommandButton23.ForeColor = &HFFC0C0

      End Sub
      ---------------------------------------------------------

      Avec d'autre commandes sur les boutons 12 et 14 pour rétablir après une action.

      Encore merci !

      Cordialement,
      SE.
      0
  2. NHenry Messages postés 15235 Date d'inscription   Statut Modérateur Dernière intervention   387
     
    Regardes l'instruction DoEvents entre autre.
    0
    1. SE44fr Messages postés 32 Statut Membre 2
       
      Merci pour cette piste NHenry,
      Il semble bien que l'on peut associer DoEvents avec .OnTime ou Timer Envents dans une fonction, mais les exemple d'application de ces formules que j'ai pu trouver et tenté d'adapter ne fonctionne pas, il est très probable que cela vienne de moi puisque je maitrise à peine les bases en vba, mais j'apprends avec le temps...
      Je me demande s'il n'existe pas un moyen plus simple pour faire clignoter la bordure d'un bouton de formulaire après un click ?
      Cordialement,
      SE
      0
    2. NHenry Messages postés 15235 Date d'inscription   Statut Modérateur Dernière intervention   387
       
      Il faut appeler DoEvents avant et après ta pause.
      0
    3. SE44fr Messages postés 32 Statut Membre 2
       
      Merci NHenry, le code fonctionne désormais !

      Cordialement,
      SE.
      0
  3. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
     
    Bonjour à tous,

    Si tu veux faire clignoter plusieurs fois:

    Option Explicit
    Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
    Private Sub CommandButton1_Click()
    clignbouton
    End Sub
    Sub clignbouton()
     Dim i As Byte
     For i = 1 To 5 'nombre de clignotements
     Sleep (200)  '1000 = 1 seconde
     DoEvents
     CommandButton1.ForeColor = vbBlue
     CommandButton1.BackColor = vbRed
     Sleep (200)
     DoEvents
     CommandButton1.ForeColor = vbRed
     CommandButton1.BackColor = vbBlue
     Next i
     End Sub

    0
    1. SE44fr Messages postés 32 Statut Membre 2
       
      Bonjour cs_Le Pivert, et merci cet exemple de code,
      Excusé moi de vous répondre avec un peu de retard, je suis un peu débordé en ce moment...
      J'ai bien regardé votre code pour faire clignoter plusieurs fois le fond et le texte d'un bouton, cela dit je n'ai pas eu le temps de le mettre en pratique pour bien le comprendre (étant encore novice en vba...)

      Je comprend bien la boucle de commande qui se répète le nombre de fois voulues, c'est plutôt les 2 premières lignes qui m'intrigue, et le fait que vous séparez le code de clignotement de la commande "click" du bouton en l'appelant par la fonction, il doit y avoir une bonne raison et comme je met toujours le code dans la commande du bouton directement cela m’inquiète un peu.

      Je reviendrai faire un retour lorsque j'aurai tester et bien compris ce code.

      Cordialement,
      SE.
      0
  4. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
     
    On peut mettre ce code directement dans le bouton. Là on appelle une macro, c'est une habitude que j'ai pris. Quand on veut se servir d'une macro plusieurs fois. Dans ce cas cela n'est pas possible car le bouton est nommé.

    Voilà
    0
    1. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
       
      En appelant cette macro, tu peux faire clignoter ton bouton sans cliquer dessus!
      0