2 messages in org.openoffice.fr.progRe: [prog] parametre optionnel qui ne...
FromSent OnAttachments
MIPPSJun 30, 2007 5:59 am 
Bernard MarcellyJun 30, 2007 8:17 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] parametre optionnel qui ne veut pas changer de valeur...Actions...
From:Bernard Marcelly (marc@club-internet.fr)
Date:Jun 30, 2007 8:17:57 am
List:org.openoffice.fr.prog

Message de MIPPS date 2007-06-30 14:59 :

Bonjour,

Voici tout d'abord le code pour illustrer ma question :

Sub TestOptional(optional Valeur2 as integer) Dim Valeur3 as integer if ismissing(Valeur2) then Valeur2 = thisComponent.currentSelection.CellAddress.row Valeur3 = thisComponent.currentSelection.CellAddress.row End if msgbox("Valeur2 = " & Valeur2) msgbox("Valeur3 = " & Valeur3) Valeur2 = Valeur2+1 Valeur3 = Valeur3+1 msgbox("Valeur2 = " & Valeur2) msgbox("Valeur3 = " & Valeur3) End sub

Admettons que je sois sur la ligne 12 lorsque je l'exécute (sans passer de
paramètre donc "Valeur2 is missing"), j'ai :

les 2 premiers msgbox : Valeur2 = 12 Valeur3 = 12

les 2 suivants : Valeur2 = 12 Valeur3 = 13

Alors ai-je loupé quelque chose parce que je ne vois pas ce qu'il y a de spécial
dans mon code pour que ma Valeur2 ne change pas après son init dans le if du
ismissing. Il me semble que ça marchait avec la version précédente d'OOo.
D'ailleurs je plante bcp plus souvent avec la 2.2.0 qu'avec la précédente.

Je suis en OOo 2.2.0, WXPH, JRE 6 upd 1.

Merci d'avance. Marc.

Bonjour, Oui, je fais la même constatation sur 2.2.0 avec Windows XP. C'est une bogue assez tordue.

En fait la propriété Row est de type Long. Ca ne devrait pas gêner avec une ligne de rang 12, mais si je déclare Valeur2 As Long l'anomalie disparaît. Elle disparaît aussi en forçant la conversion à Integer avec : Valeur2 = CInt(thisComponent.currentSelection.CellAddress.row)

On peut faire une preuve de bogue encore plus démonstrative:

Sub test2(optional v As Integer) Dim p As Long p = 11 if isMissing(v) then v = p end if MsgBox("v initial : " & v) v = v +100 MsgBox("v modifié ? " & v) End Sub

Quand je l'exécute sans argument, v n'est pas incrémentée. Et v est bien du type Integer. Si je déclare p As Integer, v s'incrémente. Cette bogue existe aussi dans la version 1.1.5.

Il ne te reste plus qu'à faire un rapport dans IssueZilla :)

______ Bernard