[Résolu][Calc] Valider TextField et TimeField en même temps

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 !
Avatar de l’utilisateur
redgbreaker
Membre OOrganisé
Membre OOrganisé
Messages : 76
Inscription : 22 avr. 2012 11:28

[Résolu][Calc] Valider TextField et TimeField en même temps

Message par redgbreaker »

Bonjour tout le monde!
Voilà, je viens de nouveau m'adresser aux passionnés qui vont peut-être (sans nul doute) m'apporter de l'aide sur ma feuille calc.
En effet, j'essaie de valider un TextField et un TimeField en même temps. Le soucis c'est que la validation est décalé via ma boite de dialogue. J'en conclue que ça provient d'une erreur d'exécution de ma boite mais je ne vois pas où (il n'y a certainement pas que ça et c'est sur!).
J'aurais donc espéré que vous me corrigiez sur cette simple macro.
Voici le code (le fichier est joint) :

Code : Tout sélectionner

REM  *****  BASIC  *****

REM  *****  BASIC  *****
Sub Lancer
             For i = 4 To 1500
                  LancerChrono("F" & i)
                  LancerDossard("G" & i)
                  If oDlg.GetControl("TextField1").Text = "stop" Then
                  oTrouve = true
                  Exit For
                  End If
             	Next i             
            
            End Sub 

Sub LancerChrono(ref)
'Charge la boîte de dialogue en mémoire
DialogLibraries.LoadLibrary("Standard")
oDlg = CreateUnoDialog(DialogLibraries.Standard.NDossard)
'Affiche l'heure actuelle
champHeure=oDlg.getControl("ChampHeure")
champHeureDepart=oDlg.getControl("ChampHeureDepart")

oDocument = thisComponent
oFeuilles = oDocument.Sheets

champHeure.Time=ConvHeureLong(Time)
champHeureDepart.Time=champHeure.Time 'Fixe heure par défaut à l'ouverture
'ouvre la boîte de dialogue
oDlg.Execute()

oFeuille = oFeuilles.getByName("Feuille1")
oCellule = oFeuille.getCellRangeByName(ref)
oCellule.Value = CDate(Time)

End Sub
Sub LancerDossard(ref)
           DialogLibraries.LoadLibrary("Standard")
           oBibli=DialogLibraries.GetByName("Standard")
           oDialogue=oBibli.GetByName("NDossard")
           oDialog1=CreateUnoDialog(oDialogue)

           oDocument = thisComponent
           oFeuilles = oDocument.Sheets      
           
           oDialog1.execute 
                      
           oFeuille = oFeuilles.getByName("Feuille1")
           oCellule = oFeuille.getCellRangeByName(ref)
              
           oCellule.value = oDialog1.GetControl("TextField1").Text
       Exit Sub
End Sub
Je sais, je suis un boulet :super: mais pourriez-vous m'aider et m'apporter votre aide. Merci à tous.
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Dernière modification par redgbreaker le 29 mai 2012 16:57, modifié 1 fois.
LibreOffice 4.0.0.3 sous Windows 7 Ultimate SP1 x64 Fr
La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information... Albert Einstein
L'accumulation des connaissances n'est pas la connaissance. Alberto Mangue
Avatar de l’utilisateur
alhazred
ManitOOu
ManitOOu
Messages : 3028
Inscription : 30 avr. 2011 23:08
Localisation : Casablanca (Maroc)

Re: [Calc]Valider TextField et TimeField en même temps

Message par alhazred »

Bonjour,
redgbreaker a écrit :je suis un boulet mais pourriez-vous m'aider
Non et oui (dans cet ordre :lol: )

Mais il va falloir que tu nous expliques d'abord exactement et en détail le comportement que tu attends de ce classeur, genre: je ferai telle action, il doit se passer telle(s) chose(s), puis ...

Une ébauche de classeur où les titres de colonnes + certaines cellules seraient déjà remplies (à la main) aiderait aussi.

Quelques exemples d'inconsistances:
-- une de tes subs parle d'une feuille Chrono qui brille par son absence
-- pourquoi utiliser ici un listener? (ou peut-être, qui sait, pourquoi utiliser un dialogue?) D'après ce que j'ai compris, puisque ta sub principale ouvre le dialogue pour chaque dossard successif, des contrôles ad hoc dans le dialogue lui-même seraient bien suffisants
À bientôt

LibO 4.1.5.3 et AOO 4.0.1 sous Windows 7, MRI et SDK pour les macros.

Et la sauvegarde incrémentée, c'est sympa !
Avatar de l’utilisateur
redgbreaker
Membre OOrganisé
Membre OOrganisé
Messages : 76
Inscription : 22 avr. 2012 11:28

Re: [Calc]Valider TextField et TimeField en même temps

Message par redgbreaker »

Bonjour Alhazred!
Effectivement il y a plusieurs onglets de macros car j'ai fait des recherches et des essais (fructueux), mais celui qui m'intéresse c'est l'onglet "TEST" lancé par le bouton.
Ce que je recherche à faire bien entendu c'est :
écrire un chiffre ou ne rien écrire dans le textfield et quand je clicke sur "valider", l'heure du timefield et le contenu du textfield s'affiche en 1 fois (là, c'est l'un après l'autre).
Soit j'ai 1 temps en f4 et 1 n° en G4 (et ça passe en f5 et g5)
Soit j'ai 1 temps en f5 et rien en G5 (et ça passe en f6 et g6)
...etc...
Quoiqu'il en soit il y a toujours 1 "temps", vu que j'ai le choix de ne rien mettre dans le textfield :mrgreen:
Je pense m'être bien expliqué! :aie:
merci encore
LibreOffice 4.0.0.3 sous Windows 7 Ultimate SP1 x64 Fr
La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information... Albert Einstein
L'accumulation des connaissances n'est pas la connaissance. Alberto Mangue
Avatar de l’utilisateur
alhazred
ManitOOu
ManitOOu
Messages : 3028
Inscription : 30 avr. 2011 23:08
Localisation : Casablanca (Maroc)

Re: [Calc] Valider TextField et TimeField en même temps

Message par alhazred »

redgbreaker a écrit :Je pense m'être bien expliqué!
On va faire avec ça :(

Tu vas trouver pas mal de changements (en général des simplifications).
L'erreur principale était d'utiliser deux exécutions de dialogues à chaque fois.

Restent encore des détails d'ergonomie. Exemples:
-- à chaque ouverture du dialogue, mettre à vide le champ dossard et y remettre le point d'insertion;
-- pourquoi s'obliger à taper stop alors qu'on peut simplement fermer le dialogue?

On verra plus tard (encore mieux: le faire toi-même :super: ) si ce classeur correspond à ce que tu veux...
Timer-1.ods
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
À bientôt

LibO 4.1.5.3 et AOO 4.0.1 sous Windows 7, MRI et SDK pour les macros.

Et la sauvegarde incrémentée, c'est sympa !
Avatar de l’utilisateur
redgbreaker
Membre OOrganisé
Membre OOrganisé
Messages : 76
Inscription : 22 avr. 2012 11:28

Re: [Calc] Valider TextField et TimeField en même temps

Message par redgbreaker »

Merci Alhazred! J'étais arrivé au même point que toi en comprenant que j'exécutais deux fois la boite dans le code!
Dans le fichier que tu as joint (j'ai la même chose - en résultat pas en macro - donc je suis content) le "temps" est affiché avant le dossard donc c'est décalé!
En fait la saisie du dossard doit valider le temps même si je laisse le textfield "blanc", simultanément on verra apparaitre le "temps" et le dossard (ou un 0 si rien mis).
Pas toujours facile d'expliquer un résultat. :mrgreen:
LibreOffice 4.0.0.3 sous Windows 7 Ultimate SP1 x64 Fr
La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information... Albert Einstein
L'accumulation des connaissances n'est pas la connaissance. Alberto Mangue
Avatar de l’utilisateur
alhazred
ManitOOu
ManitOOu
Messages : 3028
Inscription : 30 avr. 2011 23:08
Localisation : Casablanca (Maroc)

Re: [Calc] Valider TextField et TimeField en même temps

Message par alhazred »

En analysant bien les lignes de la boucle, tu trouveras LA ligne à déplacer et où la mettre; mais dans ce cas, on se demande à quoi servent les contrôles d'heure, puisque l'heure qui figurera sur la feuille est celle de la validation du dialogue !

Il faudrait, je pense, inscrire les heures juste avant et juste après Execute. Voilà pourquoi je te demandais de joindre un fichier avec en-têtes de colonnes.
À bientôt

LibO 4.1.5.3 et AOO 4.0.1 sous Windows 7, MRI et SDK pour les macros.

Et la sauvegarde incrémentée, c'est sympa !
Avatar de l’utilisateur
redgbreaker
Membre OOrganisé
Membre OOrganisé
Messages : 76
Inscription : 22 avr. 2012 11:28

Re: [Calc] Valider TextField et TimeField en même temps

Message par redgbreaker »

Bonjour tout le monde!
Bon Alhazred j'ai repris ton fichier et je l'ai amélioré visuellement pour aider à la compréhension de ce que je recherche!
Par contre une erreur apparait dans la macro (mais vu qu'elle va être modifiée ou du moins évoluer) ça n'est pas grave.
:super: je regarde ton code qui est très intéressant... c'est cool!
Attention aujourd'hui le soleil va cogner fort! Bonne appétit à tous. :super:
En plaçant l'exécution du dialogue en tête ça semble pas mal!
Est-ce possible que le CDate(Time) affiche les centième de seconde?
Merci encore
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
LibreOffice 4.0.0.3 sous Windows 7 Ultimate SP1 x64 Fr
La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information... Albert Einstein
L'accumulation des connaissances n'est pas la connaissance. Alberto Mangue
Avatar de l’utilisateur
alhazred
ManitOOu
ManitOOu
Messages : 3028
Inscription : 30 avr. 2011 23:08
Localisation : Casablanca (Maroc)

Re: [Calc] Valider TextField et TimeField en même temps

Message par alhazred »

Salut,
redgbreaker a écrit :une erreur apparait dans la macro
Laquelle?
redgbreaker a écrit :En plaçant l'exécution du dialogue en tête
Ou juste avant

Code : Tout sélectionner

cellChrono = oFeuille.getCellRangeByName("F" & i)
montrant que les contrôles d'heure ne sont pas utilisés.

Quant aux centièmes de seconde, impossible en utilisant la fonction Time. Il faudrait utiliser GetSystemTicks et l'étalonner pour le convertir en secondes (dépend vraisemblablement du système et du processeur utilisé).
Quelque chose comme:

Code : Tout sélectionner

Sub xxx
	Dim a,b,secondsToTicks,secondsFromStart
	a = GetSystemTicks
	Wait 100000 '100 secondes
	b = GetSystemTicks
	secondsToTicks = (b-a)/100
	secondsFromStart = GetSystemTicks/secondsToTicks 'nombre de secondes depuis démarrage du système
	Print secondsToTicks
End Sub
Chez moi 1 seconde = 1000 ticks (à peu près)
À bientôt

LibO 4.1.5.3 et AOO 4.0.1 sous Windows 7, MRI et SDK pour les macros.

Et la sauvegarde incrémentée, c'est sympa !
Avatar de l’utilisateur
redgbreaker
Membre OOrganisé
Membre OOrganisé
Messages : 76
Inscription : 22 avr. 2012 11:28

Re: [Calc] Valider TextField et TimeField en même temps

Message par redgbreaker »

Merci Alhazred!
Si tu télécharges mon dernier fichier il trouve une erreur dans la macro.
Je comprends pour les centièmes de seconde et là ça deviendrait le bazard :fou:
Je vais tester ce que tu viens de me dire :super:
A tout à l'heure, merci encore :bravo:
LibreOffice 4.0.0.3 sous Windows 7 Ultimate SP1 x64 Fr
La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information... Albert Einstein
L'accumulation des connaissances n'est pas la connaissance. Alberto Mangue
Avatar de l’utilisateur
alhazred
ManitOOu
ManitOOu
Messages : 3028
Inscription : 30 avr. 2011 23:08
Localisation : Casablanca (Maroc)

Re: [Calc] Valider TextField et TimeField en même temps

Message par alhazred »

Exact, l'erreur vient de Dim oTrouve As Object alors qu'on lui attribue une valeur booléenne vraie; il faudrait donc corriger

Code : Tout sélectionner

Dim oTrouve As Boolean
Mais à quoi sert donc oTrouve? Montrer qu'on a arrêté avant d'être à 1500 ? Si c'est pour pouvoir reprendre après, il faudra le déclarer en global avant les Subs

Code : Tout sélectionner

Global oTrouve As Boolean
Si j'ai bien compris ta logique, on inscrit un numéro, et on clique le bouton seulement à l'arrivée du dossard suivant; j'aurais donc préféré un nom plus explicite que Temps, qui me fait penser au temps du dossard qu'on vient d'inscrire. Pourquoi pas "Nouvelle arrivée" ou "Dossard suivant"?
À bientôt

LibO 4.1.5.3 et AOO 4.0.1 sous Windows 7, MRI et SDK pour les macros.

Et la sauvegarde incrémentée, c'est sympa !
Avatar de l’utilisateur
redgbreaker
Membre OOrganisé
Membre OOrganisé
Messages : 76
Inscription : 22 avr. 2012 11:28

Re: [Calc] Valider TextField et TimeField en même temps

Message par redgbreaker »

Si j'ai bien compris ta logique, on inscrit un numéro, et on clique le bouton seulement à l'arrivée du dossard suivant; j'aurais donc préféré un nom plus explicite que Temps, qui me fait penser au temps du dossard qu'on vient d'inscrire. Pourquoi pas "Nouvelle arrivée" ou "Dossard suivant"?
Oui effectivement on valide le temps d'arrivée du coureur grâce au N° de dossard. Le N° de dossard bien entendu se rapporte à un Nom dans une autre feuille et son temps s'affichera après un trie.
LibreOffice 4.0.0.3 sous Windows 7 Ultimate SP1 x64 Fr
La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information... Albert Einstein
L'accumulation des connaissances n'est pas la connaissance. Alberto Mangue
Avatar de l’utilisateur
redgbreaker
Membre OOrganisé
Membre OOrganisé
Messages : 76
Inscription : 22 avr. 2012 11:28

Re: [Calc] Valider TextField et TimeField en même temps

Message par redgbreaker »

Bonjour tout le monde!
Juste pour remercier le forum et surtout Alhared qui m'a apporter une macro optimisée (corrigeant la mienne) et qui répond effectivement à mon attente, donc tout simplement bravo :bravo: Je suis content parce que j'en étais vraiment pas loin (certes mal adroitement).
Donc je peux clore le sujet et je le passe en résolu en espérant que ça serve à d'autre via la recherche.
Bonne soirée et à bientôt :super:
LibreOffice 4.0.0.3 sous Windows 7 Ultimate SP1 x64 Fr
La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information... Albert Einstein
L'accumulation des connaissances n'est pas la connaissance. Alberto Mangue