Intégrer et afficher un chronometre sur un Userform de QCM

abalny

XLDnaute Nouveau
Bonjour à tous,

Je sais qu'il y a de nombreuses discussions sur la gestion d'un chronomêtre, mais je n'arrive pas à trouver ce dont j'ai besoin : à l'ouverture d'un Userform de questionnaire à choix multiple, je voudrais afficher et démarrer un chronometre sur ce même userform.
Je n'arrive pas à adapter les macros trouvées sur ce forum (qui pourtant m'a énormément servi à généré mon QCM !!!). Je pense qu'il faut intégrer le code du chrono dans le code du userform, mais cela est-il possible ?
J'ai aussi essayé de mettre un chrono dans une cellule d'une feuille et de copier la valeur de la cellule dans une étiquette du userform sans résultat : soit le chrono reste à zéro, soit le user form n'affiche plus les questions.
précisions supplémentaires : sur le userform, il y a un bouton pour valider les réponses et un bouton pour passer à la question suivante... Donc, il faut que le chrono fonctionne tout le temps d'affichage du questionnaire et malgré les actions sur les différents bouton....

Si quelqu'un pouvait m'indiquer le code à intégrer dans le userform !!!



Merci d'avance à tous.
 

pyfux

XLDnaute Occasionnel
Re : Intégrer et afficher un chronometre sur un Userform de QCM

Bonjour,

De mémoire, le composant Timer (en VB6) te permet de d'appeler une fonction régulièrement (durée à définir).
Cette fonction pourrai rafraichir le temps affiché (un chronomètre quoi...) ?

ça aide?
pyfux
 

laetitia90

XLDnaute Barbatruc
Re : Intégrer et afficher un chronometre sur un Userform de QCM

bonjour abalny , pyfux , Philippe:):):)
un exemple un chrono au millieme dans un user avec temps inter... a adapter!!!
attention utilisation des cells a1:b4 on pourrait tous faire dans l'user mais bon!!!
 

Pièces jointes

  • chrono.xls
    47.5 KB · Affichages: 421
  • chrono.xls
    47.5 KB · Affichages: 447
  • chrono.xls
    47.5 KB · Affichages: 499
Dernière édition:

pyfux

XLDnaute Occasionnel
Re : Intégrer et afficher un chronometre sur un Userform de QCM

Bonjour laetitia,

Ta solution dépend un peu du traitement qui doit être fait dans la boucle de ton chrono.
Le Doevents permet de rafraichir l'interface mais pas forcément de réaliser des calculs complexes!

As-tu observé l'utilisation du processeur pendant le chrono ? Tu es d'accord avec moi, ce n'est pas optimisé!

Par contre désolé je ne trouve pas comment ajouter le composant activex: Timer. Je ne le trouve pas. sorry.

pyfux
 

abalny

XLDnaute Nouveau
Re : Intégrer et afficher un chronometre sur un Userform de QCM

Bonjour et merci pour vos réponses,

J'ai intégré un chrono sur mon userform. Il démarre seul à l'activation de l'usf, mais à chaque fois que j'utilise les boutons validation ou question suivante, message d'erreur du débogeur et arrêt de la macro associée au bouton...
Est-ce dû aux paramètres de l'usf ?
Est-ce dû à la structure de mon programme?
J'ai l'impression que le chrono avec la boucle DoEvent...loop, bloque toutes les autres macros.
J'avoue que là je coince... Avez-vous une idée ?

Merci
 

Fo_rum

XLDnaute Accro
Re : Intégrer et afficher un chronometre sur un Userform de QCM

Bonjour,

...
J'ai l'impression que le chrono avec la boucle DoEvent...loop, bloque toutes les autres macros.
...

DoEvents permet, au contraire, de redonner la main au système.
Vois si l'exemple joint peut t'aider sachant que la durée est moins précise qu'avec le Timer de Laetitia :D.
 

Pièces jointes

  • UsFChronométré.xls
    35.5 KB · Affichages: 319

laetitia90

XLDnaute Barbatruc
Re : Intégrer et afficher un chronometre sur un Userform de QCM

rebonjour tous :):):)
salut l'ami forum un moment sans se croiser:):):):):)
pour replacer le contexte mon exemple c'est tres basique un vulgaire chrono d'ailleurs un bogue a bout de minutes retour a zero enfin bon personne a vu contente:):):) mechante laetitia
plus serieusement comme l'indique mon ami forum on utilise dovents pas de pb.. tu peus trés bien renseigne une textbox ou label pendant l'operation bien sur ne pas lancer de macro lourde for ...next ect pendant ce temps comme je comprends il sagit de repondre a un questionnaire pas de souci cela devrait pas poser de de pb..
le plus simple mettre un fichier avec tes questions & reponses surement une soluc... pour eviter les posts a rep...
dans certains cas on peut utiliser un simple timer on definit le temps au depart si temps passer on arrete le jeu c'est trés simple a mediter..
pour repondre a pyfux:mad::mad:
As-tu observé l'utilisation du processeur pendant le chrono ? Tu es d'accord avec moi, ce n'est pas optimisé!
j'aime pas trop les questions reponses pas contente du tout:mad::mad:
il est bien evident que cela utilise pas mal de ressources system on est dans vba & non dans vb6 ou delphi que je connais un peu!!
le composant active il faut manipuler les ddl & ocx je te laisse travailler!!!!
un exemple directemennt dans user pas finaliser en vacances cette semaine ne compte pas les heures continues le minutes >60 plus le temps prepare mes valises bon courage qui prendra la suite


ps fichier modifie vu que l'affichage des heures marchais pas
 

Pièces jointes

  • chrono2.xls
    50 KB · Affichages: 295
  • chrono2.xls
    50 KB · Affichages: 201
  • chrono2.xls
    50 KB · Affichages: 273
Dernière édition:

abalny

XLDnaute Nouveau
Re : Intégrer et afficher un chronometre sur un Userform de QCM

Bonjour à tous,

Je vous joins le code de l'usf dans lequel je souhaiterais avoir un chrono qui s'affiche sur un label.
Mon fichier complet contenant des éléments que je ne peux pas diffuser...

Merci à tous pour votre aide.

----------------------------------------------------------------------------
Dim P As Single
Dim N As Single
Dim mr As Single
Dim réponse As String
Dim lr As Single
Dim i As Single
Dim r1, r2, r3, r4

Private Sub UserForm_activate()

'affichage en plein écran
Dim W As Double
With QuestionMultiple
.StartUpPosition = 3
W = Application.UsableWidth / 768
Me.Zoom = CInt(W * 95)
.Width = Application.Width
.Height = Application.Height
.Left = 0
.Top = 0
End With


N = 2
i = 1

CheckBox3.Visible = True
Label11.Visible = True
CheckBox4.Visible = True
Label12.Visible = True

Label1.Caption = Feuil11.Cells(N, 3) ' la question
Label8.Caption = "Question n°: " & i
CheckBox1.Caption = Feuil11.Cells(N, 4) 'les réponses 1
CheckBox2.Caption = Feuil11.Cells(N, 5) 'les réponses 2

If Feuil11.Cells(N, 6).Value = 0 Then 'test si 3ème réponse présente
CheckBox3.Visible = False
Label11.Visible = False
Else
label11visible = True
CheckBox3.Caption = Feuil11.Cells(N, 6) 'les réponses 3
End If

If Feuil11.Cells(N, 7).Value = 0 Then 'test si 4ème réponse présente
CheckBox4.Visible = False
Label12.Visible = False
Else
label12visible = True
CheckBox4.Caption = Feuil11.Cells(N, 7) 'les réponses 4
End If

bad.Visible = False
yeah.Visible = False
what.Visible = False
incomp.Visible = False

P = 0
mr = 0
lr = 15
pointp.Value = P
Pourcent.Value = P / N * 100


End Sub

Private Sub Verifier_Click()
'validation de la réponse par le candidat

what.Visible = False
incomp.Visible = False

If CheckBox1.Value = True Then
r1 = "a"
End If
If CheckBox2.Value = True Then
r2 = "b"
End If
If CheckBox3.Value = True Then
r3 = "c"
End If
If CheckBox4.Value = True Then
r4 = "d"
End If

réponse = r1 & r2 & r3 & r4

If réponse = "" Then
Label2.Caption = "Quelle est votre réponse ?"
Label13.Caption = ""
incomp.Visible = False
what.Visible = True
Exit Sub
End If

Feuil11.Cells(N, 10).Value = réponse
If Feuil11.Cells(N, 8) = réponse Then
Label2.Caption = "Bonne réponse !!!"
yeah.Visible = True

Feuil13.Cells(lignerésultat, mr + 7).Value = Feuil11.Cells(N, 2)
Feuil13.Cells(lignerésultat, mr + 8).Value = réponse

Feuil14.Cells(lr, 3).Value = Feuil11.Cells(N, 3)
Feuil14.Cells(lr + 5, 3).Value = "Bonne réponse"

If CheckBox1.Value = True Then
Feuil14.Cells(lr + 1, 3).Value = Feuil11.Cells(N, 4)
End If
If CheckBox2.Value = True Then
Feuil14.Cells(lr + 2, 3).Value = Feuil11.Cells(N, 5)
End If
If CheckBox3.Value = True Then
Feuil14.Cells(lr + 3, 3).Value = Feuil11.Cells(N, 6)
End If
If CheckBox4.Value = True Then
Feuil14.Cells(lr + 4, 3).Value = Feuil11.Cells(N, 7)
End If


mr = mr + 2
lr = lr + 7
P = P + 1

Else
If Feuil11.Cells(N, 11).Value = 1 Then

Label2.Caption = "Mauvaise réponse !"
bad.Visible = True
Label13.Caption = "Les bonnes réponses sont : " & Feuil11.Cells(N, 8).Value

Feuil13.Cells(lignerésultat, mr + 7).Value = Feuil11.Cells(N, 2)
Feuil13.Cells(lignerésultat, mr + 8).Value = réponse
Feuil13.Cells(lignerésultat, mr + 8).Font.ColorIndex = 3
Feuil14.Cells(lr, 3).Value = Feuil11.Cells(N, 3)
Feuil14.Cells(lr + 5, 3).Value = "Mauvaise réponse"

If CheckBox1.Value = True Then
Feuil14.Cells(lr + 1, 3).Value = Feuil11.Cells(N, 4)
End If
If CheckBox2.Value = True Then
Feuil14.Cells(lr + 2, 3).Value = Feuil11.Cells(N, 5)
End If
If CheckBox3.Value = True Then
Feuil14.Cells(lr + 3, 3).Value = Feuil11.Cells(N, 6)
End If
If CheckBox4.Value = True Then
Feuil14.Cells(lr + 4, 3).Value = Feuil11.Cells(N, 7)
End If


lr = lr + 7
mr = mr + 2


Else
Label2.Caption = "Réponse incomplète"
incomp.Visible = True

Label13.Caption = "Les bonnes réponses sont : " & Feuil11.Cells(N, 8).Value
Feuil13.Cells(lignerésultat, mr + 7).Value = Feuil11.Cells(N, 2)
Feuil13.Cells(lignerésultat, mr + 8).Value = réponse
Feuil13.Cells(lignerésultat, mr + 8).Font.ColorIndex = 41
Feuil14.Cells(lr, 3).Value = Feuil11.Cells(N, 3)
Feuil14.Cells(lr + 5, 3).Value = "Réponse incomplète"

If CheckBox1.Value = True Then
Feuil14.Cells(lr + 1, 3).Value = Feuil11.Cells(N, 4)
End If
If CheckBox2.Value = True Then
Feuil14.Cells(lr + 2, 3).Value = Feuil11.Cells(N, 5)
End If
If CheckBox3.Value = True Then
Feuil14.Cells(lr + 3, 3).Value = Feuil11.Cells(N, 6)
End If
If CheckBox4.Value = True Then
Feuil14.Cells(lr + 4, 3).Value = Feuil11.Cells(N, 7)
End If


mr = mr + 2
lr = lr + 7


End If
End If




pointp.Value = P
Pourcent.Value = P / (N - 1) * 100
Feuil13.Cells(lignerésultat, 4).Value = i
Feuil14.Cells(9, 4).Value = i
Feuil13.Cells(lignerésultat, 5).Value = P
Feuil13.Cells(lignerésultat, 6).Value = P / (N - 1)
Feuil14.Cells(10, 4).Value = P
Feuil14.Cells(11, 4).Value = P / (N - 1)
End Sub
Private Sub Suite_Click()
' bouton question suivante
r1 = ""
r2 = ""
r3 = ""
r4 = ""

Compteligne
Label2.Caption = " " ' Efface la question précedente
Label13.Caption = "" ' efface la bonne réponse précédente
CheckBox1.Value = False ' décoche les bouttons
CheckBox2.Value = False
CheckBox3.Value = False
CheckBox4.Value = False
réponse = ""

bad.Visible = False 'efface les smileys
yeah.Visible = False
what.Visible = False
incomp.Visible = False

CheckBox3.Visible = True
Label11.Visible = True
CheckBox4.Visible = True
Label12.Visible = True


i = i + 1
N = N + 1
Label8.Caption = "Question n°: " & i
Label1.Caption = Feuil11.Cells(N, 3) ' les questions
CheckBox1.Caption = Feuil11.Cells(N, 4) 'les réponses 1
CheckBox2.Caption = Feuil11.Cells(N, 5) 'les réponses 2

If Feuil11.Cells(N, 6).Value = 0 Then
CheckBox3.Visible = False
Label11.Visible = False
Else
label11visible = True
CheckBox3.Caption = Feuil11.Cells(N, 6) 'les réponses 3
End If

If Feuil11.Cells(N, 7).Value = 0 Then
CheckBox4.Visible = False
Label12.Visible = False
Else
label12visible = True
CheckBox4.Caption = Feuil11.Cells(N, 7) 'les réponses 4
End If

If N = Nbrligne + 2 Then
MsgBox ("Votre test est terminé.")
Label2.Caption = " "
CheckBox1.Value = False
CheckBox2.Value = False
CheckBox3.Value = False
CheckBox4.Value = False

CheckBox3.Visible = True
Label11.Visible = True
CheckBox4.Visible = True
Label12.Visible = True
QuestionMultiple.Hide
'ActiveWorkbook.Save

End If

End Sub

Private Sub quitter_Click()
Unload Me
End Sub
 

JCGL

XLDnaute Barbatruc
Re : Intégrer et afficher un chronometre sur un Userform de QCM

Bonjour à tous,


pour replacer le contexte mon exemple c'est tres basique un vulgaire chrono d'ailleurs un bogue a bout de minutes retour a zero enfin bon personne a vu contente:):):) mechante laetitia

Pas de problème chez moi avec ton chrono (c'est vrai que tu ne précises le nombre de minutes dans ton message :

Capture_1.png

Bises
A + à tous
 

Pièces jointes

  • Capture_1.png
    Capture_1.png
    14.4 KB · Affichages: 325
  • Capture_1.png
    Capture_1.png
    14.4 KB · Affichages: 326

abalny

XLDnaute Nouveau
Re : Intégrer et afficher un chronometre sur un Userform de QCM

Bonjour à tous,

J'ai enfin réussi à faire fonctionner le chrono ! En fait, je démarrais le chrono dés l'ouverture de l'usf, alors qu'il fallait que j'attende l'initialisation de celui-ci. Du coup, mon programme ne fesait que la fonction chrono et toute action provoquait un défaut ....
Donc voici le code que j'ai utilisé pour que cela fonctionne (code trouvé bien évidement dans ce forum !!!)...

Dans le code de l'usf, j'ai mis cette instruction :

fin_chrono = True
DepartPause = [Now()] - DepartPause
chrono_tourne

Et dans un module, j'ai mis cette macro :

Sub chrono_tourne()
Do While fin_chrono = True
Temps = [Now()] - DepartPause
QuestionMultiple.chrono.Caption = WorksheetFunction.Text(Temps, "mm:ss.00")
DoEvents
Loop
End Sub

Ce chrono ne provoque aucun ralentissement du programme et le processeur n'est pas du tout chargé... Par contre, la solution de lone-wolf, provoque un fort ralentissement du rpogramme si elle est intégrée à un autre usf comprenant d'autres fonctions (comme c'est le cas pour mon QCM)....

Merci encore à tous....!!!!
 

pyfux

XLDnaute Occasionnel
Re : Intégrer et afficher un chronometre sur un Userform de QCM

Bonjour laetitia90,

Oui, la critique est facile et l'art difficile. Aussi je te présente mes excuses. Je ne souhaitais pas te blesser.

D'autant plus qu'après quelques recherches, j'estime que "finalement" tu as la "meilleure" (moins pire) solution.

A priori, pas de Timer sous Excel (VB et Access on le composant) donc il n'existe pas de solution propre à par le "Application.Ontime" qui n'est pas adapté pour afficher les secondes qui passent !

Donc je dis: pour faire un QCM chronométré il faut utiliser VB ou VB.NET ou Windev... (sorry:)

pyfux
 

Discussions similaires

Statistiques des forums

Discussions
312 198
Messages
2 086 149
Membres
103 133
dernier inscrit
mtq