[Résolu][Calc]Compte a rebours, fermeture, enregistrement

Discussions et questions sur tout ce qui concerne la programmation tous langages et tous modules confondus.

Modérateur : Vilains modOOs

Règles du forum
:alerte: Balisage obligatoire dans cette section !
Aidez-nous à vous aider au mieux en balisant correctement votre question : reportez-vous sur les règles de cette section avant de poster !
Nouzon
Membre lOOyal
Membre lOOyal
Messages : 30
Inscription : 13 nov. 2012 01:18

[Résolu][Calc]Compte a rebours, fermeture, enregistrement

Message par Nouzon »

Bonjour à tous,

Dans le cadre de mes fonctions dans un service ressources humaines, je voudrai réaliser un test sur tableur afin de vérifier les compétences des candidats. Je souhaite créer une dizaine d’exercices qui doivent être réalisé par les candidats.

Grâce aux différents forums, j’ai réussi à refaire une macro qui passe de feuille en feuille et donc de questions en questions (Cf : fichier ci-joint).

Désormais je souhaiterai affiché un compte à rebours pour avertir les candidats du temps qui leurs reste pour réaliser le test (test de 10 minutes). De plus, je souhaiterai que le compte à rebours se déclenche lorsque le candidat appuis sur le bouton « Démarrer le test» de la feuille 1.
J’ai trouvé un exemple de compte à rebours sur excel mais je n’arrive pas a réutiliser sur calc.

Et dernier chose que je n’arrive pas a faire il faudrait que le fichier s’enregistre automatiquement et se ferme au bout des 10 minutes pour laisser le même temps à chaque candidat.

Je ne sais pas si l’ensemble de ces actions sont possibles, mais je vous remercie par avance pour votre aide :super:
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Dernière modification par micmac le 06 nov. 2017 09:22, modifié 5 fois.
Raison : Déverouillage du sujet et suppression de la balise [Résolu] suite à demande de ll’intéressé pour complément de question+Balisage
Libre office 5.0 sous Windows 10 - Obligation de version - (manque de maintenance informatique de mon employeur).
toucan
MOOdérateur
MOOdérateur
Messages : 182
Inscription : 22 févr. 2016 23:49

Re: Compte a rebours, fermeture, enregistrement via un bouto

Message par toucan »

Bonjour et bienvenue,

Image

Cette section a des règles très précises que vous devez obligatoirement suivre pour obtenir de l'aide. C'est indiqué dans le cadre rouge en haut de la page.

Il est demandé aux auteurs de faire précéder le titre de leur question d'une balise adéquate. Ce balisage est extrêmement important car il permet d'avoir une base de connaissance optimum en cas de recherche. Avez-vous remarqué comment étaient les autres questions postées ?

Lisez ce fil pour savoir quelle balise utiliser : http://user.services.openoffice.org/fr/ ... html#27295

N'oubliez pas que le terme "Macro" ou "OpenOffice" ne doit pas être employé car il est implicite. Essayer de synthétiser au mieux ce que vous cherchez à faire.

Un titre accrocheur vous permettra d'une part d'être aidé plus rapidement et d'autre part, d'enrichir notre base de connaissances.

Nous l'avons fait pour vous cette fois-ci mais lors de votre prochaine question, nous vous remercions de le faire vous-même sous peine de voir votre sujet verrouillé.

Merci de votre collaboration.
Piaf
GourOOu
GourOOu
Messages : 5622
Inscription : 25 nov. 2011 18:07
Localisation : Guyane

Re: [Calc]Compte a rebours, fermeture, enregistrement

Message par Piaf »

Bonjour
A tester

Code : Tout sélectionner

Global NumFeuille as Integer
Global heureFin
Global Decompte

Sub Chrono
Dim oDoc as Object, Heure, Calcul
	oDoc = thisComponent
	heureFin = DateAdd("n",10,Time)
	Do While time < heurefin
		Heure = time
		Calcul = TimeValue(str(heurefin)) - TimeValue(str(time))
		Decompte = trim(Str(Hour(Calcul))) & ":" & trim(Str(Minute(Calcul))) & ":" & trim(Str(Second(Calcul)))
		If NumFeuille > 0 Then
			oDoc.Sheets(numFeuille).getCellRangeByName("A1").String = Decompte
			oDoc.Sheets(numFeuille - 1).getCellRangeByName("A1").String = ""
		End If
	Loop
	oDoc.Sheets(0).isVisible = True
	oDoc.CurrentController.ActiveSheet.isVisible = False
	oDoc.Store
	oDoc.Close(True)
End Sub

Sub AffichageFeuille
Dim oDoc as Object, maFeuille as Object
	oDoc = thisComponent
	maFeuille = oDoc.CurrentController.ActiveSheet
	If numFeuille = 0 Then heureFin = DateAdd("n",10,Time)
	If numFeuille = 10 Then
		NumFeuille = 0
		oDoc.Sheets(numFeuille).isVisible = True
		maFeuille.isVisible = False
		HeureFin = time
	Else
		NumFeuille = numFeuille + 1
		oDoc.Sheets(numFeuille).isVisible = True
		maFeuille.isVisible = False
	End If
End Sub
A+
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Libre Office Version: 6.1.6 et Apache OpenOffice 4.1.6 Sur Xubuntu 18.04 AMD64
Avatar de l’utilisateur
Jurassic Pork
PassiOOnné
PassiOOnné
Messages : 626
Inscription : 09 août 2017 22:15

Re: [Calc]Compte a rebours, fermeture, enregistrement

Message par Jurassic Pork »

hello,
attention Piaf ta routine Chrono qui se lance à l'ouverture du document est une "grignoteuse" de cpu :aie: :
Questionnaire_LibreOffice.png
Comme on peut le voir soffice utilise 25% de temps cpu et c'est parce que j'ai un processeur QuadCore. Avec un processeur monocore cela pourrait atteindre 100 %.
Tout cela à cause de la boucle Do While qui ne laisse pas respirer le cpu.
Une utilisation d'un timer ou de multithread (en python) serait sans doute moins "cpuvore".

Ami calmant, J.P
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
LibreOffice 7.6.2.1 et OpenOffice 4.1.15 sous windows 11
LibreOffice 24.2.0 et OpenOffice 4.1.15 sous Ubuntu 20.04
Piaf
GourOOu
GourOOu
Messages : 5622
Inscription : 25 nov. 2011 18:07
Localisation : Guyane

Re: [Calc]Compte a rebours, fermeture, enregistrement

Message par Piaf »

Bonjour
Jurassic Pork a écrit :attention Piaf ta routine Chrono qui se lance à l'ouverture du document est une "grignoteuse" de cpu
Effectivement grignoteuse est un euphémisme :lol:
Une autre approche beaucoup moins gourmande à tester à partir d'un modèle de document.

Code : Tout sélectionner

Global NumFeuille as Integer
Global mns as Integer, secs as Integer, x as Integer

Sub Temps
Dim oDoc as Object, maFeuille as Object, maPage as Object, ctrl as Object
Dim sDate As String, i as Integer, n as Integer, Adresse as String
	oDoc = thisComponent
	For x = secs To 0 step -1
		secs = x			
		Wait 1000
		sDate = TimeSerial(0,mns,secs)
		If NumFeuille > 0 Then
			oDoc.Sheets(numFeuille).getCellRangeByName("A1").String = sdate
		End If
	Next x
	If mns = 0 And secs = 0 Then
		For i = 0 To oDoc.Sheets.Count - 1
			maFeuille = oDoc.Sheets(i)
			maFeuille.isVisible = True
			maPage = maFeuille.DrawPage
			For n = 0 To maPage.Count - 1
				ctrl = maPage(n)
				If ctrl.supportsService("com.sun.star.drawing.ControlShape") Then
					If ctrl.Control.ServiceName = "stardiv.one.form.component.CommandButton" Then
						maPage.remove(ctrl)
						Exit For
					End If
				End If
			Next n
		Next i
		oDoc.BasicLibraries.removeLibrary("Standard")	
		Adresse = convertToURL(CurDir & GetPathSeparator() & oDoc.Sheets(0).getCellRangeByName("A1").String)
		oDoc.storeAsURL(Adresse, Array())
		oDoc.Close(True)
		Stop
	End If
	secs = 59
	mns = mns - 1
	temps
End Sub

Sub AffichageFeuille
Dim oDoc as Object, maFeuille as Object
	oDoc = thisComponent
	maFeuille = oDoc.CurrentController.ActiveSheet
	Select Case numFeuille
		Case 0
			If oDoc.Sheets(numFeuille).getCellRangeByName("A1").String = "" Then
				MsgBox("Vous devez sélectionner votre nom avant de pouvoir commencer le test")
				oDoc.CurrentController.Select(oDoc.Sheets(numFeuille).getCellRangeByName("A1"))
				Exit Sub
			Else
				NumFeuille = numFeuille + 1
				oDoc.Sheets(numFeuille).isVisible = True
				maFeuille.isVisible = False		
				mns = 9 : secs = 59
				temps	
			End If		
		Case 10
			NumFeuille = 0
			oDoc.Sheets(numFeuille).isVisible = True
			maFeuille.isVisible = False
			mns = 0 : secs = 2 : x = 2
		Case Else
			NumFeuille = numFeuille + 1
			oDoc.Sheets(numFeuille).isVisible = True
			maFeuille.isVisible = False		
	End select
End Sub
A+
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Libre Office Version: 6.1.6 et Apache OpenOffice 4.1.6 Sur Xubuntu 18.04 AMD64
Nouzon
Membre lOOyal
Membre lOOyal
Messages : 30
Inscription : 13 nov. 2012 01:18

Re: [Calc]Compte a rebours, fermeture, enregistrement

Message par Nouzon »

Super votre réactivité !!! Merci d’avoir amélioré le fichier c’est beaucoup plus rapide.

Cependant, si je peux me permettre encore de demander encore quelques améliorations svp :

- Lorsque j’ouvre le fichier, il s’ouvresans nom et le candidat devra l’enregistrer de lui-même.
Or je souhaiterais préalablement nommer et enregistrer le fichier sur un espace commun pour qu’il s’ouvre avec le même nom et au même emplacement.

- Le fait d’inscrire au préalable son nom est une très bonne idée. De plus, j’aimerais que la saisie soit libre et ne dépende pas d’un menu déroulant. Cependant, lorsque j’ai finis le test, ça me renvoi à la première feuille et ça m’indique un message d’erreur à la fin sur le bouton fin du test, disant que le nom n’existe pas.

- Dernière chose j’ai essayé de rajouter des feuilles pour faires 20 questions, mais du coup les boutons ne fonctionne que sur les 10 premières questions, que faut-il changer?

Bonne soirée et merci encore,
C’est la deuxième fois que tu me sauve la vie professionnellement Piaf.
MERCI
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Libre office 5.0 sous Windows 10 - Obligation de version - (manque de maintenance informatique de mon employeur).
Piaf
GourOOu
GourOOu
Messages : 5622
Inscription : 25 nov. 2011 18:07
Localisation : Guyane

Re: [Calc]Compte a rebours, fermeture, enregistrement

Message par Piaf »

Bonsoir
Nouzon a écrit :il s’ouvre sans nom et le candidat devra l’enregistrer de lui-même
Non à priori l'enregistrement est automatique avec le nom du candidat.
Après pour l'emplacement, il faut remplacer CurDir par le chemin de l'emplacement voulu.
Nouzon a écrit :De plus, j’aimerais que la saisie soit libre et ne dépende pas d’un menu déroulant
J'ai supprimé la liste de validité
Pour l'erreur je ne reproduis pas donc ... donne exactement le message d'erreur envoyé.
Tu avais une feuille 22 et une 23 dans ton fichier, je les ai supprimé. Le bouton devrait fonctionner jusqu'à la question 20.
A tester, mais comme il ne s'agit plus d'un modèle, fais les tests sur des copies.
A la fin du test, avant l'enregistrement, les feuilles sont affichées, les boutons de commande et le code supprimés,
A+
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Libre Office Version: 6.1.6 et Apache OpenOffice 4.1.6 Sur Xubuntu 18.04 AMD64
Nouzon
Membre lOOyal
Membre lOOyal
Messages : 30
Inscription : 13 nov. 2012 01:18

Re: [Calc]Compte a rebours, fermeture, enregistrement

Message par Nouzon »

Impeccable :super: y a redire c'est parfait !

Encore merci et bonne journée :wink:
Libre office 5.0 sous Windows 10 - Obligation de version - (manque de maintenance informatique de mon employeur).
Nouzon
Membre lOOyal
Membre lOOyal
Messages : 30
Inscription : 13 nov. 2012 01:18

Re: [Résolu][Calc]Compte a rebours, fermeture, enregistremen

Message par Nouzon »

Bonjour à tous,

Je reviens vers vous, car j’ai ajouté une feuille supplémentaire afin de calculer les résultats au test.

Lorsque j’ai ajouté la feuille « Résultats » en tant que dernière feuille le fichier ne s’arrête plus en cliquant sur le bouton « Fin du test ».

Du coup, j’ai mis la feuille en première position, seule hic en cliquant sur le bouton « Fin du test », le fichier se fermer sur le résultat, or, je ne souhaite pas que le résultat soit vu par les candidats.

J’ai réussi en changeant la macro a ce niveau en modifiant par case 1:
La modération vous a écrit: mise du code entre balise "code" merci de le faire par vous même

Code : Tout sélectionner

Sub AffichageFeuille
Dim oDoc as Object, maFeuille as Object
	oDoc = thisComponent
	maFeuille = oDoc.CurrentController.ActiveSheet
	Select Case numFeuille
		Case 1
			If oDoc.Sheets(numFeuille).getCellRangeByName("C17").String = "" Then
				MsgBox("Vous devez taper votre nom et prénom avant de pouvoir commencer le test")
				oDoc.CurrentController.Select(oDoc.Sheets(numFeuille).getCellRangeByName("C17"))
				Exit Sub 

Seulement maintenant j’ai quelques petits soucis que j ‘aimerai effacer.

Lorsque l’on clique sur le bouton « Fin du test » le test revient sur la feuille « Démarrer », je souhaiterai que le test reste sur la dernière feuille a la fermeture et sans afficher les autres feuilles.
Car sur certain PC, mais pas toujours certaine feuille ne s’affiche automatiquement.

De plus, lorsque je vais dans Format => feuille => afficher, le « afficher » reste grisé et il est compliqué d’aller sur la feuille « Résultats » pour faire une impression.
J’ai réussi en me servant d’afficher la feuille précédente.

Enfin, juste avant de commencer son épreuve le candidat doit remplir son nom, nom marital et son penon qui s’inscrit via une simple formules dans la feuille « Résultats »
Lorsque le test se termine au bout des 10 minutes ou en cliquant sur le bouton « Fin du test », il n’y a que le nom qui reste dans la feuille « Résultats », le prénom et nom marital ne s’affiche plus.

Merci par avance pour le temps que vous me consacrer et particulièrement à Piaf.
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Dernière modification par Phantéd le 07 nov. 2017 15:05, modifié 1 fois.
Raison : code entre balise
Libre office 5.0 sous Windows 10 - Obligation de version - (manque de maintenance informatique de mon employeur).
Avatar de l’utilisateur
Phantéd
MOOdérateur
MOOdérateur
Messages : 50
Inscription : 09 oct. 2017 14:05

Re: [Résolu][Calc]Compte a rebours, fermeture, enregistremen

Message par Phantéd »

Bonjour.

Résolu le 23 Août 2017.
Nous nous devons de verrouiller ce fil de discussion.

Autre question = autre fil.


Merci de votre collaboration.