charger Table VBA type utilisateur. Erreur inconnue

PacoE

XLDnaute Nouveau
Bonjour,

j'ai à disposition dans une feuille d'un classeur Excel une extraction d'une base de données
et j'essaye de charger ces données dans une table VBA (type utilistateur).
voici la structure des types utilisés (toute remarque sera la bienvenue) :

Public Type TVENTES
VV(1 To 2, 1 To 3, 1 To 12) As Double
VU(1 To 2, 1 To 3, 1 To 12) As Double
End Type


Public Type ITEM
EAN As Double
GROUP As String
MANUF As String
BRAND As String
PROP As String
LIC As String
CAT As String
VENTES As TVENTES
End Type

Public Type TOTITEM
NBE As Integer
ITEM(1 To 50) As ITEM
End Type


Lorque que je charge mes données dans la table TOTITEM tout se passe bien si le nombre de lignes maximum du type TOTITEM n'est pas trop élevé.
exemple :
Public Type TOTITEM
NBE As Integer
ITEM(1 To 50) As ITEM
End Type
=>OK


Public Type TOTITEM
NBE As Integer
ITEM(1 To 50) As ITEM
End Type
=>pas OK. un message d'erreur s'affiche :
"Compile error :
Fixed or static data can't be larger than 64K"

Comment puis-je contourner ce problème?

Un grand merci d'avance!! :)



Pour info voici la procédure que j'utise pour charger la table DB de type TOTITEM (déclarée en public) :

Public Sub LOAD_DB()

Dim I, J As Integer

DB.NBE = 0
I = 5

While I <= 54
DB.NBE = DB.NBE + 1
DB.ITEM(DB.NBE).EAN = Range("A" & I).Value
DB.ITEM(DB.NBE).GROUP = Range("B" & I).Value
DB.ITEM(DB.NBE).MANUF = Range("C" & I).Value
DB.ITEM(DB.NBE).BRAND = Range("D" & I).Value
DB.ITEM(DB.NBE).PROP = Range("E" & I).Value
DB.ITEM(DB.NBE).LIC = Range("F" & I).Value
DB.ITEM(DB.NBE).CAT = Range("G" & I).Value
For J = 1 To 12
DB.ITEM(DB.NBE).VENTES.VV(1, 1, J) = Cells(I, J + 7)
Next J
I = I + 1
Wend


End Sub
 
G

Guest

Guest
Re : charger Table VBA type utilisateur. Erreur inconnue

Bonjour Pacoe,

As-tu essayé de simplement déclare TOTITEM comme un simple tableau

1 - Public TOTITEM(1,50) as ITEM

ou

2 -Public TOTITEM() as ITEM 'en redimenssionnant le tableau au chargement avec Redim Preserve

NBE se récupère facilement par Ubound(TOTITEM)+1

Ou encore en gérant un collection

Public TOTITEM as New Collection.

A+
 

PacoE

XLDnaute Nouveau
Re : charger Table VBA type utilisateur. Erreur inconnue

SAut Hasco,

j'ai essayé de déclaré TOTITEM comme un simple tableau comme tu me l'a recommendé et ca marche très bien merci. Public TOTITEM(1,5000) as ITEM

Maintenant j'aimerais le déclaré en le dimensionant de facon dynamique, mais je ne sais pas trop comment s'utilise l'instruction Redim Preserve.
un petit coup de pouce serait le bienvenue.

Merci encore! :)
 
G

Guest

Guest
Re : charger Table VBA type utilisateur. Erreur inconnue

Re Paco,

A savoir en VB seule la dernière dimension d'un tableau et re-dimensionnable

Dans ton module:

En tête de module:
Code:
Option Base 1 'Si tu veux que l'indice des tableaux commence à 1
 
Public TOTITEM() As ITEM
Sub ChargeTOTITEM()
    Dim i As Integer
 
    For i = 1 To 50
        Dim mItem As ITEM
        mItem.EAN = i
        mItem.GROUP = "Groupe" & i
        ReDim Preserve TOTITEM(1, 1 To i)
        TOTITEM(1, i) = mItem
 
    Next i
End Sub

A noter que sur 5000 items cela val être lent, et très gourmand en mémoire.

A+
 

Discussions similaires

Réponses
11
Affichages
297
Réponses
2
Affichages
267
Réponses
6
Affichages
248

Statistiques des forums

Discussions
312 312
Messages
2 087 159
Membres
103 484
dernier inscrit
maintenance alkern