bonjour,

Mon probleme est le suivant :

lorsque j execute ma function main, une des variable globale que je souhaite conserver est reinitialiser a nothing a la fin de l execution.

voila mon code

module 1 ou se trouve mes variable type utilistateur qui me pose probleme(j ai pas tous mis, seulement ce qui me semble essentiel)

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
34
35
36
37
 
Public Type PosAtSea
    x As String
    y As String
    z As String
End Type
 
Public Type PosOnSheet
    x As Integer
    y As Integer
End Type
 
Public Type OneGun
    DropOutNumber As String
    GunLinkNumber As String
    SeaPosition As PosAtSea
    SheetPosition As PosOnSheet
    Active As String ' if Active = SPARE, spare gun
    Volume As String ' if Volume = 999, no gun
    OleObj As OLEObject
    PictureFilename As String
End Type
 
Public Type OneCluster
    Gun(0 To 1) As OneGun
    Name As String
End Type
 
Public Type OneSubArray
    Cluster() As OneCluster
    Name As String
End Type
 
Public Type OneArray
    SubArray() As OneSubArray
    Name As String
End Type
le module 2 contient ma fonction main (pareille je n est pas mis tous le code des sous fonction appeler)
la variable que je souhaite garder a la fin de la function est celle noter
dim Gunarray() as onearray (variable type utilisateur et dimensionner dynamiquement en fonction d un fichier lu)
en gros je lis un fichier contenant des informations que je recolte dans un premier temps dans la variable Readconfig(), et en fonction de ce que je lis, je dimensionne ma variable Gunarray et insere les info dont j ai besoin.
ici pas de probleme, je souhaite garder ces donnes en memoire et de pouvoir y avoir acces a partir d une autre function qui est ecrite et que je lance a partir du module 2

et le probleme intervient lorsque j appel call showgun (...) je souhaite afficher plusieurs (une 50aine) oleobject du type label + une insertion d une image, tous ce passe bien aussi,tous est placer correctement, l image est afficher ainsi que le texte en label.
et a la fin la function main, tous les data dans gunarray sont effacer, gunarray indique noting (visualiser dans le watch),
si j enleve l appel de la fonction Showgun, a la fin de lexecution de main, gunarray garde tous les data que j ai transferer auparavant.

en gros mon probleme vient (enfin je crois) de la function showgun

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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
 
Option Explicit
 
Public ObjSheet As Worksheet
Dim Gunarray() As OneArray
Dim readconfig()
Dim OptionButton As OleVar
Dim Number As GunVar
 
 
Private Function Main()
 
Dim PathFile As String
 
Dim i As Integer, j As Integer, k As Integer, CptGun As Integer
Dim Splitline() As String
 
Set ObjSheet = ActiveSheet
 
Set OptionButton.Simple = CreateOleOptionButton(ObjSheet, "ObSimple", "simple", 510, 800)
Set OptionButton.Asymetrique = CreateOleOptionButton(ObjSheet, "OBAsymetrique", "Asymetrique", 540, 800)
Set OptionButton.Symetrique = CreateOleOptionButton(ObjSheet, "OBSymetrique", "Symetrique", 570, 800)
OptionButton.Symetrique.Object.Value = True
PathFile = "\\192.168.223.181\PrivateCommon\Jorjyo\Macro\Dropout\Macro\ConfigFile\G2540C60FO7256"
Call Readfile(readconfig, PathFile) ' transfer all data from Configfile to memory (readconfig)
 
'-------------------------------------------
 
i = 0
Do Until Left(readconfig(i), 1) <> "#"
    i = i + 1
Loop                                    ' move to to line with array information
 
Splitline = Split(readconfig(i), " ")   ' copy line and split data
Number.SubArray = Splitline(0)
Number.GunPerSubArray = Splitline(1)
Number.ClusterPerSubArray = Number.GunPerSubArray / 2
Number.Combinaisons = Splitline(2)
 
'-------------------------------------------
 
CptGun = 0
 
If OptionButton.Simple.Object.Value = True Then
 
    ReDim Gunarray(0)
    ReDim Gunarray(0).SubArray(0 To Number.SubArray - 1)
 
    For i = 0 To Number.SubArray - 1
        ReDim Gunarray(0).SubArray(i).Cluster(0 To Number.ClusterPerSubArray - 1)
    Next i
 
Else:
    ReDim Gunarray(0 To 1)
 
    ReDim Gunarray(0).SubArray(0 To Number.SubArray - 1)
    ReDim Gunarray(1).SubArray(0 To Number.SubArray - 1)
 
    For i = 0 To Number.SubArray - 1
        ReDim Gunarray(0).SubArray(i).Cluster(0 To Number.ClusterPerSubArray - 1)
        ReDim Gunarray(1).SubArray(i).Cluster(0 To Number.ClusterPerSubArray - 1)
    Next i
 
End If
 
i = 0
Do Until Left(readconfig(i), 2) = "#>"
    i = i + 1
Loop
 
 
Select Case True
 
    Case OptionButton.Simple.Object.Value
 
        j = 1
        Do Until Left(readconfig(i), 2) <> "#>"
        Splitline = Split(readconfig(i), " ")
        Call InitSimpleArray(Gunarray(), Splitline, Number)
        i = i + 1
        Loop
        Gunarray(0).Name = "Simple"
 
    Case OptionButton.Asymetrique.Object.Value
 
        Do Until Left(readconfig(i), 2) <> "#>"
        Splitline = Split(readconfig(i), " ")
        Call InitSimpleArray(Gunarray(), Splitline, Number)
        i = i + 1
        Loop
        Call InitAsymetriqueArray(Gunarray(), Splitline, Number)
 
 
    Case OptionButton.Symetrique.Object.Value
 
        Do Until Left(readconfig(i), 2) <> "#>"
        Splitline = Split(readconfig(i), " ")
        Call InitSimpleArray(Gunarray(), Splitline, Number)
        i = i + 1
        Loop
        Call InitSymetriqueArray(Gunarray(), Splitline, Number)
 
End Select
 
Call AffecteNBGunlink(Gunarray(), Number)
Call AffectPositionOnSheet(Gunarray(), Number)
Call ShowGuns(Gunarray(), ObjSheet)
 
End Function
tjrs dans le module 2 le code qui me pose probleme lors de l insert des oleobject


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
34
35
36
37
38
39
40
41
 
Public Function ShowGuns(ByRef Gunarray() As OneArray, ByVal OSheet As Worksheet)
 
    Dim i, j, k, L As Integer
 
    Application.ScreenUpdating = False
 
    For i = 0 To UBound(Gunarray)
        For j = 0 To UBound(Gunarray(i).SubArray)
            For k = 0 To UBound(Gunarray(i).SubArray(j).Cluster)
                For L = 0 To UBound(Gunarray(i).SubArray(j).Cluster(k).Gun)
                    If Gunarray(i).SubArray(j).Cluster(k).Gun(L).Active <> "NO_GUN" Then
 
                          call CreateOleGun(OSheet, Gunarray(i).SubArray(j).Cluster(k).Gun(L), i)
 
                    End If
                Next L
            Next k
        Next j
    Next i
 
    Application.ScreenUpdating = False
 
End Function
 
 
 
Public Function (ByVal OSheet As Worksheet, ByRef ThisGun As OneGun, ByVal i as integer) 
 
    Set Thisgun.oOle = OSheet.OLEObjects.Add(ClassType:="Forms.Label.1")
    With Thisgun.OleObj
        .Top = ThisGun.SheetPosition.y
        .Left = ThisGun.SheetPosition.x
        .Name = "gun_" & i & "_" & ThisGun.DropOutNumber
        .Object.Caption = ThisGun.Volume
        .Object.Picture = LoadPicture("\\Fohpcmedia\privatecommon\Jorjyo\Macro\Dropout\Macro\Pics\" & ThisGun.PictureFilename)
        .Width = 70
        .Height = 55
     End With
 
End Function
si quelqu un a une idee et me dire pourquoi les donnes se trouvant dans les variable globale sont reinitialiser a nothing.
merci par avance a celui qui me donnera une solution.