VBA/Excel charger table type utilisateur

PacoE Messages postés 37 Statut Membre -  
lermite222 Messages postés 9042 Statut Contributeur -
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. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    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
  2. PacoE Messages postés 37 Statut Membre 3
     
    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
  3. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    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