3 messages in org.openoffice.fr.progRe: [prog] Variables globales
FromSent OnAttachments
Fr...@idkal.comJan 26, 2006 5:42 am 
Alain NowakJan 26, 2006 6:46 am 
Fr...@idkal.comJan 26, 2006 7:18 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] Variables globalesActions...
From:Alain Nowak (ano@starxpert.fr)
Date:Jan 26, 2006 6:46:22 am
List:org.openoffice.fr.prog

Bonjour,

D'après ton code : les deux fonctions ne s'enchainent pas, mais ChargerDoc est appelé, se termine, et plus tard l'autre fonction est appelée. Donc, ton problème n'est pas la portée de la variable, mais sa persistance : a la fin de l'exécution d'une macro, tout son contexte et nettoyé, les variables remises à zéro. Il y a une solution : déclarer la variable comme Global, dans ce cas elle est persistante. Inconvénient : si une autre macro d'une autre bibliothèque est appelée en parallèle, et utilise aussi une variable globale avec le même nom : ca va mal se passer !

Fr@idkal.com a écrit :

Bonjour à tous, je cherche le moyen d'avoir une variable globale à toutes les fonctions d'une même bibliothèque.

Je définis ma variable en debut de bibliothèque comme cela :

Public MaVar as Object

Le problème est que lorsque que je me sert d'une premier procédure qui initialise ma variable et que je m'en sert dans une autre : l'objet est 'Null'.

Je vous colle ici un extrait de mon code :

Public FicWord as Object Public UrlFicWord as String

Sub ChargerDoc() /* charge un document word */ ClrLst() Dim oSM, oDesk as Object Dim maFeuille,TxtBox as Object Dim arg(0) as new com.sun.star.beans.PropertyValue

Set oSM = CreateObject("com.sun.star.ServiceManager") Set oDesk = oSM.createInstance("com.sun.star.frame.Desktop")

maFeuille = ThisComponent.Sheets(0) maFeuille = maFeuille.DrawPage.Forms.getByIndex(0)

TxtBox = maFeuille.getByName("TextBox") urlFicWord = TxtBox.String

* FicWord = oDesk.LoadComponentFromUrl(UrlFicWord,0,0,arg()) */* J'instancie ma variable objet */

end Sub

Sub NomsDansListBox()

Dim maFeuille, LstBox as Object maFeuille = ThisComponent.Sheets(0).DrawPage.Forms.getByIndex(0) /* Ligne de code déja utilisée dans la procédure 'ChargerDoc()' LstBox = maFeuille.getByName("ListBox") LstBox.StringItemList = _*FicWord*._TextTables.getElementNames() /* Objet 'Null' */

End Sub

De plus je voudrais ne pas à redéfinir la portée de mes objets à chaque nouvelle procédures (comme les textboxs et autre contrôles contenus sur la même feuille)

Merci pour vos réponses