29 messages in org.openoffice.fr.progRe: [prog] Chronomètre
FromSent OnAttachments
Michel GrentzingerOct 9, 2007 7:53 am 
Laurent GodardOct 9, 2007 8:25 am 
Bernard MarcellyOct 9, 2007 10:02 am 
Laurent GodardOct 9, 2007 10:11 am 
Michel GrentzingerOct 9, 2007 10:58 am 
Anthony BenoistOct 9, 2007 4:15 pm 
Serge LE LOUARNEOct 10, 2007 12:43 am 
Anthony BenoistOct 10, 2007 1:06 am 
Serge LE LOUARNEOct 10, 2007 1:18 am 
Bernard MarcellyOct 10, 2007 6:03 am 
Anthony BenoistOct 10, 2007 6:28 am 
Michel GrentzingerOct 10, 2007 11:38 am 
Anthony BenoistOct 10, 2007 12:47 pm 
Laurent GodardOct 10, 2007 1:30 pm 
Anthony BenoistOct 10, 2007 3:07 pm 
Bernard MarcellyOct 11, 2007 5:17 am 
Michel GrentzingerOct 11, 2007 5:40 am 
Bernard MarcellyOct 11, 2007 6:02 am 
Francois GattoOct 11, 2007 10:22 am 
Anthony BenoistOct 11, 2007 10:26 am 
Anthony BenoistOct 11, 2007 10:37 am 
Michel GrentzingerOct 11, 2007 11:01 am 
Bernard MarcellyOct 11, 2007 11:37 am 
Hervé GracOct 11, 2007 11:54 am 
Michel GrentzingerOct 11, 2007 1:26 pm 
christianwtdOct 13, 2007 8:11 am 
Bernard MarcellyOct 13, 2007 12:49 pm 
Bernard MarcellyOct 13, 2007 1:04 pm 
christianwtdOct 14, 2007 1:56 am 
Actions with this message:
Paste this link in email or IM:
Paste this link in email or IM:
Atom feed for this thread
Paste this URL into your reader:
Subject:Re: [prog] ChronomètreActions...
From:Bernard Marcelly (marc@club-internet.fr)
Date:Oct 13, 2007 12:49:48 pm
List:org.openoffice.fr.prog

Message de christianwtd date 2007-10-13 17:12 :

En revanche j'ai jeté un œil dans le code macro d'Antony Benoist. Je trouve que OOoBasic se comporte curieusement :

Sur une instruction : oFeuille.getCellByPosition(1, i).string = Time() affiche l'heure. Normal, sauf l'affichage, qui affiche le fameux apostrophe devant l'heure. Mais si je fais : oFeuille.getCellByPosition(1, i).Value = Time me retourne 16, si par exemple il est 16:21:43 Une modif comme : oFeuille.getCellByPosition(1, i).Value = Now et avec un bon formatage cellule retourne bien : 16:21:43

Est-ce bien normal ?

C'est explicable. Comme souvent, c'est un problème de type de données et de conversion de types. Une cellule de tableur non vide contient: - soit une valeur numérique Double - soit une chaîne de caractères Une formule dans une cellule fournit soit un Double soit une chaîne de caractères.

Quand tu fais: oFeuille.getCellByPosition(1, i).String = xxxx tu demandes à Basic de mettre dans la propriété .String une chaîne de caractères. Dans ton cas tu lui transmets Time() qui renvoie une chaîne de caractères au format HH:MM:SS. Ensuite calc récupère cette chaîne de caractères et doit y ajouter une apostrophe pour la présenter sous forme de chaîne. Si Calc ne mettait pas cette apostrophe on aurait une valeur de nombre. J'enfonce le clou : la cellule contient maintenant une chaîne de caractères, puisque c'est ce que tu as demandé, en utilisant la propriété .String. De même : oFeuille.getCellByPosition(1, i).String = 1234 mettra dans la cellule une chaîne de caractères 1234 et pas le nombre.

Quand tu fais: oFeuille.getCellByPosition(1, i).Value = xxxx tu demandes à Basic de mettre dans la cellule un nombre de type Double. Dans ton cas tu lui transmets Time() qui renvoie une chaîne de caractères au format HH:MM:SS. Alors Basic fait ce qu'il peut. Il analyse la chaîne de caractères et trouve un nombre délimité par le premier deux-points. Et il convertit en Double la valeur d'heure, sans aller plus loin.

Si tu avais fait: oFeuille.getCellByPosition(1, i).Value = CDbl(Time) alors tu précisais à Basic d'utiliser la routine de conversion explicite vers un Double. Cette routine est plus intelligente que la conversion implicite (c'est pour cela qu'elle existe), et reconnaît une heure. On obtient alors une valeur de type Double qui est la représentation interne de l'heure. Calc affichera un nombre avec décimales avec le format de cellule standard, ou affichera l'heure avec un format d'heure: c'est la représentation externe.

Quand tu fais: oFeuille.getCellByPosition(1, i).Value = Now la fonction Now() renvoie, elle, une valeur de type Date. Ensuite Basic convertit le type Date en type Double (c'est facile) et on se retrouve dans le cas précédent.

Bonne soirée Bernard