VBA/Excel charger table type utilisateur

Bonjour,
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
Configuration: Windows XP
Safari 525.17

3 réponses

  1. Contributeur
    Bonjour,
    Quand tu fais une tableau de 'Type' les variables le composant doivent avoir une longeur définie...
    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 * 30
        MANUF As String * 30
        BRAND As String * 30
        PROP As String * 30
        LIC As String * 30
        CAT As String * 30
        VENTES As TVENTES
    End Type
    
    Public Type TOTITEM
        NBE As Integer
        M_ITEM(1 To 60) As ITEM 'je pense que tu a 54 enrg.
    End Type


    A+
    0
    1. Salut!

      Merci de ta réponse.
      J'ai essayé de définir la longueur des chaines mais j'ai le même problème. en fait le message d'erreur s'applique à la table TOTITEM.
      et j'ai beaucoup plus de 54 enregistrements. pour l'instant je test avec un nombre tres réduit. idealement je devrais pouvoir charger des miliers de lignes.... c'est pas gagné....

      A+
      0
      1. Contributeur
        Tu imbrigue mal tes Types...
        essaye avec.. (pas tester)

        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 * 30
            MANUF As String * 30
            BRAND As String * 30
            PROP As String * 30
            LIC As String * 30
            CAT As String * 30
        End Type
        
        Public Type TOT
            M_ITEM As ITEM
            VENTES As TVENTES
        End Type
        
        Public ToTitem(1 To 50) As TOT
        
        Public Sub LOAD_DB()
        
        Dim I As Integer, J As Integer, Compteur As Integer
        
            I = 5
            Compteur = 0
            While I <= 54
                Compteur = Compteur + 1
                With ToTitem(Compteur)
                    .M_ITEM.EAN = Range("A" & I).Value
                    .M_ITEM.GROUP = Range("B" & I).Value
                    .M_ITEM.MANUF = Range("C" & I).Value
                    .M_ITEM.BRAND = Range("D" & I).Value
                    .M_ITEM.PROP = Range("E" & I).Value
                    .M_ITEM.LIC = Range("F" & I).Value
                    .M_ITEM.CAT = Range("G" & I).Value
                    For J = 1 To 12
                        .VENTES.VV(1, 1, J) = Cells(I, J + 7)
                    Next J
                End With
                I = I + 1
            Wend
        End Sub

        Mais pourquoi toutes ces dimentions dans VV et VR qui ne servent pas ?
        Et quel est la finalité de ce tableaux ?
        Si c'est pour mettre dans un fichier à accés direct ce n'est pas la bonne solution.
        Et quand tu ressort les variables string il faut employer Trim
        A+

        0