XL 2013 Tableau : dépassement de capacité

Alza

XLDnaute Junior
Bonjour,

Je viens solliciter votre aide pour un problème lors du remplissage d'un tableau...

Voici la ligne qui pose problème :
VB:
tbl = .Range(.Cells(1, colAFF_CODE), .Cells(derligne, dercol))

Jusqu'ici tout fonctionnait bien, cependant le fichier grossi d'année en année et il a aujourd'hui dépassé les 45 000 lignes et quand il arrive sur la ligne ci-dessus j'ai un message d'erreur "Dépassement de capacité".
J'ai vu sur la doc que les tableaux sont limités à la valeur de int, soit un peu plus de 30 000, ce qui m'étonne c'est que mon tableau contient de nombreuses colonne date, quand je les passe au format standard, cela fonctionne, même avec mes 45 000 lignes (mais pas pratique je souhaiterai garder le format date).

A savoir que ma feuille excel est filtrée, donc à la limite si vous connaissiez une méthode pour remplir l'array uniquement avec le résultat du filtre et non tout le tableau, cela pourrait m'aider, car je n'ai pas trouvé comment faire...

Merci d'avance,

Alza
 

Paf

XLDnaute Barbatruc
Bonjour,

Ce qui pourrait nous mettre sur la piste doit se trouver avant cette ligne !
joins le code complet (ou le classeur).

quelles sont les dimensions déclarées du tableau (s'il est déclaré) ?
que contiennent colAFF_CODE , derligne et dercol au moment de l'erreur ?
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonsoir @Alza, @Paf,

A savoir que ma feuille excel est filtrée, donc à la limite si vous connaissiez une méthode pour remplir l'array uniquement avec le résultat du filtre et non tout le tableau, cela pourrait m'aider, car je n'ai pas trouvé comment faire...

Une piste dans le fichier joint. Le code est dans module1.
VB:
Sub TEST()
Dim source As Range, xarea, max&, i&, t, n&, j&

  'remplissage du tableau
  With Feuil1
    Set source = .Range("a1").CurrentRegion.SpecialCells(xlCellTypeVisible)
    For Each xarea In source.Areas: max = max + xarea.Rows.Count: Next xarea
    ReDim tsource(1 To max, 1 To source.Columns.Count)
    For Each xarea In source.Areas
      t = xarea.Value
      For i = 1 To xarea.Rows.Count
        n = n + 1
        For j = 1 To xarea.Columns.Count: tsource(n, j) = t(i, j): Next j
      Next i
    Next xarea
  End With

  'Affichage sur Feuil2
  Feuil2.UsedRange.Clear
  Feuil2.Range("a1").Resize(UBound(tsource), UBound(tsource, 2)) = tsource
End Sub

edit: si vous ne désirez pas la ligne 1 dans tsource, insérer dans le code après la ligne Set source = .Range("a1").CurrentRegion.SpecialCells(xlCellTypeVisible), la ligne suivante :
Code:
Set source = Intersect(source, .Range("a2:a" & .Rows.Count).EntireRow)
 

Pièces jointes

  • Alza- plage filtrée vers tablo- v1.xlsm
    537.2 KB · Affichages: 3
Dernière édition:

job75

XLDnaute Barbatruc
Bonjour Alza, Paf, mapomme,
J'ai vu sur la doc que les tableaux sont limités à la valeur de int, soit un peu plus de 30 000
Très curieuse doc car c'est faux !!!

Seulement si la variable derligne est déclarée As Integer il est normal que le code indiqué donne un bug si le tableau dépasse la ligne 32767...

Pour aller au-delà il faut la déclarer As Long.

A+
 

Alza

XLDnaute Junior
Bonjour à tous les trois,

@Paf Je ne peux pas joindre le code complet ni le classeur malheureusement... colAFFCODE contient 1, derligne = 42 000 et quelques et derCol = 41. En réduisant derLigne le problème du dépassement de capacité n’apparaît pas...
@mapomme merci à toi, grâce à ton code j'ai réussi à faire ce que je voulais ! enfin plus ou moins car du coup ça a bousillé toutes mes boucles qui se baisaient sur l'index du 1er tableau :eek:o_O
@job75 En effet j'ai aussi été surpris quand j'avais lu ça... Ma variable est bien déclarée à Long cependant et je ne comprend pas le pourquoi du dépassement de capacité, à savoir que quand je réduis la taille du tableau ça fonctionne...
 

Discussions similaires

Réponses
10
Affichages
493

Statistiques des forums

Discussions
311 735
Messages
2 082 024
Membres
101 873
dernier inscrit
excellllll