OVH Cloud OVH Cloud

macro temporisation beep

3 réponses
Avatar
nicolas S2
Bonjour,

Pour aider ma fille à apprendre ses tables, je voudrais faire un user form
comprenant 3 textbox "aa", "bb", "rr". Un + entre aa et bb, et un = entre bb
et rr. Dans les deux premier textbox se trouvent les chiffres à additionner
et dans le dernier le résultat à trouver. Un décompte sonore rythmera et
limitera le temps. Voila pour la présentation.



Les deux premiers textbox sont remplis comme suit :



aa.Value = Int((15 * Rnd) + 1)
bb.Value = Int((15 * Rnd) + 1)


Je souhaiterais que le temps soit décompté comme suit :



Application.OnTime tem + TimeValue("00:00:03"), "son"
Application.OnTime tem + TimeValue("00:00:06"), "son"
Application.OnTime tem + TimeValue("00:00:09"), "son"
Application.OnTime tem + TimeValue("00:00:10"), "son"
Application.OnTime tem + TimeValue("00:00:11"), "son"
Application.OnTime tem + TimeValue("00:00:12"), "son"



Application.OnTime tem + TimeValue("00:00:17"), "ir_inter"
(ceci est dans le code de l'userform)



Le décompte se passe bien, mais à la fin je voudrais tester le résultat
entré dans rr



Private Sub comp()

xx = aa.Value * 1 + bb.Value * 1

If xx = rr.Value * 1 Then GoTo ok



ir_inter

GoTo fin

ok:

tada

fin:

End Sub



Et là ça ne marche pas. Je ne sais pas comment après 17 secondes tester le
résultat en laissant l'user form actif.







Declare Function sndPlaySoundA Lib "Winmm.dll" _
(ByVal lpszSoundName As String, ByVal uFlags As Long) As Long

Sub son()
sndPlaySoundA "D:\mes documents\tout document\son\start", 1
End Sub



Sub ir_inter()
sndPlaySoundA "D:\mes documents\tout document\son\ir_inter", 1
End Sub



Sub tada()

sndPlaySoundA "D:\mes documents\tout document\son\tada", 1

End Sub



(ceci est dans module)





Merci de votre aide (si je peux l'être) et bon dimanche

3 réponses

Avatar
nicolas S2
en fait, mon problème est que je ne sais pas comment faire pour que
l'instruction -Application.OnTime now + TimeValue("00:00:03"), "ma
procedure"- ouvre le code désiré:

Si "ma procedure" est dans un module cela marche.
Si "ma procedure" est dans le code de l'userform cela ne marche pas
(impossible de trouver la macro "D:mes documentsclasseur2.xls'!ma
procedure'.) donc pas de possibilité d'intervenir sur un élément de
l'userform.

"nicolas S2" a écrit dans le message de
news: 44def478$0$3610$
Bonjour,

Pour aider ma fille à apprendre ses tables, je voudrais faire un user form
comprenant 3 textbox "aa", "bb", "rr". Un + entre aa et bb, et un = entre
bb et rr. Dans les deux premier textbox se trouvent les chiffres à
additionner et dans le dernier le résultat à trouver. Un décompte sonore
rythmera et limitera le temps. Voila pour la présentation.



Les deux premiers textbox sont remplis comme suit :



aa.Value = Int((15 * Rnd) + 1)
bb.Value = Int((15 * Rnd) + 1)


Je souhaiterais que le temps soit décompté comme suit :

temp = now



Application.OnTime tem + TimeValue("00:00:03"), "son"
Application.OnTime tem + TimeValue("00:00:06"), "son"
Application.OnTime tem + TimeValue("00:00:09"), "son"
Application.OnTime tem + TimeValue("00:00:10"), "son"
Application.OnTime tem + TimeValue("00:00:11"), "son"
Application.OnTime tem + TimeValue("00:00:12"), "son"



Application.OnTime tem + TimeValue("00:00:17"), "ir_inter"
(ceci est dans le code de l'userform)



Le décompte se passe bien, mais à la fin je voudrais tester le résultat
entré dans rr



Private Sub comp()

xx = aa.Value * 1 + bb.Value * 1

If xx = rr.Value * 1 Then GoTo ok



ir_inter

GoTo fin

ok:

tada

fin:

End Sub



Et là ça ne marche pas. Je ne sais pas comment après 17 secondes tester le
résultat en laissant l'user form actif.







Declare Function sndPlaySoundA Lib "Winmm.dll" _
(ByVal lpszSoundName As String, ByVal uFlags As Long) As Long

Sub son()
sndPlaySoundA "D:mes documentstout documentsonstart", 1
End Sub



Sub ir_inter()
sndPlaySoundA "D:mes documentstout documentsonir_inter", 1
End Sub



Sub tada()

sndPlaySoundA "D:mes documentstout documentsontada", 1

End Sub



(ceci est dans module)





Merci de votre aide (si je peux l'être) et bon dimanche




Avatar
Michel Pierron
Bonjour Nicolas;
J'ai utilisé la fonction Beep mais tu pourras facilement transposer.
Sur ton UserForm, place un bouton Start pour lancer le décompte et dans ton
module UserForm:

Private Declare Function Beep Lib "kernel32" _
(ByVal dwFreq As Long, ByVal dwDuration As Long) As Long
Private Ok As Boolean, S As Single

Private Sub CommandButton1_Click()
aa.Value = Int((15 * Rnd) + 1)
bb.Value = Int((15 * Rnd) + 1)
rr.Value = ""
rr.SetFocus
CommandButton1.Enabled = False
DoEvents
S = Timer: Ok = True
Call Counter
End Sub

Private Sub Sirene(Good As Boolean)
Dim i&, a%, b%, c%
a = 500: b = 1000: c = 10
If Not Good Then a = 1000: b = 500: c = -c
For i = a To b Step c
Beep i, 50
Next i
CommandButton1.Enabled = True
End Sub

Private Sub rr_Change()
If rr = "" Then Exit Sub
If rr = Val(aa) + Val(bb) Then
Ok = False
DoEvents
If Timer <= S + 14 Then Call Sirene(True)
End If
End Sub

Private Sub Counter()
Dim i%, u%
Do
For i = 1 To 7
u = Choose(i, 3, 6, 9, 12, 13, 14, 15)
If Timer - u = S Then
Beep 1000, 100
If u = 15 Then Ok = False
End If
Next
DoEvents
Loop Until Ok = False
If Timer >= S + 15 Then
rr = Val(aa) + Val(bb)
Call Sirene(False)
End If
End Sub

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
Ok = False
End Sub

MP


"nicolas S2" a écrit dans le message de
news: 44def478$0$3610$
Bonjour,

Pour aider ma fille à apprendre ses tables, je voudrais faire un user form
comprenant 3 textbox "aa", "bb", "rr". Un + entre aa et bb, et un = entre
bb et rr. Dans les deux premier textbox se trouvent les chiffres à
additionner et dans le dernier le résultat à trouver. Un décompte sonore
rythmera et limitera le temps. Voila pour la présentation.



Les deux premiers textbox sont remplis comme suit :



aa.Value = Int((15 * Rnd) + 1)
bb.Value = Int((15 * Rnd) + 1)


Je souhaiterais que le temps soit décompté comme suit :



Application.OnTime tem + TimeValue("00:00:03"), "son"
Application.OnTime tem + TimeValue("00:00:06"), "son"
Application.OnTime tem + TimeValue("00:00:09"), "son"
Application.OnTime tem + TimeValue("00:00:10"), "son"
Application.OnTime tem + TimeValue("00:00:11"), "son"
Application.OnTime tem + TimeValue("00:00:12"), "son"



Application.OnTime tem + TimeValue("00:00:17"), "ir_inter"
(ceci est dans le code de l'userform)



Le décompte se passe bien, mais à la fin je voudrais tester le résultat
entré dans rr



Private Sub comp()

xx = aa.Value * 1 + bb.Value * 1

If xx = rr.Value * 1 Then GoTo ok



ir_inter

GoTo fin

ok:

tada

fin:

End Sub



Et là ça ne marche pas. Je ne sais pas comment après 17 secondes tester le
résultat en laissant l'user form actif.







Declare Function sndPlaySoundA Lib "Winmm.dll" _
(ByVal lpszSoundName As String, ByVal uFlags As Long) As Long

Sub son()
sndPlaySoundA "D:mes documentstout documentsonstart", 1
End Sub



Sub ir_inter()
sndPlaySoundA "D:mes documentstout documentsonir_inter", 1
End Sub



Sub tada()

sndPlaySoundA "D:mes documentstout documentsontada", 1

End Sub



(ceci est dans module)





Merci de votre aide (si je peux l'être) et bon dimanche




Avatar
nicolas S2
Merci Michel pour ta réponse, je n'ai fait qu'une lecture rapide (pas
compris grand chose) demain, j'éclaircis ton code.

A plus
"Michel Pierron" a écrit dans le message de news:
OzX%
Bonjour Nicolas;
J'ai utilisé la fonction Beep mais tu pourras facilement transposer.
Sur ton UserForm, place un bouton Start pour lancer le décompte et dans
ton module UserForm:

Private Declare Function Beep Lib "kernel32" _
(ByVal dwFreq As Long, ByVal dwDuration As Long) As Long
Private Ok As Boolean, S As Single

Private Sub CommandButton1_Click()
aa.Value = Int((15 * Rnd) + 1)
bb.Value = Int((15 * Rnd) + 1)
rr.Value = ""
rr.SetFocus
CommandButton1.Enabled = False
DoEvents
S = Timer: Ok = True
Call Counter
End Sub

Private Sub Sirene(Good As Boolean)
Dim i&, a%, b%, c%
a = 500: b = 1000: c = 10
If Not Good Then a = 1000: b = 500: c = -c
For i = a To b Step c
Beep i, 50
Next i
CommandButton1.Enabled = True
End Sub

Private Sub rr_Change()
If rr = "" Then Exit Sub
If rr = Val(aa) + Val(bb) Then
Ok = False
DoEvents
If Timer <= S + 14 Then Call Sirene(True)
End If
End Sub

Private Sub Counter()
Dim i%, u%
Do
For i = 1 To 7
u = Choose(i, 3, 6, 9, 12, 13, 14, 15)
If Timer - u = S Then
Beep 1000, 100
If u = 15 Then Ok = False
End If
Next
DoEvents
Loop Until Ok = False
If Timer >= S + 15 Then
rr = Val(aa) + Val(bb)
Call Sirene(False)
End If
End Sub

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
Ok = False
End Sub

MP


"nicolas S2" a écrit dans le message de
news: 44def478$0$3610$
Bonjour,

Pour aider ma fille à apprendre ses tables, je voudrais faire un user
form comprenant 3 textbox "aa", "bb", "rr". Un + entre aa et bb, et un =
entre bb et rr. Dans les deux premier textbox se trouvent les chiffres à
additionner et dans le dernier le résultat à trouver. Un décompte sonore
rythmera et limitera le temps. Voila pour la présentation.



Les deux premiers textbox sont remplis comme suit :



aa.Value = Int((15 * Rnd) + 1)
bb.Value = Int((15 * Rnd) + 1)


Je souhaiterais que le temps soit décompté comme suit :



Application.OnTime tem + TimeValue("00:00:03"), "son"
Application.OnTime tem + TimeValue("00:00:06"), "son"
Application.OnTime tem + TimeValue("00:00:09"), "son"
Application.OnTime tem + TimeValue("00:00:10"), "son"
Application.OnTime tem + TimeValue("00:00:11"), "son"
Application.OnTime tem + TimeValue("00:00:12"), "son"



Application.OnTime tem + TimeValue("00:00:17"), "ir_inter"
(ceci est dans le code de l'userform)



Le décompte se passe bien, mais à la fin je voudrais tester le résultat
entré dans rr



Private Sub comp()

xx = aa.Value * 1 + bb.Value * 1

If xx = rr.Value * 1 Then GoTo ok



ir_inter

GoTo fin

ok:

tada

fin:

End Sub



Et là ça ne marche pas. Je ne sais pas comment après 17 secondes tester
le résultat en laissant l'user form actif.







Declare Function sndPlaySoundA Lib "Winmm.dll" _
(ByVal lpszSoundName As String, ByVal uFlags As Long) As Long

Sub son()
sndPlaySoundA "D:mes documentstout documentsonstart", 1
End Sub



Sub ir_inter()
sndPlaySoundA "D:mes documentstout documentsonir_inter", 1
End Sub



Sub tada()

sndPlaySoundA "D:mes documentstout documentsontada", 1

End Sub



(ceci est dans module)





Merci de votre aide (si je peux l'être) et bon dimanche