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)
le module 2 contient ma fonction main (pareille je n est pas mis tous le code des sous fonction appeler)
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
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
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
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
si quelqu un a une idee et me dire pourquoi les donnes se trouvant dans les variable globale sont reinitialiser a nothing.
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
merci par avance a celui qui me donnera une solution.
Partager