Global variable as Type : ça marche 1 fois mais pas 2

funxav Messages postés 25 Date d'inscription vendredi 16 avril 2004 Statut Membre Dernière intervention 30 avril 2005 - 11 déc. 2004 à 14:44
funxav Messages postés 25 Date d'inscription vendredi 16 avril 2004 Statut Membre Dernière intervention 30 avril 2005 - 12 déc. 2004 à 19:51
Bonjour,

Je suis débutant en VB, donc ...

Dans une appli VBA excel, j'ai déclaré un tableau en global.

Quand j'accède la permière fois au tableau, ça va.

La deuxième fois, le tableau a été vidé.

Que se passe t-il ?
La macro a t elle été réinitialisée (sans que je lui demande) ou un truc comme ça ?
Dans ce cas comment je garde la valeur de ma variable ?

9 réponses

cs_CanisLupus Messages postés 3757 Date d'inscription mardi 23 septembre 2003 Statut Membre Dernière intervention 13 mars 2006 20
11 déc. 2004 à 17:37
Salut,

Si tu as déclaré ton tableau au niveau général, il ne devrait pas y avoir de problème (quoique j'utilise Public plutôt que Global).
Maintenant, qu'entends-tu par 1ère fois et 2ème fois ?
Si entre les 2 il y a eu fermeture de l'appli puis réouverture, c'est normal, les données ont été perdues.
Ou alors, tu réinitialises ton tableau quelquepart dans ton appli.

Cordialement, CanisLupus
0
funxav Messages postés 25 Date d'inscription vendredi 16 avril 2004 Statut Membre Dernière intervention 30 avril 2005
11 déc. 2004 à 20:17
Salut

Ba j'y accède la première fois pour chercher les éléments.

La deuxième fois que j'accède à ce tableau, il a été vidé par quelque force mystérieuse.

Je n'ai pas quitté l'appli. Pour moi, la maccro tourne toujours.

Le tableau est déclaré comme cela :

Public combos(10) as ComboBox.

J'ai le même problème avec des collections et autre que j'ai mis en public. Ils se réinitialisent tout seul. Je ne sais pas quelle est la durée de vie de ma macro.

En fait, j'exécute ma macro depuis excel. Puis je sélectionne des items dans mes combobox : à la 1ere sélection, tout se passe bien. A la 2 eme, ça plante et quand je vais voir les valeurs à l'aide du debbuger il me dit que les valeurs des tableaux qui ont été initialisées sont "nothing" (Alors que je n'ai pas de code pour les vider)

Si entre les 2 il y a eu fermeture de l'appli puis réouverture, c'est normal, les données ont été perdues.
>> ce n'est pas le cas, je pense. Du moins, je ne lui dis pas explicitement d'arreter, ni de recommencer ...

Ou alors, tu réinitialises ton tableau quelquepart dans ton appli. >> Non j'ai bien vérifié et ce n'est pas le cas.
0
cs_clafouti Messages postés 78 Date d'inscription samedi 16 mars 2002 Statut Membre Dernière intervention 7 septembre 2006
12 déc. 2004 à 07:09
Déclare ton tableau dans un module et ça devrait marcher.

Auteur de PrestoNotes, LE célèbre logiciel freeware de post-its développé en VB.
Découvrez-le sur http://users.chello.be/cr41007/index.html
0
funxav Messages postés 25 Date d'inscription vendredi 16 avril 2004 Statut Membre Dernière intervention 30 avril 2005
12 déc. 2004 à 14:58
Déclare ton tableau dans un module >> c'est déjà fait...

Avec option explicit ...

mais ça marche pas justement

Option Explicit

Public Flag As Boolean

Public Nom_feuilles(3)
Public nom_colonnes(10) As String
Public combos(0 To 10) As ComboBox
Public combostring(0 To 10) As String
Public colonne_supp As Integer
Public colonne_mod As Integer
Public bddboutons As New Collection
Public comboboutons As New Collection

' sub d'entrée de la macro
Sub MacroOne()

Set combos(0) = Sheet1.ComboBox1
Set combos(1) = Sheet1.ComboBox2
Set combos(2) = Sheet1.ComboBox3
Set combos(3) = Sheet1.ComboBox4
Set combos(4) = Sheet1.ComboBox5

....
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_CanisLupus Messages postés 3757 Date d'inscription mardi 23 septembre 2003 Statut Membre Dernière intervention 13 mars 2006 20
12 déc. 2004 à 15:10
Désolé, mais à chaque appel de ta macro, tu réinitialises bien ton tableau avec :

Set combos(0) = Sheet1.ComboBox1
Set combos(1) = Sheet1.ComboBox2
Set combos(2) = Sheet1.ComboBox3
Set combos(3) = Sheet1.ComboBox4
Set combos(4) = Sheet1.ComboBox5
....

et si les combos de ta sheet1 ne contiennent plus rien ou pas d'item sélectionné lors du 2ème appel, ton tableau sera vidé.

Cordialement, CanisLupus
0
cs_CanisLupus Messages postés 3757 Date d'inscription mardi 23 septembre 2003 Statut Membre Dernière intervention 13 mars 2006 20
12 déc. 2004 à 15:11
Un truc, pose des points d'arrêt et vérifie à chaque fois le contenu de tes combos.

Cordialement, CanisLupus
0
funxav Messages postés 25 Date d'inscription vendredi 16 avril 2004 Statut Membre Dernière intervention 30 avril 2005
12 déc. 2004 à 15:56
Merci pour cette réponse

C'est exactement ça. Je suis un peu confus là... J'avais dis que j'étais débutant... :)

Si je comprends bien. Tu viens de me dire que, à chaque fois que je sélectionne une item dans un combo, il éxécute la macro qui s'était arrêté.

Je pensais qu'elle ne s'arrêterait pas.
D'accord.
Mais alors comment faire pour conserver les valeurs publique,
ou bien
pour rééxécuter la sub d'entrée de la macro (MacroOne) à chaque fois que la macro est executée suite à une sélection dans une combo.

Faut il mettre un "call MacroOne" partout dans les handler d'événement ?

N'y a t-il pas moyen de garder les valeurs ( sans les mettre dans la base de registre ou dans un fichier ) ?
0
cs_CanisLupus Messages postés 3757 Date d'inscription mardi 23 septembre 2003 Statut Membre Dernière intervention 13 mars 2006 20
12 déc. 2004 à 17:49
Ben là, c'est à moi de décoder, avec ton dernier message, je comprend que MacroOne est exécutée à chaque clic sur une combo ? Si c'est bien le cas, ton tableau sera modifié à chaque fois.
Pour conserver des valeurs dans un tableau, il faut qu'il soit initialisé dès le départ (dans le workbook_open par exemple).
Plutôt que de poster des milliers de messages, si je voyais ton code, je pourrai mieux t'aider.
Si ton code est trop grand, réponds moi en privé et je te donnerai un e-mail pour me l'envoyer.
Mais il faudra joindre aussi une explik disant ce que ton appli doit faire.

Cordialement, CanisLupus
0
funxav Messages postés 25 Date d'inscription vendredi 16 avril 2004 Statut Membre Dernière intervention 30 avril 2005
12 déc. 2004 à 19:51
ReSalut

Je t'ai envoyé personnelement le programme. Si tu me réponds de facon, j'essaierais d'expliquer mon erreur (si ça vaut le coup)

Cordialement, funxav
0
Rejoignez-nous