Portée d'une variable Collection

Bonjour,

J'essaie d'utiliser une Collection comme variable Globale

J'ai écrit

Global InfosObjets as New Collection

Mais la collection est vidée de la mémoire lorsque l’exécution du programme s'arrête.

Est-ce normal ?

Y-a-t-il un contournement possible autre que la recopie de la collection dans un tableau ?

Merci d'avance pour vos réponses ... :slight_smile:

Bonjour,

J'essaie d'utiliser une Collection comme variable Globale

J'ai écrit

Global InfosObjets as New Collection

Mais la collection est vidée de la mémoire lorsque l’exécution du
programme s'arrête.

La question qui me vient est : qu'entends-tu par "programme" ? Ton
document qui exécute les macros du module ? LibreOffice lui-même ?

Est-ce normal ?

Euh. Une collection est une variable. Ici tu as choisi une variable
globale qui existe donc pendant toute l'exécution du programme et
disparaît lorsque le programme s'achève.

A quel niveau est déclarée ta variable globale ? Dans un module d'un
document ? Un module d'une bibliothèque de l'utilisateur ? Un module
d'une bibliothèque globale ?

Bonsoir Jean-François,

Bonjour,

J'essaie d'utiliser une Collection comme variable Globale

J'ai écrit

Global InfosObjets as New Collection

Mais la collection est vidée de la mémoire lorsque l’exécution du
programme s'arrête.

La question qui me vient est : qu'entends-tu par "programme" ? Ton
document qui exécute les macros du module ? LibreOffice lui-même ?

Le programme c'est une ou des macros stockées dans les bibliothèques utilisateurs (pas un fichier) et qui sont exécutées.

Est-ce normal ?

Euh. Une collection est une variable. Ici tu as choisi une variable
globale qui existe donc pendant toute l'exécution du programme et
disparaît lorsque le programme s'achève.

Non, une variable globale dans LO Basic existe jusqu'à ce que LO soit fermé si elle figure dans une bibliothèque utilisateur et jusqu'à ce que le document soit fermé si elle est dans la bibliothèque de macros d'un document.

A quel niveau est déclarée ta variable globale ? Dans un module d'un
document ? Un module d'une bibliothèque de l'utilisateur ?

Un module d'une biblio utilisateur.
Ce qui est étonnant c'est que la déclaration est acceptée par le compilateur, mais la collection n'est pas globale elle est seulement publique (les données sont perdues quand la macro s'arrête.

Global InfosObjets as New Collection

Un module
d'une bibliothèque globale ?

Cordialement.

Bonjour Didier

Didier Dorange-Pattoret wrote

J'essaie d'utiliser une Collection comme variable Globale
...
Mais la collection est vidée de la mémoire lorsque l’exécution du
programme s'arrête.
Est-ce normal ?

Sais pas...

Didier Dorange-Pattoret wrote

Y-a-t-il un contournement possible autre que la recopie de la collection
dans un tableau ?

À tester mais je caresse l'hypothèse que le code suivant fonctionne...

Cordialement
Pierre-Yves

global InfosObjets as variant

sub InitColl
Dim maCollLoc As New Collection

maCollLoc.Add "valeur1", "ID1"
maCollLoc.Add "valeur2", "ID2"

InfosObjets = maCollLoc

end sub

sub testglob
dim loc

for each loc in InfosObjets
  print loc
next
end sub

Bonsoir Pierre Yves,

Merci pour le conseil,
Mais il y a des problèmes de stabilité.
J'ai fait des essais en ajoutant ou enlevant un élément ...

global InfosObjets as variant

sub InitColl
Dim maCollLoc As New Collection

maCollLoc.Add "valeur1", "ID1"
maCollLoc.Add "valeur2", "ID2"

InfosObjets = maCollLoc

end sub

sub testglob
dim loc

'InfosObjets.Remove("ID1")
InfosObjets.Add "valeur1", "ID1"
for each loc in InfosObjets
     print loc
next
end sub

Du coup, j'ai utilisé un tableau du type Global InfosObjets(1 to 100, 1 to 2) as String

Pour enlever un objet, il faut une boucle pour mais cela fonctionne.

Cordialement.