[Résolu] [Calc] Macro déclenchée à une heure donnée

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 !

[Résolu] [Calc] Macro déclenchée à une heure donnée

Messagepar ThierryM » 27 Déc 2006 15:33

Bonjour,
Je souhaiterais créer une macro permettant de déclencher une alarme (sonore ou visuelle) à des heures données à partir d'une heure de départ que j'indiquerais. Le lancement se ferait à partir d'un bouton.
J'ai une table qui me permet d'obtenir automatiquement tous les horaires auxquels je dois intervenir à partir de l'heure de départ.
Maintenant il faudrait que le programme me prévienne à ces moments-là (ou 2 minutes avant, ce que je pourrais paramétrer).
Je pensais utiliser la fonction TIME pour me caler sur l'heure de mon système et je pensais comparer toutes les minutes avec une fonction WAIT (ou une boucle) mes horaires calculés avec l'heure TIME jusqu'à ce qu'il y ait équivalence auquel cas j'aurais une alerte sonore (beep).
Est-ce une solution envisageable ou existe-t-il quelque chose de plus direct ?
Je n'ai rien trouvé sur le web concernant ce genre de fonction.

Merci et à bientôt,
Dernière édition par ThierryM le 15 Jan 2007 01:13, édité 1 fois.
LibreOffice Version: 6.0.7.3 version ubuntu / Ubuntu Trusty 18.04 / Pourquoi privilégier les formats de fichiers ouverts ?
ThierryM
Membre cOOnverti
Membre cOOnverti
 
Message(s) : 383
Inscrit le : 26 Nov 2006 12:29
Localisation : Les Corbières

Messagepar Pierre-Yves Samyn » 27 Déc 2006 15:56

Bonjour

Je n'ai pas réalisé ce genre de choses. Quelques idées qui me viennent :

- l'instruction wait interrompt l'exécution du programme (pas le système) pendant la durée spécifiée, donc cela empêche tout autre traitement de l'utilisateur.

- il devrait être possible de créer un listener (gestionnaire d'événements) sur un objet. Ceci permettrait de continuer à travailler... Le listener devrait pouvoir interroger le système régulièrement (voir les fonctions Timer, et GetSystemTicks par exemple ?).
Pierre-Yves Samyn
Grand Maître de l'OOffice
Grand Maître de l'OOffice
 
Message(s) : 11276
Inscrit le : 02 Mai 2006 09:42

Messagepar ThierryM » 27 Déc 2006 17:16

Salut,
Merci pour ces approches.
j'avais pensé à un Listener (avantage c'est qu'il travaille en continue sans bloquer le programme contrairement à WAIT) mais je pensais qu'un listener ne réagissait qu'en cas d'action de l'utilisateur (détection d'un changement dans une cellule, action avec la souris, le clavier...) ?
J'avais trouvé les fonctions TIMER et GetSystemTicks mais je ne voyais pas comment les utiliser. De toutes façons je pense qu'il faut faire une comparaison cycliquement (chaque minute) et envisager une échappatoire en appuyant sur un bouton STOP par exemple.

A bientôt,
LibreOffice Version: 6.0.7.3 version ubuntu / Ubuntu Trusty 18.04 / Pourquoi privilégier les formats de fichiers ouverts ?
ThierryM
Membre cOOnverti
Membre cOOnverti
 
Message(s) : 383
Inscrit le : 26 Nov 2006 12:29
Localisation : Les Corbières

Messagepar ThierryM » 29 Déc 2006 03:44

Salut à tous,
Je suis en train de travailler à cette macro.
J'ai une boîte de dialogue dans laquelle j'ai un champ de texte dans lequel s'affiche l'heure en cours : à l'ouverture, pas de problème , l'heure s'affiche. Par contre il faudrait que je puisse rafraîchir (chaque minute) ce champ de façon à avoir une heure dynamique. Comment faire ?

Voici mon code qui ouvre cette boîte de dialogue :

Code : Tout sélectionner   AgrandirRéduire
Sub MontreDialogueParametres
'Charge la boîte de dialogue en mémoire
DialogLibraries.LoadLibrary("Standard")
oDlg = CreateUnoDialog(DialogLibraries.Standard.Interface)
'Affiche l'heure actuelle
champHeure=oDlg.getControl("ChampHeure")
champHeureDepart=oDlg.getControl("ChampHeureDepart")
champHeure.Time=ConvHeureLong(Time)
champHeureDepart.Time=champHeure.Time 'Fixe heure par défaut à l'ouverture
'ouvre la boîte de dialogue
oDlg.Execute()
End Sub


J'ai récupéré un morceau de code (les références sont à l'intérieur) qui pourrait servir.
Code : Tout sélectionner   AgrandirRéduire
Sub Horloge
' d'après Danny Brewer sur http://www.ooomacros.org/dev.php
Dim nCurrentTime As Long, heurelong as Long
   nCurrentTime = Timer

   Do While bClockRunning  'état false stoppe la boucle
      If nCurrentTime = Timer Then
         Wait 100
      Else
         nCurrentTime = Timer
         Dim lSec As Long, lMin As Long, lHour As Long
         lSec = nCurrentTime
         lMin = Int( lSec / 60 )
         lSec = lSec Mod 60
         lHour = Int( lMin / 60 )
         lMin = lMin Mod 60
         heurelong=lSec*100+lMin*10000+lHour*1000000
         heure=ConvHeure(heurelong)
      EndIf
   Loop
End Sub


Ci-dessous fonction permettant la conversion d'heure pour un champ horaire
Code : Tout sélectionner   AgrandirRéduire
' conversion d'une chaîne sous forme heure, minute, seconde
' en un type long pour pouvoir écrire dans un champ horaire de type Time
Function ConvHeureLong(chaineHeure As string) As Long
Dim hr As Long, mn As Long, sec As Long
hr  = hour(chaineHeure)*1000000
mn  = minute(chaineHeure)* 10000
sec = second(chaineHeure)*100
ConvHeureLong = hr+mn+sec
End Function


A bientôt
LibreOffice Version: 6.0.7.3 version ubuntu / Ubuntu Trusty 18.04 / Pourquoi privilégier les formats de fichiers ouverts ?
ThierryM
Membre cOOnverti
Membre cOOnverti
 
Message(s) : 383
Inscrit le : 26 Nov 2006 12:29
Localisation : Les Corbières

Messagepar ThierryM » 11 Jan 2007 01:33

Bonjour,
Je suis encore dans ma macro concernant les manipulations de durées et d'horaires.
Quelqu'un aurait-il une formule permettant de convertir une heure sous forme décimale en une heure sous forme HHMMSS (par exemple passer de 0,25 à 6:00) ?

Je trouve la gestion des heures assez laborieuse sous OOo. Notamment dans les boîtes de dialogue avec les TimeFields qui nécessitent des conversions si l'on veut écrire ces valeurs de temps vers une cellule et vice-versa, même si la cellule est formatée en heure.

Merci et A +
LibreOffice Version: 6.0.7.3 version ubuntu / Ubuntu Trusty 18.04 / Pourquoi privilégier les formats de fichiers ouverts ?
ThierryM
Membre cOOnverti
Membre cOOnverti
 
Message(s) : 383
Inscrit le : 26 Nov 2006 12:29
Localisation : Les Corbières

Messagepar ThierryM » 13 Jan 2007 18:53

Salut,

Pour convertir une heure à partir d'une valeur décimale (c'est à dire quand on extrait une valeur d'une cellule contenant une heure formatée, cette valeur est sous forme de décimal <1), il suffit d'utiliser la fonction CDate. En fait je cherchais une fonction du style CTime (qui n'existe pas, mais je comprends maintenant pourquoi).
En effet dans un format de date, l'heure correspond à la partie décimale.

Par exemple :
6:00:00 (dans une cellule sous format HH:MM:SS) est en réalité une valeur égale à 0,25. Si je veux récupérer dans une macro la valeur de la cellule 6:00:00 (et non 0,25), je dois utiliser Cdate(valeur de la cellule) qui me donne 6:00:00 .

Par contre si je veux afficher cette valeur que je viens de récupérer, dans une boîte de dialogue dans un champ horaire "TimeField1", je dois combiner les fonctions CDate et ConvHeureLong (voir cette fonction plus haut dans ce fil de discussion). Ce qui donne :

Code : Tout sélectionner   AgrandirRéduire
TimeField1.Time=ConvHeureLong(CDate(valeur de la cellule))


A bientôt
LibreOffice Version: 6.0.7.3 version ubuntu / Ubuntu Trusty 18.04 / Pourquoi privilégier les formats de fichiers ouverts ?
ThierryM
Membre cOOnverti
Membre cOOnverti
 
Message(s) : 383
Inscrit le : 26 Nov 2006 12:29
Localisation : Les Corbières

Messagepar ThierryM » 14 Jan 2007 18:54

Salut,
J'ai un peu avancé dans ma réflexion pour déclencher une alarme à une heure donnée avec un LISTENER.
Je peux mettre un Listener sur une seule cellule. Cette cellule (Format HH:MM) affichant l'heure en cours avec la fonction MAINTENANT().

Maintenant, il faudrait que j'actualise automatiquement toutes les minutes mon document avec une fonction CALCULATE pour mettre à jour cette cellule.

Quelqu'un aurait-il une astuce pour un recalcul s'opérant à intervalle régulier ?

A bientôt
LibreOffice Version: 6.0.7.3 version ubuntu / Ubuntu Trusty 18.04 / Pourquoi privilégier les formats de fichiers ouverts ?
ThierryM
Membre cOOnverti
Membre cOOnverti
 
Message(s) : 383
Inscrit le : 26 Nov 2006 12:29
Localisation : Les Corbières

Messagepar ThierryM » 15 Jan 2007 01:12

:D Ca y est !
J'ai résolu mon problème de défilement du temps (comme une horloge) dans une cellule et dans une boîte de dialogue.

Voici une ébauche de fichier (à adapter selon les besoins) pour déclencher une alarme avec un listener sur une cellule B1. Si vous n'avez pas besoin d'alarme les 4 routines concernant le listener sont inutiles.
Vous pouvez voir le résultat dans le fichier ci-joint à cette adresse.

http://user.services.openoffice.org/fr/ci-joint/fichier/2007/01/15-125937.ods

A bientôt,
LibreOffice Version: 6.0.7.3 version ubuntu / Ubuntu Trusty 18.04 / Pourquoi privilégier les formats de fichiers ouverts ?
ThierryM
Membre cOOnverti
Membre cOOnverti
 
Message(s) : 383
Inscrit le : 26 Nov 2006 12:29
Localisation : Les Corbières

Messagepar jeanmimi » 15 Jan 2007 10:35

Bonjour,
C'est un très beau travail !
Je l'ai sauvegardé sous le titre "Horloge dans Calc".
As tu réussi à déclencher aussi une alarme deux minutes avant l'heure souhaitée ?
Car soit j'ai rien entendu, soit je n'ai pas dû indiquer l'heure au bon endroit.
LibreOffice Version : Version: 6.2.3.2 (x64) (28 avril 2019)
Java (x64) 1.8.0_xxx, Windows 10, Thunderbird, Firefox
Avatar de l’utilisateur
jeanmimi
Grand Maître de l'OOffice
Grand Maître de l'OOffice
 
Message(s) : 14842
Inscrit le : 03 Mars 2006 17:02
Localisation : Venise verte

Messagepar ThierryM » 15 Jan 2007 17:09

Salut,
En fait, je n'ai pas paramétré l'alarme.
Sur l'exemple, il faudrait rajouter un TimeField (champHeureDepartBox dans le code ci-dessous) dans la boîte de dialogue dans lequel on indiquerait l'heure de l'alarme.

Ensuite, il faudrait écrire un listener de ce style :

Code : Tout sélectionner   AgrandirRéduire
Sub LS_modified(evt as object) 'Macro qui se déclenche dès que l'événement est détecté (changement dans les cellules)
'MsgBox "Changement détecté"
a=oCells.Value 'récupère l'heure dans la cellule B1
a1=CDate(a)
b=champHeureDepartBox.Time
b1=ConvHeure(b)
If a1=b1 Then 'Condition vérifiant l'équivalence des 2 heures
    alarme 'déclenche la macro "alarme"
End If
End Sub


Ensuite dans la macro alarme ce code pour voir le déclenchement (les beep sonnent aléatoirement avec un temps de retard, bref ne sont pas fiables):

Code : Tout sélectionner   AgrandirRéduire
Sub Alarme
   msgbox "Alarme déclenchée"
   Horloge 'Redémarre l'horloge
End Sub


Dès que je peux j'essaie de fournir un exemple de ce style (en rajoutant un TimeField permettant d'avertir 2 minutes avant si on le désire : bref un paramétrage).
A+
LibreOffice Version: 6.0.7.3 version ubuntu / Ubuntu Trusty 18.04 / Pourquoi privilégier les formats de fichiers ouverts ?
ThierryM
Membre cOOnverti
Membre cOOnverti
 
Message(s) : 383
Inscrit le : 26 Nov 2006 12:29
Localisation : Les Corbières

Messagepar ThierryM » 15 Jan 2007 22:30

Voici donc la version finale d'une macro permettant de déclencher un événement à une heure donnée (comme une alarme) : dans cette macro il s'agit de l'affichage d'un msgbox à l'heure voulue (c'est en fait la routine "Alarme" qui détermine ce qui doit être fait).

Il y a une cellule (B1) qui affiche le temps qui défile comme une horloge.

Une boîte de dialogue permet d'afficher une horloge qui défile, de déterminer une heure d'alarme, et de paramètrer une anticipation du déclenchement de la macro par rapport à l'heure d'alarme (de manière à être prévenu quelques minutes avant l'échéance).

Voici le lien vers ce fichier
http://user.services.openoffice.org/fr/ci-joint/fichier/2007/01/15-102133.ods

J'espère avoir apporté quelques éclairages utiles.
A bientôt
LibreOffice Version: 6.0.7.3 version ubuntu / Ubuntu Trusty 18.04 / Pourquoi privilégier les formats de fichiers ouverts ?
ThierryM
Membre cOOnverti
Membre cOOnverti
 
Message(s) : 383
Inscrit le : 26 Nov 2006 12:29
Localisation : Les Corbières

Messagepar jeanmimi » 16 Jan 2007 09:46

Comment faudrait il faire pour lancer un fichier, par exemple un son .wav, à l'heure fixée par l'alarme ?
LibreOffice Version : Version: 6.2.3.2 (x64) (28 avril 2019)
Java (x64) 1.8.0_xxx, Windows 10, Thunderbird, Firefox
Avatar de l’utilisateur
jeanmimi
Grand Maître de l'OOffice
Grand Maître de l'OOffice
 
Message(s) : 14842
Inscrit le : 03 Mars 2006 17:02
Localisation : Venise verte

Messagepar Jeff » 16 Jan 2007 10:07

Bonjour à tous,

jeanmimi a écrit:Comment faudrait il faire pour lancer un fichier
Michel donne ici un bout de code pour ouvrir un fichier.

J'ai pas (encore) vu le code de Thierry, mais on devrait pouvoir "mixer" tout ça, non :?:
À lire avant tout !

Pour télécharger Apache OpenOffice

AOO 4.1.6 sur Debian Stable 9.9 (stretch) et sur Win 10 pro x64
Avatar de l’utilisateur
Jeff
GourOOu
GourOOu
 
Message(s) : 8026
Inscrit le : 18 Sep 2006 10:40
Localisation : France

Messagepar jeanmimi » 16 Jan 2007 10:37

bonjour Jeff,
on devrait pouvoir "mixer" tout ça, non

Je ne suis pas prêt d'avoir un "dring dring" lorsque ce sera l'heure !
J'ai plutôt eu l'impression que le code que tu signales sert à ouvrir un dossier externe à l'application.
Mais bon, je ne suis pas spécialiste. Si ça se trouve, ThierryM est en train de concocter une solution !
LibreOffice Version : Version: 6.2.3.2 (x64) (28 avril 2019)
Java (x64) 1.8.0_xxx, Windows 10, Thunderbird, Firefox
Avatar de l’utilisateur
jeanmimi
Grand Maître de l'OOffice
Grand Maître de l'OOffice
 
Message(s) : 14842
Inscrit le : 03 Mars 2006 17:02
Localisation : Venise verte

Messagepar Jeff » 16 Jan 2007 10:43

Ch'uis pas spécialiste non plus, apparemment ; j'ai supprimé la msgbox alarme, et, avec le bout de code de MichelXld je lance un fichier wav ; là où tu as tout à fait raison, c'est que j'ouvre Médiaplayer en même temps, et en plus la macro de Thierry éprouve soudain un mal fou à s'arrêter :mrgreen:

Je vais laisser faire le spécialiste...
À lire avant tout !

Pour télécharger Apache OpenOffice

AOO 4.1.6 sur Debian Stable 9.9 (stretch) et sur Win 10 pro x64
Avatar de l’utilisateur
Jeff
GourOOu
GourOOu
 
Message(s) : 8026
Inscrit le : 18 Sep 2006 10:40
Localisation : France

Messagepar ThierryM » 16 Jan 2007 17:16

Bonjour,
Ici plutôt le "tatônneur"...:wink:
J'ai exactement le même soucis que vous à savoir ouvrir un son .wav plutôt qu'une msgbox (pour des raisons tout simplement pratique).
Je n'ai pas trouvé de solution mis à par passer par l'ouverture d'une application externe comme Jeff le fait (je ne l'ai pas essayé car je n'avais pas le code de Michel).
Le problème me semble-t-il est de pouvoir "redonner" ensuite la main à OOo Calc (juste après le lancement de l'autre programme pour revenir à OOo) de manière à continuer la macro peut-être pour éviter qu'elle déraille ? Peut-être est-ce un problème au niveau du Listener ?
Je n'ai pas d'autres idées pour l'instant...

Ne vaudrait-il pas mieux ouvrir justement un autre fil pour avoir des éclairages plus précis quant à ce souci à savoir comment jouer un son wav (ou d'un autre type : .mp3, etc) à partir de calc ? En effet, il me semble qu'à partir d'OOo Impress on peut jouer un son, n'est-ce pas ?

A+
LibreOffice Version: 6.0.7.3 version ubuntu / Ubuntu Trusty 18.04 / Pourquoi privilégier les formats de fichiers ouverts ?
ThierryM
Membre cOOnverti
Membre cOOnverti
 
Message(s) : 383
Inscrit le : 26 Nov 2006 12:29
Localisation : Les Corbières

Messagepar ThierryM » 17 Jan 2007 11:08

Salut,
Voici le nouveau fil concernant ce problème de son :
http://user.services.openoffice.org/fr/forum/ftopic3515.html

A bientôt,
LibreOffice Version: 6.0.7.3 version ubuntu / Ubuntu Trusty 18.04 / Pourquoi privilégier les formats de fichiers ouverts ?
ThierryM
Membre cOOnverti
Membre cOOnverti
 
Message(s) : 383
Inscrit le : 26 Nov 2006 12:29
Localisation : Les Corbières


Retour vers Macros et API

Qui est en ligne ?

Utilisateur(s) parcourant ce forum : Google [Bot] et 2 invité(s)