Macro compte à rebours

Constantin

XLDnaute Occasionnel
Supporter XLD
Bonjour à tous,
J'ai fait une petite application de calcul mental pour ma petite fille.
J'aimerai, à l'issue de la randomisation qui tire les chiffres, déterminer un temps maximal de réponse (par ex. 10 s). J'ai cherché, je n'ai pas trouvé faute d'une connaissance suffisante en VBA (que j'adore pourtant...)
Je joins mon fichier. Si vous avez une idée, je suis preneur!
Bien cordialement
 

Pièces jointes

  • Calcul mental Leilacompteur.xlsm
    26.9 KB · Affichages: 38

job75

XLDnaute Barbatruc
Bonsoir Constantin,

Dans Module1 remplacez la macro par celle-ci :
Code:
Sub Aleatoire()
Dim delai, t
delai = 10 'secondes
[H5].Select
ActiveCell = "" 'Efface le résultat précédemment saisi
Randomize
[D5] = Int((1 + 10 * [F7]) * Rnd)
[F5] = Int((1 + 10 * [F7]) * Rnd)
t = Now + delai / 86400
While Now < t
    DoEvents
    If [H5] <> "" Then Exit Sub
Wend
Application.OnTime 1, "Aleatoire"
End Sub
A+
 

job75

XLDnaute Barbatruc
Bonjour Constantin, le forums,

Ces codes vont mieux :
Code:
Public flag As Boolean 'mémorise la variable

Sub Aleatoire()
Dim delai, t
delai = 10 'secondes
flag = False
Randomize
[D5] = Int((1 + 10 * [F7]) * Rnd)
[F5] = Int((1 + 10 * [F7]) * Rnd)
reprise: [H5].Select
ActiveCell = "" 'Efface le résultat précédemment saisi
t = Now + delai / 86400
Do While Now < t
    DoEvents
    If flag Then Exit Sub 'arrêt du processus
    If [H5] <> "" Then
        If [H5] <> [D5] + [F5] Then MsgBox "TU AS FAIS UNE ERREUR, ESSAYE DE CORRIGER": [B9] = [B9] + 1: GoTo reprise
        MsgBox "BRAVO ! TU AS TROUVE LE BON RESULTAT" & vbLf & vbLf & "ON CONTINUE !": [B7] = [B7] + 1: Exit Do
    End If
Loop
Application.OnTime 1, "Aleatoire" 'relance le processus
End Sub
Code:
Sub RemiseAZero()
flag = True 'variable mémorisée
[B7,B9,D5,F5,H5] = ""
[F7].Select
End Sub
Fichier joint.

Bon week-end.
 

Pièces jointes

  • Calcul mental Leilacompteur(1).xlsm
    29.5 KB · Affichages: 15

Constantin

XLDnaute Occasionnel
Supporter XLD
Bonjour Job75,
Merci infiniment pour cette proposition qui marche super bien... Plutôt que relancer la procédure, je vais ajouter un Msgbox "Ton temps est dépassé"
Je vais aussi chainer le temps de réflexion au niveau de difficulté.(10*1;10*2;10*3 par exemple)
Je vais regarder en détail les macros ainsi modifiées et améliorées. Assurément, j'ai beaucoup à apprendre notamment pour simplifier mes macros et les rendre plus rapides.

Je vous souhaite un excellent week-end en renouvelant mes remerciements.
Constantin
 

job75

XLDnaute Barbatruc
Plutôt que relancer la procédure, je vais ajouter un Msgbox "Ton temps est dépassé"
Je vais aussi chainer le temps de réflexion au niveau de difficulté.(10*1;10*2;10*3 par exemple)
Il faut de toute façon relancer la procédure, la macro complétée dans ce fichier (1 bis) :
Code:
Public flag As Boolean 'mémorise la variable

Sub Aleatoire()
Dim delai, t
If [F7] = "" Then [F7] = 1
delai = 10 * [F7] 'secondes
flag = False
Randomize
[D5] = Int((1 + 10 * [F7]) * Rnd)
[F5] = Int((1 + 10 * [F7]) * Rnd)
1 [H5].Select
ActiveCell = "" 'Efface le résultat précédemment saisi
t = Now + delai / 86400
Do While Now < t
    DoEvents
    If flag Then Exit Sub 'arrêt du processus
    If [H5] <> "" Then
        If [H5] <> [D5] + [F5] Then MsgBox "TU AS FAIT UNE ERREUR, ESSAYE DE CORRIGER", 48: [B9] = [B9] + 1: GoTo 1
        MsgBox "BRAVO ! TU AS TROUVÉ LE BON RESULTAT, ON CONTINUE !": [B7] = [B7] + 1: GoTo 2
    End If
Loop
MsgBox "TON TEMPS EST DEPASSÉ, ON CONTINUE !"
2 Application.OnTime 1, "Aleatoire" 'relance le processus
End Sub
 

Pièces jointes

  • Calcul mental Leilacompteur(1 bis).xlsm
    29.5 KB · Affichages: 21

Statistiques des forums

Discussions
311 733
Messages
2 082 009
Membres
101 865
dernier inscrit
MLL