VBA/Excel charger table type utilisateur

Fermé
PacoE Messages postés 36 Date d'inscription jeudi 17 janvier 2008 Statut Membre Dernière intervention 23 août 2011 - 29 nov. 2008 à 11:34
lermite222 Messages postés 8702 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 - 29 nov. 2008 à 12:27
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
A voir également:

3 réponses

lermite222 Messages postés 8702 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
29 nov. 2008 à 11:55
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
PacoE Messages postés 36 Date d'inscription jeudi 17 janvier 2008 Statut Membre Dernière intervention 23 août 2011 3
29 nov. 2008 à 12:04
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
lermite222 Messages postés 8702 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
29 nov. 2008 à 12:27
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