Bonjour,

Avez-vous déjà remarqué que les variables globales sont systématiquement réinitialisées lorsque l'on modifie les "composants VB" (du moins le code du modules et les contrôles ActiveX dans une certaine mesure) par le biais de VBA ?

Dans le cas d'une variable simple, cela n'est pas très dérangeant, car la variable prend la valeur par défault, mais dans le cas d'un object (donc non initialisé), le programme plante complétement...

Avez-vous vous une solution pour quand même converser les variables / objets globaux après que l'on modifie les "composants VB" ?

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
 
Option Explicit
 
'declaration global variable
Public str As String
 
'
Sub initialise()
 
    'initialisation global variable
    str = "Hello"
 
    'modification of the VB component code module -> this will reinitialise all public variables and objects
    With ThisWorkbook.VBProject.VBComponents(ThisWorkbook.CodeName)
 
        With .CodeModule
 
            If .CountOfLines Then .DeleteLines 1, .CountOfLines
 
            .AddFromString "Option Explicit"
 
        End With
 
    End With
 
End Sub
 
'test is executed after initialise
Sub test()
 
    Debug.Print str & " world!" 'will only show " world!", because str was initialised by "VB Components"
 
End Sub
Bien sûr, l'exemple ci-dessous permet juste d'illustrer le problème... il faut que je puisse conserver mes variables / objets globaux tout en pouvant modifier les "Composants VB".

Merci par avance !