XL 2016 VBA - OLEObjects.add fait perdre les valeurs des variables globales de tous les Modules

Dudu2

XLDnaute Barbatruc
Bonjour,

J'avais déjà remarqué ce phénomène étrange et excessivement gênant lorsqu'on veut partager des variables entres plusieurs fonctions.
Si on déclare et valorise des variables au niveau d'un ou plusieurs Modules et que dans un des Modules on créé une ComboBox de feuille Active X, toutes ces valeurs sont perdues !

La création de la ComboBox dézingue toutes les variables Modules de TOUS les Modules !

Je cherche un contournement de ce problème car même si on peut s'en sortir avec un Application.OnTime Now après la création de la ComboBox, cette solution ne permet pas de passer des paramètres reçus qui sont précisément les valeurs à placer en variables Module. Et puis de toutes façons, comme tous les Modules sont affectés, c'est irrattrapable !
 

Pièces jointes

  • ComboBox ActiveX sur feuille détruit toutes les variables Modules.xlsm
    26.6 KB · Affichages: 13

Dudu2

XLDnaute Barbatruc
Bonjour @patricktoulon, @ChTi160,
chez moi 2013 c'est nickel
je voyais pas la raison de tout façon
Ok, donc ce serait que 2010 ? Je vais acheter une licence 2016 pour mon Windows 8.1.
Y pas de raison. C'est une grosse anomalie.
Ça se passe sur le End Sub (ou End Function) Avant c'est encore bon.
Je suppose que c'est l'effacement des éléments de contexte de la fonction qui embarque ces variables quand il y a eu un OLEObjects.Add. que ce soit pour une ComboBox ou ListBox ou autre.
Pourquoi ne pas déclarer les variables dans un module en public
Elles sont dans des modules en Public.
 
Dernière édition:

patricktoulon

XLDnaute Barbatruc
re
non je pense que soit la variable est modifiée dans la fonction
soit alors si ça se produit au end (sub/function) c'est qu'il s'en sert en argument
ou alors il y a un gros bug et là ça peut être n'importe quoi la raison
je ne pense pas que cela soit un bug 2010 a proprement parler

Le “Ref”, inclus dans le mot-clef “ByRef”, implique qu'une référence à l'élément passé à la procédure est conservée, et que cet élément peut être modifié par la fonction. ByVal signifie au contraire que lors de la passation d'un argument, celui-ci est évalué, et que seule sa valeur est prise en compte.
 

Dudu2

XLDnaute Barbatruc
@patricktoulon,
je pense pas c'est quoi le code de cette fonction
Je suis pas fou quand même. Enfin je crois !
Avec le fichier fourni en Post #1, y a aucun argument, c'est hyper basique.
Et voilà ce que j'ai:
Combo1.gif
 

Dudu2

XLDnaute Barbatruc
Ah ben je suis content que tu aies suivi le protocole indiqué ;).
Et aussi que tu l'aies reproduit. Je me sens moins seul.

Par contre pour trouver un "workaround", j'ai essayé des trucs (mise en classe etc...) mais rien ne fonctionne.
 

patricktoulon

XLDnaute Barbatruc
re
tu peux te venter d'avoir soulever un lievre
sur le net on ne trouve rien sur cette erreur
woawh!!! c'est costaud !!!!
pour info chez moi sur 2007 2013 2016 bonnet blanc blanc bonnet

il me reste un seul test a faire sur 2013 et 2016 je reviens tout a l'heure
 

Dudu2

XLDnaute Barbatruc
1634466755741.gif

Il va se faire souffler dans les bronches
Sur 365, les variables conservent leurs valeurs.
En effet, si le 2019 de @job75 l'a corrigé, 365 doit avoir aussi le fix.
Par contre je suis étonné que le fix n'ait pas été propagé dans les updates de Windows pour les versions antérieures.

Le problème reste quand même entier pour quelqu'un qui reçoit un code d'un 2019/365 et le tourne sous 2016. Et le 2019/365 ne comprendras pas pourquoi ça ne fonctionne pas.
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 233
Messages
2 086 466
Membres
103 225
dernier inscrit
PAPA ALIOUNE HANE