Salut,
Existe-t-il une taille maximal pour une variable de type public dans VBA (pour excel) ?
Salut,
Existe-t-il une taille maximal pour une variable de type public dans VBA (pour excel) ?
... et tu ve y mettre quoi de si gros dans tes variables...
je ne connais pas la taille maximale autorisé pour les variables (qu'elle soit publique ou pas) , mais je pense que c'est la même taille pour les variables publiques ... ou pas...
je veux utiliser un tableau d'environ 6000 lignes et colonnes de double ce qui me fait une variable de qql centaines de mega ce qui est gerable pour ma RAM mais il me plante tout de meme pour manque de memoire et j'ai cru comprendre en lisant l'aide qu'il doit y avoir une limite de taille pour les variables Public mais elle n'est pas indiqueEnvoyé par bbil
Envoyé par Mdsn Mibrary
moi avec mes 1,5Go de ram j'arrive à une taille maximale de mon tableau :
...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 Public t(82483, 1000) As Double Sub test() Debug.Print t(1, 3) End Sub
est-tu vraiment obligé d'utiliser un si gros tableau ? , n'as tu pas pensé à une solution ... utilisant une table (base de donnée) pour stoker ton tableau ?
:
Au vu de ce que tu disPeut-être que tu as trop de fichiers ou application d'ouverte qui te prennent beacoup de RAM et que du coup, il ne t'en reste pas assez pour ton application Excel (Excel aussi nécessite de la place mémoire, mais je ne sasi pas combienje veux utiliser un tableau d'environ 6000 lignes et colonnes de double ce qui me fait une variable de qql centaines de mega ce qui est gerable pour ma RAM mais il me plante tout de meme pour manque de memoire ...
Bon courage
Igloobel
Ils ne savaient pas que c'était impossible ... du coup ils l'ont fait (Mark Twain)
n'oubliez pas de si les messages vous aide ou sont pertinents et de mettre quand cela est !
Franchement, je suis d'accord avec bbil. Tu arrives dans le domaine des bases de données. Pourquoi ne mets-tu pas tes données dans Access.
En plus, je ne sais pas ce que tu comptes faire avec tes "doubles", mais quand tu auras des recherches ou des tris à faire... Aïe Aïe Aïe!!
En fait j'utilise juste excel pour peupler une matrice et l'inverser via une ddl. Car malheureusement les bases de donnee sont souvent tres differente par leur format et afin d'eviter de devoir apprendre a manipuler entre entre 3 et 5 format qui ne sont pas des fichier .txt, j'utilise un traitement "a la main" avec des traducteur en general basique (mais rapide a prendre en main) et excel pour le faire, bref....
Sinon ma memoire vive est de 2 giga, donc toutes a fait suffisante bien entendu j'evite de faire tourner film et unreal en meme temps comme vous pouvez vous en douter.
Il ne me reste plus que qql explication:
- j'a fait une erreur dans la frappe de la commande
- utilisation mal placer de la commande Redim (faut dire que je ne suis pas toujours rigoureux avec tout ce qui est declaration, procedure, module, etc...)
Sinon le nom de l'erreur est un erreur 7. Afin d'y remedier j'ai tenter de faire passer mes variable de type Public en Private car il ecrit dans l'help qu'il est possible de depasser la memoire allouable au variable Public ( ne sachant pas trop ce qu'il veulent dire par la j'ai tenter le proceder susmentionne)
Voila la ligne de code qui me pose probleme ( avec matrixsize = 5854 et sinkzone = 4):
ReDim matA(1 To matrixsize - sinkzone, 1 To matrixsize - sinkzone) As Double
La variante utiliser (zonetot = 5850) :
ReDim matA(1 To zonetot, 1 To zonetot) As Double
ne fonctionne pas non plus...
voila tout, que faire ?
Merci de votre aide
en fait voici voici le code (juste le main les sub fonctionne sans prob), sa foire au niveau de l'etoile *:
voila
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
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135 ' airSet matrix calculation base, declare NAG function used in calcs for multizones, and establish multi-zone calc dim statements Option Base 1 Declare Sub F04AAF Lib "F:\NAGF0345.DLL" (a As Double, ia As Long, _ b As Double, ib As Long, n As Long, m As Long, c As Double, ic As Long, _ wkspce As Double, ifail As Long) Dim m As Long, i As Long, n As Long, j As Long, ifail As Long Dim matA() As Double, matB() As Double, matC() As Double, wkspace() As Double ' Set dim statements for all calcs and calcs for single zones Dim airzone As Integer Dim sinkzone As Integer Dim temp1 As Integer 'sert pour les mutliple scenario de vent Dim temp2 As Integer 'sert pour les mutliple scenario de vent (temps total) Dim pag2 As Integer 'sheets number data Dim emission As Integer 'sert pour les emission multiple Dim emission_bis As Integer 'sert pour les emission multiple Dim matrixsize As Integer Dim volume As Double Dim activezone As Integer Dim fraction As Double Dim outputwb As String 'workbook name resultat Dim sheetname As String 'sheet name resultat Dim modelfile As String Dim count As Integer Dim count1 As Integer Dim count2 As Integer Dim matAbase() As Double Dim airhormatrix() As Variant Dim airvertmatrix() As Variant Dim airname() As Variant Dim airsizehor As Integer Dim airsizevert As Integer Dim volumematrix() As Variant Dim airdata() As Variant Dim geopotential() As Variant Dim emissionsdata() As Variant Dim resultsdata() As Variant Sub calculate() ' ' overall calculation procedure Macro 14/08/2000 and modified by F.Gigante 09.05 ' Application.ScreenUpdating = False modelfile = ActiveCell.Parent.Parent.Name Sheets("air data").Select airzone = Cells(3, 6) sinkzone = Cells(3, 7) temp1 = 0 temp2 = 0 For pag2 = 4 To 6 Worksheets(pag2).Select While IsEmpty(Cells(2, 63 + (temp1 * 7))) = False Call createbook For emission = 1 To 450 ' create results output sheet and adds resume titles Call createresultsheet ' set number of zones, compartments, and matrix size Call pastegeo Call inputdata Call setupmatrix Call volumedata ' Establish air and water advection matrices ReDim matAbase(1 To matrixsize, 1 To matrixsize) As Double Call setuphorizadvectionmatrix Call setupverticaladvectionmatrix ' input degradation and intermedia transport rate coefficients into overall matrix * ReDim matA(1 To matrixsize - sinkzone, 1 To matrixsize - sinkzone) As Double Call matrixcompin ReDim matAbase(1, 1) ' Input Emissions data - can add loop here for calculations and results outputs for emission scenarios Call emissionsinput ' Calculate overall mass balance matrix calculation Call matrixcalc ' Output results Call clearresultsdata Call results ReDim matA(1, 1) ReDim matB(1, 1) ReDim matC(1, 1) ' Creates output sheets and resume data Call createoutput emission_bis = emission_bis + 1 Next emission temp1 = temp1 + 1 temp2 = temp2 + 1 Worksheets(pag2).Select Wend temp1 = 0 Next pag2 ' moves cursor to original position, returns to results sheet and deletes spare sheet before closing Sheets("Controls").Select Windows(outputwb).Activate Application.ScreenUpdating = True End Sub
Déjà, seule la dernière dimension peut être modifiée par un redim.
Je ne sais pas si c'est de là que vient ton problème mais il faudra le prendre en compte.
De plus, si je ne me trompe, on ne peut pas modifier la borne inférieure. Donc, pas de 1 to ...
N'oubliez pas de cliquer sur quand vous avez obtenu ou trouvé vous-même la réponse à votre question.
Si vous trouvez seul, pensez à poster votre solution. Elle peut servir à d'autres!
Pensez aussi à voter pour les réponses qui vous ont aidés.
------------
Je dois beaucoup de mes connaissances à mes erreurs!
juste en complement d'information, voila l'erreur qui m'est affiche:
Out of memory (Error 7)
More memory was required than is available, or a 64K segment boundary was encountered. This error has the following causes and solutions:
You have too many applications, documents, or source files open.
Close any unnecessary applications, documents, or source files that are open.
You have a module or procedure that's too large.
Break large modules or procedures into smaller ones. This doesn't save memory, but it can prevent hitting 64K segment boundaries.
You are running Microsoft Windows in standard mode.
Restart Microsoft Windows in enhanced mode.
You are running Microsoft Windows in enhanced mode, but have run out of virtual memory.
Increase virtual memory by freeing some disk space, or at least ensure that some space is available.
You have terminate-and-stay-resident programs running.
Eliminate terminate-and-stay-resident programs.
You have many device drivers loaded.
Eliminate unnecessary device drivers.
You have run out of space for Public variables.
Reduce the number of Public variables.
For additional information, select the item in question and press F1 (in Windows) or HELP (on the Macintosh).
si cela peut aider qql'un a... m'aider!
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager