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

Fermé
SE44fr Messages postés 29 Date d'inscription mercredi 5 août 2015 Statut Membre Dernière intervention 29 novembre 2015 - 23 nov. 2015 à 21:39
cs_Le Pivert Messages postés 7904 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 14 août 2024 - 29 nov. 2015 à 17:55
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.

4 réponses

Frenchie83 Messages postés 2240 Date d'inscription lundi 6 mai 2013 Statut Membre Dernière intervention 11 août 2023 338
24 nov. 2015 à 04:08
Bonjour
Essayez ceci
    CommandButton23.BackColor = vbBlack
    Application.Wait Now + TimeValue("00:00:02")
    CommandButton23.BackColor = vbWhite

Cdlt
1
SE44fr Messages postés 29 Date d'inscription mercredi 5 août 2015 Statut Membre Dernière intervention 29 novembre 2015 2
24 nov. 2015 à 23:02
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
NHenry Messages postés 15164 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 27 novembre 2024 345
23 nov. 2015 à 21:44
Regardes l'instruction DoEvents entre autre.
0
SE44fr Messages postés 29 Date d'inscription mercredi 5 août 2015 Statut Membre Dernière intervention 29 novembre 2015 2
24 nov. 2015 à 00:44
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
NHenry Messages postés 15164 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 27 novembre 2024 345
24 nov. 2015 à 21:57
Il faut appeler DoEvents avant et après ta pause.
0
SE44fr Messages postés 29 Date d'inscription mercredi 5 août 2015 Statut Membre Dernière intervention 29 novembre 2015 2
24 nov. 2015 à 23:04
Merci NHenry, le code fonctionne désormais !

Cordialement,
SE.
0
cs_Le Pivert Messages postés 7904 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 14 août 2024 729
25 nov. 2015 à 08:46
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
SE44fr Messages postés 29 Date d'inscription mercredi 5 août 2015 Statut Membre Dernière intervention 29 novembre 2015 2
29 nov. 2015 à 15:31
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
cs_Le Pivert Messages postés 7904 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 14 août 2024 729
29 nov. 2015 à 16:00
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
cs_Le Pivert Messages postés 7904 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 14 août 2024 729
29 nov. 2015 à 17:55
En appelant cette macro, tu peux faire clignoter ton bouton sans cliquer dessus!
0