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
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]