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]

Répondre à