Dépassement de capacité Tableau dynamique VBA

Bonjour,

Je tente de prendre des données d'une feuille Excel et de les mettre dans un tableau dynamique VBA.

J'ai réussis à le faire une fois, mais lorsque je suis venu pour le refaire, un message d'erreur "DÉpassement de capacité" apparait.

Voici mon code :

Dim tab_transaction()
Dim tab_LT()

'Met les données dans le tableau dynamique
tab_transaction = Sheets("Transactions").Range("A2").CurrentRegion.Value '--> Bogue ici 

'Met les données dans le tableau dynamique
tab_LT = Sheets("LT violé").Range("A2").CurrentRegion.Value '--> Fonctionne

Le problème se situe au tableau : "tab_transaction".

PAr contre, si je saute la ligne et que je vais à "Tab_LT = .." , celui-ci fonctionne

Des pistes de solutions?

Merci

Hehee

Bonjour,

"Dépassement de capacité" c'est plutôt quand un type de variable est trop petit pour la donnée (5000 dans un Integer par exemple) mais ton tableau est Variant.

On va supposer que c'est plus sa taille qui pose problème.

Combien de lignes et de colonnes ?

eric

468001 lignes par 30 colonnes

Mais la taille peut varier

Ah quand même...

La longueur de chaque dimension d'un tableau est limitée à la valeur maximale du type de données Integer, qui est (2 ^ 31) - 1.

Ca a l'air d'être bon.

Toutefois, la taille totale d'un tableau est limitée également par la mémoire disponible sur votre système.

C'est là que ça doit coincer.

Rajoute de la mémoire ou traite tes données par blocs plus petits (essaie 100000 lignes ou moins de colonnes si elles ne sont pas toutes nécessaires)

Par curiosité tente 3 tableaux de 10 colonnes avec toutes les lignes mais bon, le total de mémoire utilisée ne sera pas moindre. On ne sait jamais, si ça passe ça sera plus simple...

eric

Merci beaucoup !

Effectivement, j'ai testé avec moins de colonnes et ça passe.

JE trouve tout de même ça drôle puisque cela avait passé le premier coup haha !

Bonne journée 8)

JE trouve tout de même ça drôle puisque cela avait passé le premier coup haha !

La mémoire disponible n'était sans doute pas la même. Reboote avant chaque utilisation de ton classeur

N'oublie pas de mettre en résolu en cochant le post.

eric

Haha ! Merci

Bonjour

Désolé de squatter

@ eriiic

Où as tu trouvé les limites des tableaux ?

eriiic a écrit :

La longueur de chaque dimension d'un tableau est limitée à la valeur maximale du type de données Integer, qui est (2 ^ 31) - 1

Dans l'aide je n'ai trouvé que ça

La taille maximale d'un tableau varie en fonction de votre système d'exploitation et de la mémoire disponible. L'utilisation d'un tableau dépassant la quantité de RAM disponible ralentit le système parce que les données doivent être lues et écrites sur disque

J'ai sans doute mal cherché

En plus je trouve étrange (mais bon je ne connais pas tout - loin s'en faut)

=(2^31)-1 = 2 147 483 647

Çà fait beaucoup non ?

Merci

Bonjour banzaï,

2^31)-1 = 2 147 483 647

Çà fait beaucoup non ?

Certes, mais ça ne fait jamais que 4 octets, et c'est pour la taille (produit de toutes les dimensions)

J'ai été voir pour VB en partant du principe qu'on peut souvent faire des parallèles intéressants avec VBA :

http://msdn.microsoft.com/fr-fr/library/b388cb5s%28v=vs.80%29.aspx

eric

Bonsoir

Merci de la réponse

Des trucs intéressants à voir

Mais une divergence entre VBA et VB (surement pas la seule)

Aide VBA

Les variables de type Integer sont stockées sous la forme de nombres de 16 bits (2 octets) dont la valeur est comprise entre -32 768 et 32 767

Aide VB

Integer    Int32    4 octets    -2 147 483 648 à 2 147 483 647 (signé)

Mais bon c'était juste pour ma culture personnelle

Encore merci

Aide VBA

Les variables de type Integer sont stockées sous la forme de nombres de 16 bits (2 octets) dont la valeur est comprise entre -32 768 et 32 767

Hummm, pas tout à fait vrai, faut se méfier...

En VBA si la plage de valeur d'un integer est bien 2 octets (-32 768 à 32 767), en revanche il n'est pas stocké ainsi. Il est converti en Long et stocké donc sur 4 octets. L'Integer perd de son intérêt en vba.

VB est souvent supérieur à VBA, c'est vrai que comparer n'est juste qu'indicatif et peut s'avérer faux. Mais parfois on a de bonne surprise. Comme des fonctionnalités VB non décrites dans vba mais qui fonctionnent quand même comme par exemple On Error Goto -1.

eriic

Bonsoir

Je ne te contredirais pas sur le stockage des variables, mais en VBA essayes de sortir des limites des valeurs pour l'Integer et tu obtiendras une magnifique erreur( comme bien sur pour toutes les variables et peu importe le langage)

Alors même si le Byte est stockée (en réalité sur 4 octets) peu me chaut, ce n''est pas important en soi

Le plus important ce sont les limites qui ne sont pas les mêmes

En VB avec un integer tu pourrais atteindre toutes les lignes d'une page XL (2007 et +) tandis qu'en VBA tu ne le pourrais pas

Donc pour en revenir à la préoccupation initiale, a savoir le dépassement de capacité, pas de réponse claire des limites d'un tableau

Il suffit d'avoir une grande capacité d'espace disque pour avoir éventuellement une RAM "disque" ( dixit l'aide ) et ainsi pas de limite

Dans la réalité c'est vraiment différent, comme hehee l'a constaté

mais en VBA essayes de sortir des limites des valeurs pour l'Integer et tu obtiendras une magnifique erreur( comme bien sur pour toutes les variables et peu importe le langage)

Je ne pense pas avoir dit le contraire, et même confirmé.

eric

Qu'elle est la différence entre VB et VBA ?

Bonjour,

VB est un un basic qui te permet de créer des programmes autonome (.exe)

VBA (Visual Basic pour Application) est un basic dédié à une application (excel, word,...). Donc moins de possibilités que VB mais avec des fonctions spécifiques à l'application pour lequel il est prévu.

eric

Rechercher des sujets similaires à "depassement capacite tableau dynamique vba"