[Résolu] [Calc] Macro déclenchée à une heure donnée
Modérateur : Vilains modOOs
Règles du forum
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 !
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 !
-
- Membre enthOOusiaste
- Messages : 437
- Inscription : 26 nov. 2006 11:29
- Localisation : Les Corbières
[Résolu] [Calc] Macro déclenchée à une heure donnée
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,
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 modification par ThierryM le 15 janv. 2007 00:13, modifié 1 fois.
LibreOffice Version: 7.6.2 / Linux Mint Mate Edition 21.2 / Pourquoi privilégier les formats de fichiers ouverts ?
-
- Grand Maître de l'OOffice
- Messages : 11276
- Inscription : 02 mai 2006 08:42
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 ?).
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 ?).
-
- Membre enthOOusiaste
- Messages : 437
- Inscription : 26 nov. 2006 11:29
- Localisation : Les Corbières
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,
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: 7.6.2 / Linux Mint Mate Edition 21.2 / Pourquoi privilégier les formats de fichiers ouverts ?
-
- Membre enthOOusiaste
- Messages : 437
- Inscription : 26 nov. 2006 11:29
- Localisation : Les Corbières
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 :
J'ai récupéré un morceau de code (les références sont à l'intérieur) qui pourrait servir.
Ci-dessous fonction permettant la conversion d'heure pour un champ horaire
A bientôt
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
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
Code : Tout sélectionner
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
Code : Tout sélectionner
' 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
LibreOffice Version: 7.6.2 / Linux Mint Mate Edition 21.2 / Pourquoi privilégier les formats de fichiers ouverts ?
-
- Membre enthOOusiaste
- Messages : 437
- Inscription : 26 nov. 2006 11:29
- Localisation : Les Corbières
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 +
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: 7.6.2 / Linux Mint Mate Edition 21.2 / Pourquoi privilégier les formats de fichiers ouverts ?
-
- Membre enthOOusiaste
- Messages : 437
- Inscription : 26 nov. 2006 11:29
- Localisation : Les Corbières
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 :
A bientôt
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
TimeField1.Time=ConvHeureLong(CDate(valeur de la cellule))
LibreOffice Version: 7.6.2 / Linux Mint Mate Edition 21.2 / Pourquoi privilégier les formats de fichiers ouverts ?
-
- Membre enthOOusiaste
- Messages : 437
- Inscription : 26 nov. 2006 11:29
- Localisation : Les Corbières
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
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: 7.6.2 / Linux Mint Mate Edition 21.2 / Pourquoi privilégier les formats de fichiers ouverts ?
-
- Membre enthOOusiaste
- Messages : 437
- Inscription : 26 nov. 2006 11:29
- Localisation : Les Corbières
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/ ... 125937.ods
A bientôt,
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/ ... 125937.ods
A bientôt,
LibreOffice Version: 7.6.2 / Linux Mint Mate Edition 21.2 / Pourquoi privilégier les formats de fichiers ouverts ?
-
- Grand Maître de l'OOffice
- Messages : 16960
- Inscription : 03 mars 2006 16:02
- Localisation : Venise verte
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.
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 : 24.2 (x64)(12 avril 2024)
Adoptium JRE ou Oracle JRE (x64), Windows 10, Thunderbird, Firefox
Adoptium JRE ou Oracle JRE (x64), Windows 10, Thunderbird, Firefox
-
- Membre enthOOusiaste
- Messages : 437
- Inscription : 26 nov. 2006 11:29
- Localisation : Les Corbières
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 :
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):
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+
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
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
Code : Tout sélectionner
Sub Alarme
msgbox "Alarme déclenchée"
Horloge 'Redémarre l'horloge
End Sub
A+
LibreOffice Version: 7.6.2 / Linux Mint Mate Edition 21.2 / Pourquoi privilégier les formats de fichiers ouverts ?
-
- Membre enthOOusiaste
- Messages : 437
- Inscription : 26 nov. 2006 11:29
- Localisation : Les Corbières
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/ ... 102133.ods
J'espère avoir apporté quelques éclairages utiles.
A bientôt
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/ ... 102133.ods
J'espère avoir apporté quelques éclairages utiles.
A bientôt
LibreOffice Version: 7.6.2 / Linux Mint Mate Edition 21.2 / Pourquoi privilégier les formats de fichiers ouverts ?
-
- Grand Maître de l'OOffice
- Messages : 16960
- Inscription : 03 mars 2006 16:02
- Localisation : Venise verte
-
- GourOOu
- Messages : 9629
- Inscription : 18 sept. 2006 09:40
- Localisation : France
Bonjour à tous,
J'ai pas (encore) vu le code de Thierry, mais on devrait pouvoir "mixer" tout ça, non
Michel donne ici un bout de code pour ouvrir un fichier.jeanmimi a écrit :Comment faudrait il faire pour lancer un fichier
J'ai pas (encore) vu le code de Thierry, mais on devrait pouvoir "mixer" tout ça, non
-
- Grand Maître de l'OOffice
- Messages : 16960
- Inscription : 03 mars 2006 16:02
- Localisation : Venise verte
bonjour Jeff,
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 !
Je ne suis pas prêt d'avoir un "dring dring" lorsque ce sera l'heure !on devrait pouvoir "mixer" tout ça, non
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 : 24.2 (x64)(12 avril 2024)
Adoptium JRE ou Oracle JRE (x64), Windows 10, Thunderbird, Firefox
Adoptium JRE ou Oracle JRE (x64), Windows 10, Thunderbird, Firefox
-
- GourOOu
- Messages : 9629
- Inscription : 18 sept. 2006 09:40
- Localisation : France
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
Je vais laisser faire le spécialiste...
Je vais laisser faire le spécialiste...
-
- Membre enthOOusiaste
- Messages : 437
- Inscription : 26 nov. 2006 11:29
- Localisation : Les Corbières
Bonjour,
Ici plutôt le "tatônneur"...
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+
Ici plutôt le "tatônneur"...
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: 7.6.2 / Linux Mint Mate Edition 21.2 / Pourquoi privilégier les formats de fichiers ouverts ?
-
- Membre enthOOusiaste
- Messages : 437
- Inscription : 26 nov. 2006 11:29
- Localisation : Les Corbières
Salut,
Voici le nouveau fil concernant ce problème de son :
http://user.services.openoffice.org/fr/ ... c3515.html
A bientôt,
Voici le nouveau fil concernant ce problème de son :
http://user.services.openoffice.org/fr/ ... c3515.html
A bientôt,
LibreOffice Version: 7.6.2 / Linux Mint Mate Edition 21.2 / Pourquoi privilégier les formats de fichiers ouverts ?