[Résolu][Calc] Multi-Chronos

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 !
markotxe
Membre OOrganisé
Membre OOrganisé
Messages : 83
Inscription : 09 févr. 2018 09:55

[Résolu][Calc] Multi-Chronos

Message par markotxe »

Bonsoir,
J'aimerais avoir sur une feuille plusieurs chronomètres indépendants les-uns des autres. Le but est de pouvoir prendre les temps de plusieurs personnes en départs différés (une sorte de contre la montre dans le tour de France).

J'ai suivi au paravent une piste (dialogbox) qui s'est avérée être sans issue. Sous les conseils avisés d'un des intervenants du forum, j'ai repris le concept depuis sa base et me revoilà plus déterminé que jamais. J'ai donc explorer les différents fils du forum et notamment les exemples évoqués dans le fil suivant https://forum.openoffice.org/fr/forum/v ... es#p174417. Pourtant, je n'arrive toujours pas à adapter ces exemples au mien.
(Comme le montre le document ci-joint, seul, le premier est fonctionnel les autres sont totalement inactifs.)

Merci de votre attention, toutes suggestions, pistes, recommandations, encouragements sont les bienvenus

Amicalement, Marc
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Dernière modification par markotxe le 14 mai 2019 08:35, modifié 2 fois.
LibO 7.5.2 et Open Office 4.1.14
Window11
(Obligation de version).
Avatar de l’utilisateur
OOotremer971
ManitOOu
ManitOOu
Messages : 2744
Inscription : 16 avr. 2010 13:31

Re: [Calc] Multi-Chronos

Message par OOotremer971 »

Bonjour,

Il faut savoir qu'il n'est pas possible de lancer plusieurs macro en même temps avec AOO ou LO. Ce que tu souhaites faire, revient en gros à lancer une nouvelle macro à chaque fois que tu démarres un chrono , ce n'est donc pas envisageable.

Avant d'étudier l'aspect visuel ou esthétique de la chose, il faut se pencher sur son fonctionnement et sa faisabilité.

Comme les départs son différés, on peut facilement enregistrer dans un tableau (virtuel) l'heure de départ d'un chrono et ainsi de suite pour les autres. Ensuite lorsque le bouton pose ou stop est activé, on mémorise encore une fois dans le tableau l'action et l'heure. Ainsi il devient facile de connaître les temps réalisés en nage et en pause.

Après la difficulté réside dans l'affichage d'un temps qui défile dans plusieurs chrono, simultanément, puisqu'il n'est pas possible de lancer plusieurs macro en même temps.

Utiliser des bouton pour lancer ou arrêter le chrono complique les choses car il faut que chaque bouton ait un nom spécifique pour pourvoir le distinguer des autres. Là dans ton fichier il ont tous le même nom car tu as fait du copier/coller.

Bref, J'ai déjà une petite idée de comment aborder la chose, mais pas sûr d'être suffisamment disponible pour m'y atteler. Il y a ici des spécialistes du langage Python, langage à mon avis plus approprié pour réaliser ton projet. Attendons un peu pour voir.

A+
En principe, toujours à jour des dernières versions dites stables
AOO
LibreOffice
Debian 10 et 11
markotxe
Membre OOrganisé
Membre OOrganisé
Messages : 83
Inscription : 09 févr. 2018 09:55

Re: [Calc] Multi-Chronos

Message par markotxe »

Merci OOotremer,
Je vais suivre vos recommandations en m'appuyant sur les exemples précités (qui reprennent le concept que vous décrivez).

Merci encore.
LibO 7.5.2 et Open Office 4.1.14
Window11
(Obligation de version).
Avatar de l’utilisateur
OOotremer971
ManitOOu
ManitOOu
Messages : 2744
Inscription : 16 avr. 2010 13:31

Re: [Calc] Multi-Chronos

Message par OOotremer971 »

Dans le fichier joint, réduit à sa plus simple expression, un exemple du principe que j'envisage pour solutionner ta requête.

Le principe :
1)Lorsqu'une cession va commencer on sélectionne GO en A1. Un chrono se mets en marche (on verra après à quoi il peut servir.) Désormais la macro est en marche et elle boucle sur elle même jusqu'à ce que A1 affiche STOP ou RESET

2) dans les tableaux en dessous, lorsqu’un nageur plonge, On sélectionne GO dans la colonne A sous son nom. Un chrono se met en marche à coté du nom et s'arrête si on sélectionne PAUSE ou STOP toujours sous son nom

et ainsi de suite pour les autres nom.

Là il s'agit d'une ébauche pour te permettre de valider ou non le principe. Après on verra pour d'autre fonctionnalité et présentation :

Code : Tout sélectionner

Sub Main(oEvt)
'xray oEvt
v = GetSystemTicks
oDoc = Thiscomponent
sheet = oEvt.Spreadsheet
dl = Ubound(oEvt.Spreadsheet.RowDescriptions)
Select Case oEvt.AbsoluteName
	Case "$Feuille1.$A$1"
		cel = sheet.getCellRangeByName("B1")
		Temps = Cel.value
		Select Case oEvt.String
			Case "GO"
				For x = 4 To dl step 7
					action = sheet.GetCellByPosition(0,x).String
					chrono = sheet.GetCellByPosition(1,x)'.Value 
					Select Case Action
						Case "GO"
							TempsIndv = chrono.Value
							TempsIndv = TempsIndv+1
							chrono.Value = TempsIndv
						'Case "PAUSE"
						'Case "STOP"
					end Select
				next
					
				Do While (GetSystemTicks-v)<1000
					Wait 1
				Loop	
				Temps = Temps+((GetSystemTicks-v)/1000)
				Cel.value = Temps
				Main(oEvt)
			Case "STOP"
				Exit Sub
			Case "RESET"
				Cel.Value = ""
				For x = 4 To dl step 7
					chrono = sheet.GetCellByPosition(1,x)
					chrono.Value = ""
				next
		End Select
End Select
End Sub
et le fichier pour tester :

A+
 Ajout : Fichier remplacé. Désolé pour ceux qui ont téléchargé le précédent qui ne fonctionnait pas 
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
En principe, toujours à jour des dernières versions dites stables
AOO
LibreOffice
Debian 10 et 11
Avatar de l’utilisateur
Hubert Lambert
SuppOOrter
SuppOOrter
Messages : 1214
Inscription : 06 avr. 2016 07:26

Re: [Calc] Multi-Chronos

Message par Hubert Lambert »

Bonjour à tous,

D'abord un grand bravo à OOotremer971 pour avoir brillamment contourné le problème en basic !

Il est en effet possible en python de lancer plusieurs macros en parallèle (la formule magique est "thread"). Je joins un exemple très rapide pour illustrer la chose, avec le code suivant :

Code : Tout sélectionner

import pythonscript
from time import sleep
from threading import Thread

def START(*args):
    cmd = args[0]
    ligne = int(cmd.split('&')[-1].split('=')[-1]) -1
    doc = XSCRIPTCONTEXT.getDocument()
    if hasattr(pythonscript, "kro{}".format(ligne)):
        return
    cell = doc.CurrentController.ActiveSheet.getCellByPosition(1, ligne)
    duree = 10
    t1 = Thread(target=kro, args=(cell, ligne, duree))
    t1.start()

def kro(cell, ligne, t):
    setattr(pythonscript, "kro{}".format(ligne), True)
    v = cell.Value
    centisec = float(1)/(60*60*24*100)
    while getattr(pythonscript, "kro{}".format(ligne)):
        v += centisec
        cell.setValue(v)
        sleep(1./100)
    delattr(pythonscript, "kro{}".format(ligne))

def STOP(*args):
    cmd = args[0]
    ligne = int(cmd.split('&')[-1].split('=')[-1]) -1
    doc = XSCRIPTCONTEXT.getDocument()
    if hasattr(pythonscript,  "kro{}".format(ligne)):
        setattr(pythonscript, "kro{}".format(ligne), False)
    else:
        doc.CurrentController.ActiveSheet.getCellByPosition(1, ligne).setValue(0)
Cordialement.
 Ajout : Pour ajouter un chrono, il suffit d'en copier un et de le coller à la suite. 
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
AOOo 4.1.7 sur Win10
AOOo 4.1.x sur Linux Mint
LibreOffice 5.x/6.x sur Linux Mint
--
| « Nos défauts devraient nous donner une qualité : l'indulgence pour les défauts des autres » (Rivarol)
markotxe
Membre OOrganisé
Membre OOrganisé
Messages : 83
Inscription : 09 févr. 2018 09:55

Re: [Calc] Multi-Chronos

Message par markotxe »

Bonjour,
J'étais si plongé sur ce nouveau programme que je suis complétement passé à côté de vos messages… Et on peut dire que vos deux propositions balayent d'un revers de la main tout ce que j'ai pu faire cette après-midi

D'abord OOotremer971, effectivement votre approche est tout à fait ingénieuse. Bravo! Très malin même. J'ai essayé en vain de reproduire le même cheminement, à savoir prendre un chrono de référence pour donner en quelque sorte le tempo aux autres. Vous y arrivez avec une facilité presque déconcertante...
Comme vous l'aviez annoncé, il s'agit d'une base de travail perfectible mais j'ajoute solide. :bravo:
Plusieurs questions se bousculent dans ma tête mais avant de me lancer je vais essayer de bien digérer ce qui se présente sous mes yeux.

Ensuite Hubert Lambert, votre proposition est tout simplement magnifique, on pourrait presque l'utiliser dès à présent. Très maniable et instinctive, j'apprécie particulièrement le fait qu'on puisse voir défiler le temps de chaque chrono . C'est beau et très proche de ce que j'imaginais dans mes rêves.
Le seul problème et je m'excuse de le soulever, c'est que les secondes défilent de manière saccadées ce qui provoque une perte. (Pour un temps réel de 20 secondes on perd environ 9 secondes).

Vous l'aviez compris entre ces deux pistes mon coeur balance, je ne peux donc pas choisir entre l'une ou l'autre et vais essayer de m'agripper fermement aux deux perches que vous m'avez lancées.
mais d'abord, il me faudra bien assimiler tout ça.

Je vous tiendrais au courant. Merci, merci, merci.
LibO 7.5.2 et Open Office 4.1.14
Window11
(Obligation de version).
Avatar de l’utilisateur
OOotremer971
ManitOOu
ManitOOu
Messages : 2744
Inscription : 16 avr. 2010 13:31

Re: [Calc] Multi-Chronos

Message par OOotremer971 »

markotxe a écrit :Plusieurs questions se bousculent dans ma tête mais avant de me lancer je vais essayer de bien digérer ce qui se présente sous mes yeux.
Selon l'orientation que tu souhaites donner à ton projet, pense à la possibilité d'ouvrir un nouveau sujet justement dans la section projet de ce forum. L'avantage de cette section contrairement à celle-ci, est que l'on peut y poser plusieurs questions par fil, débattre du bien fondé de telle ou telle décision. Elle permet aussi de définir dès le départ un cahier des charges détaillé, décrivant toutes les fonctionnalités souhaitées pour ce projet. Cela évite souvent les "reproches" du genre : il eut été préférable de le dire avant car cela remet en question la logique de base sur laquelle s'étaye la réalisation du projet. et du coup tout est à refaire...

A+
En principe, toujours à jour des dernières versions dites stables
AOO
LibreOffice
Debian 10 et 11
Avatar de l’utilisateur
Hubert Lambert
SuppOOrter
SuppOOrter
Messages : 1214
Inscription : 06 avr. 2016 07:26

Re: [Calc] Multi-Chronos

Message par Hubert Lambert »

markotxe a écrit :Le seul problème et je m'excuse de le soulever...
Vous faites bien :wink: .
markotxe a écrit :..., c'est que les secondes défilent de manière saccadées ce qui provoque une perte. (Pour un temps réel de 20 secondes on perd environ 9 secondes).
En effet, le temps d'exécution de la macro est trop lent. Il doit être possible de l'implémenter de manière plus rationnelle, ou se contenter d'une précision à la seconde, qui semble fonctionner correctement.
AOOo 4.1.7 sur Win10
AOOo 4.1.x sur Linux Mint
LibreOffice 5.x/6.x sur Linux Mint
--
| « Nos défauts devraient nous donner une qualité : l'indulgence pour les défauts des autres » (Rivarol)
Avatar de l’utilisateur
OOotremer971
ManitOOu
ManitOOu
Messages : 2744
Inscription : 16 avr. 2010 13:31

Re: [Calc] Multi-Chronos

Message par OOotremer971 »

Bonjour,

Une nouvelle mouture légèrement améliorée :
Markotxe.png
1) La cellule A1 permet de lancer le chrono principal, de l'arrêter ou de remettre les compteur à zéro.
2) La cellule G1 permet, en sélectionnant "Ajouter", d'ajouter un nouveau tableau vierge à la suite des autres :P. Le tableau modèle est situé en H1:S4. Si il est paramétré sur Go et son chrono démarrera dés qu'il aura été ajouté à la suite des autres.
3) Chacun des tableau dispose d'un bouton Go pour lancer le chrono, d'un bouton PAUSE pour enregistrer le temps de pause dans une cellule la première fois puis dans une autre cellule à la prochaine pause etc... d'un bouton REPRISE basé sur le même principe de mémorisation une ligne en dessous, et pour finir d'un bouton STOP pour arrêter le chrono d'un tableau
4) Le bouton STOP de la cellule A1 arrête tous les chrono de tous les tableaux.

Code : Tout sélectionner

Sub Main(oEvt)
oDoc = Thiscomponent
sheet = oEvt.Spreadsheet
cel = oEvt.AbsoluteName
v = GetSystemTicks
dl = (sheet.getCellRangeByName("B2").value*6)
Select Case oEvt.AbsoluteName
	Case "$Feuille1.$A$1"
		cel = sheet.getCellRangeByName("B1")
		Temps = Cel.value
		Select Case oEvt.String
			Case "STOP"
				For x = 4 To dl step 6
					action = sheet.GetCellByPosition(0,x)
					action.String = "STOP"
				next
				Exit Sub
			Case "GO"
				Do While (GetSystemTicks-v)<1000
					Wait 1
				Loop	
				Temps = Temps+(((GetSystemTicks-v)/1000)/86400)
				Cel.Value = Temps
				For x = 4 To dl step 6
					action = sheet.GetCellByPosition(0,x)
					Select Case Action.String
						Case "GO"
							chrono = sheet.GetCellByPosition(1,x)
							TempsIndv = chrono.Value
							TempsIndv = TempsIndv+(((GetSystemTicks-v)/1000)/86400)
							chrono.Value = TempsIndv
						Case "PAUSE"
							for y = 11 to 1 step -1
								cell = sheet.GetCellByPosition(y,x+2)
								if cell.String <>"" Then 
									y=y+1
									exit for
								end if
							next					
							chrono2 = sheet.GetCellByPosition(y,x+1)
							TempsIndv2 = chrono2.Value
							TempsIndv2 = TempsIndv2+(((GetSystemTicks-v)/1000)/86400)
							chrono2.Value = TempsIndv2
						Case "REPRISE"
							for y = 11 to 1 step -1
								cell = sheet.GetCellByPosition(y,x+1)
								if cell.String <>"" Then 
									y=y
									exit for
								end if
							next								
							chrono3 = sheet.GetCellByPosition(y,x+2)
							TempsIndv3 = chrono3.Value
							TempsIndv3 = TempsIndv3+(((GetSystemTicks-v)/1000)/86400)
							chrono3.Value = TempsIndv3			
						'Case "STOP"
					end Select
				next x
				Select Case sheet.getCellByPosition(6,0).String
					Case "Ajouter"
						sheet.getCellByPosition(6,0).SetString("")
						Source = sheet.getCellRangeByName("H1:S4")
						Destination = sheet.getCellByPosition(0,dl+3)
						sheet.copyRange(Destination.CellAddress, Source.RangeAddress)		
				End Select	
			Main(oEvt)			
			Case "RESET"
				Cel.Value = ""
				For x = 4 To dl step 6
					chrono = sheet.GetCellByPosition(1,x)					
					chrono.Value = ""
					plagepropre = sheet.GetCellRAngeByName("H3:S4").FormulaArray
					plage = sheet.GetCellRangeByPosition(0,x+1,11,x+2)
					plage.FormulaArray = plagepropre 
				next
		End Select
End Select
End Sub
et le fichier pour tester :
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
En principe, toujours à jour des dernières versions dites stables
AOO
LibreOffice
Debian 10 et 11
Avatar de l’utilisateur
Hubert Lambert
SuppOOrter
SuppOOrter
Messages : 1214
Inscription : 06 avr. 2016 07:26

Re: [Calc] Multi-Chronos

Message par Hubert Lambert »

Et pour alimenter la réflexion, la version python qui corrige le problème de latence :) .
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
AOOo 4.1.7 sur Win10
AOOo 4.1.x sur Linux Mint
LibreOffice 5.x/6.x sur Linux Mint
--
| « Nos défauts devraient nous donner une qualité : l'indulgence pour les défauts des autres » (Rivarol)
markotxe
Membre OOrganisé
Membre OOrganisé
Messages : 83
Inscription : 09 févr. 2018 09:55

Re: [Calc] Multi-Chronos

Message par markotxe »

Bonjour,
Tout d'abord un grand merci à tous les deux pour tout le mal et le temps que vous dédiez pour mener à bien ce projet. Je le fais en mon nom bien entendu mais aussi en celui de mes compagnons de travail ainsi que tous les jeunes que nous encadrons.
J'avoue être un peu embêter de constater que vous avancez bien plus vite que moi. Je me sens pas très à l'aise dans le role du critique qui dit "ça c'est pas bien, c'est comme ça que je veux… ". C'est pourquoi, je voudrez insister sur le fait que je vous suis extrêmement reconnaissant et que je trouve vous deux approches tout simplement magnifique!

Hubert Lambert,
Les chronos sont parfaitement synchroniser. (plus de latence) Bravo!
J'ai déchargé Python hier soir et je suis, depuis, plus plongé dans les tutos, videos, sujets du forum que sur le projet en lui-même. Je ne désespère pas écrire "Hello world" ce soir après le travail.
Si je me lance dans le monde de python, c'est que j'aimerais:
- Ajouter un bouton "Pause", qui stopperait le Chrono, le mettrait à zéro et le relancerait automatiquement.
- À appuyer sur ce bouton "Pause", enregistrer les temps dans une cellule à coté du chrono. (comme l'exemple d'OOotremer)

Avec ce que m'a appris OOotremer971, je serais capable de pouvoir les répartir là où il faut. Ces deux points atteints, le projet serait alors définitivement clos.


OOotremer,
Les temps de chaque chrono qui apparaissent, était vraiment un détail important. Vous l'avez fait très bien. Chapeau bas monsieur!
- La gestion des boutons est moins agile que l'exemple proposé par Hubert, un clic pour ouvrir la fenêtre, un clic pour faire "pause" ou "Relancer" etc... Parfois des nageurs arrivent pratiquement en même temps et dans ce cas, cette approche peut être problématique.
Mais vous m'aviez averti, la gestion par bouton supposerait renommer chacun d'eux ce qui serait lourd. Peut-être arrive t'on aux limites de ce que peut proposer BASIC.(?).
- En natation, on résonne en minutes, secondes, centiemes, c'est un détail mais je vous demanderez de ne pas me donner de réponses. J'aimerais si possible trouver moi-même la solution et apporter quelques chose de productif.


Encore une fois, je m'excuse de paraitre si insatisfait et exigent d'autant que je suis vraiment admiratif du travail que vous fournissez.

Merci, merci, merci.
Dernière modification par markotxe le 13 mai 2019 21:17, modifié 1 fois.
LibO 7.5.2 et Open Office 4.1.14
Window11
(Obligation de version).
Avatar de l’utilisateur
Hubert Lambert
SuppOOrter
SuppOOrter
Messages : 1214
Inscription : 06 avr. 2016 07:26

Re: [Calc] Multi-Chronos

Message par Hubert Lambert »

Voici matière à étude :

Code : Tout sélectionner

from datetime.datetime import now
from time import sleep
from threading import Thread


STARTCOL = 0
ENDCOL = 6
chronos = {}

def START(*args):
    try:
        cmd = args[0]
        ligne = int(cmd.split('&')[-1].split('=')[-1]) -1
        doc = XSCRIPTCONTEXT.getDocument()
        nom = doc.CurrentController.ActiveSheet.getCellByPosition(0, ligne).String.encode('utf-8')
        if nom and not nom in chronos:
            doc.CurrentController.ActiveSheet.getCellByPosition(3, ligne).setString("STOP")
            doc.CurrentController.ActiveSheet.getCellByPosition(4, ligne).setString("PAUSE")
            cell = doc.CurrentController.ActiveSheet.getCellByPosition(1, ligne)
            t1 = Thread(target=kro, args=(cell, nom))
            t1.start()
    except:
        traceback.print_exc()

def kro(cell, nom):
    try:
        zero = now()
        chronos[nom] = "run"
        v = startvalue = cell.Value
        while chronos[nom]:
            if chronos[nom] == 'reset':
                zero = now()
                chronos[nom] = 'run'
                startvalue = 0
            cell.setValue(v)
            v = startvalue + (now() - zero).total_seconds()/(60*60*24)
            sleep(1./100)
    finally:
        del chronos[nom]

def STOP(*args):
    cmd = args[0]
    ligne = int(cmd.split('&')[-1].split('=')[-1]) -1
    doc = XSCRIPTCONTEXT.getDocument()
    nom = doc.CurrentController.ActiveSheet.getCellByPosition(0, ligne).String.encode('utf-8')
    chronos[nom] = ""
    doc.CurrentController.ActiveSheet.getCellByPosition(3, ligne).setString("START")
    doc.CurrentController.ActiveSheet.getCellByPosition(4, ligne).setString("RESET")

def RESET(*args):
    cmd = args[0]
    ligne = int(cmd.split('&')[-1].split('=')[-1]) -1
    doc = XSCRIPTCONTEXT.getDocument()
    doc.CurrentController.ActiveSheet.getCellByPosition(1, ligne).setValue(0)

def PLAY(*args):
    cmd = args[0]
    ligne = int(cmd.split('&')[-1].split('=')[-1]) -1
    doc = XSCRIPTCONTEXT.getDocument()
    nom = doc.CurrentController.ActiveSheet.getCellByPosition(0, ligne).String.encode('utf-8')
    temps = doc.CurrentController.ActiveSheet.getCellByPosition(1, ligne).Value
    chronos[nom] = "reset"
    doc.CurrentController.ActiveSheet.getCellByPosition(4, ligne).setString("PAUSE")
    f = doc.CurrentController.ActiveSheet
    col = dernierecolonne(f, ligne+1)
    doc.CurrentController.ActiveSheet.getCellByPosition(col, ligne+1).setValue(temps)

def PAUSE(*args):
    cmd = args[0]
    ligne = int(cmd.split('&')[-1].split('=')[-1]) -1
    doc = XSCRIPTCONTEXT.getDocument()
    nom = doc.CurrentController.ActiveSheet.getCellByPosition(0, ligne).String.encode('utf-8')
    temps = doc.CurrentController.ActiveSheet.getCellByPosition(1, ligne).Value
    chronos[nom] = "reset"
    doc.CurrentController.ActiveSheet.getCellByPosition(4, ligne).setString("PLAY")
    f = doc.CurrentController.ActiveSheet
    col = dernierecolonne(f, ligne)
    doc.CurrentController.ActiveSheet.getCellByPosition(col, ligne).setValue(temps)

def ajout(event=None):
    doc = XSCRIPTCONTEXT.getDocument()
    doc.lockControllers()
    undomanager = doc.UndoManager
    undomanager.enterUndoContext("Ajouter chrono)")
    try:
        f = doc.CurrentController.ActiveSheet
        c = f.createCursor()
        c.gotoEndOfUsedArea(False)
        dest = f.getCellByPosition(STARTCOL, c.RangeAddress.StartRow +2)
        copiechrono(f, 1, dest.CellAddress.Row)
        dest.setString('')
        f.getCellByPosition(STARTCOL+1, dest.CellAddress.Row).setValue(0)
        f.Rows.getByIndex(dest.CellAddress.Row).Height = f.Rows.getByIndex(1).Height
    finally:
        undomanager.leaveUndoContext()
        doc.unlockControllers()

def copiechrono(f, lignesource, lignedest):
        chrono = f.getCellRangeByPosition(STARTCOL, lignesource, ENDCOL, lignesource+2).RangeAddress
        dest = f.getCellByPosition(STARTCOL, lignedest)
        f.copyRange(dest.CellAddress, chrono)

def dernierecolonne(f, index):
    ligne = f.Rows.getByIndex(index)
    emptyranges = ligne.queryEmptyCells()
    return emptyranges.getByIndex(emptyranges.Count-1).RangeAddress.StartColumn
:wink:
 Ajout : 15.5.2019.
Si quelqu'un repasse par ici, une version 2.2 améliorée : possibilité d'effacer ou de déplacer un chrono, même actif.
Open KRO 2 2.ods
 
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Dernière modification par Hubert Lambert le 15 mai 2019 16:41, modifié 2 fois.
AOOo 4.1.7 sur Win10
AOOo 4.1.x sur Linux Mint
LibreOffice 5.x/6.x sur Linux Mint
--
| « Nos défauts devraient nous donner une qualité : l'indulgence pour les défauts des autres » (Rivarol)
Avatar de l’utilisateur
OOotremer971
ManitOOu
ManitOOu
Messages : 2744
Inscription : 16 avr. 2010 13:31

Re: [Calc] Multi-Chronos

Message par OOotremer971 »

:bravo: :bravo: :super:
J'ai essayé pendant deux plombes de contourner avec des boutons radio en guise de bouton et j'ai jeté l'éponge.

Par contre à ma grande stupéfaction, lorsque ma Sub Main() tourne en boucle, un clic sur un Hyperlien de type vnd.sun.star.script:Standard.Module1.sStop est parfaitement intercepté sans délais, effectue son traitement et redonne la main à la Sub Main() en lui passant les arguments nécessaires pour rattraper le retard qu'elle aurait éventuellement pu prendre et lui donner les bon paramètres. Du coup le principe demeure fonctionnel en Basic avec des pseudo bouton à la place des listes déroulantes. Je suis ravi. :lol:
Si je trouve le temps nécessaire ce Week-end j'essaierai de joindre un exemple fonctionnel pour ceux qui ne pratiquent pas le Python ou ont du mal à l'appréhender.

Encore bravo
En principe, toujours à jour des dernières versions dites stables
AOO
LibreOffice
Debian 10 et 11
markotxe
Membre OOrganisé
Membre OOrganisé
Messages : 83
Inscription : 09 févr. 2018 09:55

Re: [Résolu][Calc] Multi-Chronos

Message par markotxe »

Bonjour à tous,
Écoutez, c'est formidable!

Vos deux versions sont magnifiques et on peut dès à présent clore ce sujet par un [Résolu] et d'ajouter avec BRIO!

Je ne peux être qu'admiratif devant l'implication et la dextérité à laquelle vous avez surmonté les embuches- Chapeau bas messieurs- C'est on nom de tout le club que je vous adresse les plus chaleureux remerciements, l'outil que vous avez conçu nous fait désormais rentrer dans le 21 eme siècle. Dés demain, il sera en action aux abords des eaux chlorées pour le bénéfice de tous et toutes.


Les mots semblent faible pour exprimer toute la reconnaissance et remerciements que j'aimerais vous transmettre.
Merci, merci encore, mille mercis! Vous êtes des génies!!!
LibO 7.5.2 et Open Office 4.1.14
Window11
(Obligation de version).