[Resolu] erreur : Subscript out of range

taupivin

XLDnaute Junior
Bonjour a tous,

je coince sur une erreur subscript out of range.
Lorsque j'essaie de traiter des tableaux (cf fichier joint), je me retrouve avec cette erreur. Je ne comprends pas pourquoi car lorsque je lance le programme sur un faible nombre de ligne, le code ci-dessous fonctionne tres bien.


Code:
Sub Stat2DTab()
  Set f = Sheets("mb25_cutting_+_mb25_sewing")
  TblBD = f.Range("A2:C" & f.[A65000].End(xlUp).Row).Value  ' Array pour rapidité
  colCrit1 = 1: colCrit2 = 2: colOper = 3
  Set Result = f.Range("f1")                    ' Adresse résultat
  Set d1 = CreateObject("Scripting.Dictionary")    ' Dictionnaire index pour rapidité
  Set d2 = CreateObject("Scripting.Dictionary")
  Dim TblTot(): ReDim TblTot(1 To UBound(TblBD), 1 To UBound(TblBD, 2))
  Dim TblTotLig(): ReDim TblTotLig(1 To UBound(TblBD))
  Dim TblTotCol(): ReDim TblTotCol(1 To UBound(TblBD, 2))
  For i = LBound(TblBD) To UBound(TblBD)
    clé1 = TblBD(i, colCrit1): If d1.exists(clé1) Then lig = d1(clé1) Else d1(clé1) = d1.Count + 1: lig = d1.Count
    clé2 = TblBD(i, colCrit2): If d2.exists(clé2) Then col = d2(clé2) Else d2(clé2) = d2.Count + 1: col = d2.Count
    TblTot(lig, col) = TblTot(lig, col) + TblBD(i, colOper)
    TblTotLig(lig) = TblTotLig(lig) + TblBD(i, colOper)
    TblTotCol(col) = TblTotCol(col) + TblBD(i, colOper)
  Next i
  Result.Offset(1).Resize(d1.Count, 1) = Application.Transpose(d1.keys)   ' titre lignes
  Result.Offset(, 1).Resize(1, d2.Count) = d2.keys                        ' titres colonnes
  Result.Offset(1, 1).Resize(d1.Count, d2.Count) = TblTot                 ' stat 2D
  Result.Offset(d1.Count + 1, 1).Resize(, d2.Count) = TblTotCol   ' totaux colonnes
  Result.Offset(1, d2.Count + 1).Resize(d1.Count) = Application.Transpose(TblTotLig) ' totaux lignes
End Sub

Est-ce que quelqu'un a deja eu ce type de probleme ?
Merci pour votre aide.

Bien cordialement
 

Pièces jointes

  • Booksss1.xlsm
    951.9 KB · Affichages: 22

taupivin

XLDnaute Junior
En fait il semblerait que ce soit le message d'erreur survienne apres que la variable "col" prenne la valeur 4.
Le code tombe en erreur a cette ligne : TblTot(lig, col) = TblTot(lig, col) + TblBD(i, colOper)
J'ai essaye avec 3 valeur unique dans ma plage de donnees et cela fonctionne.
 

Dranreb

XLDnaute Barbatruc
Bonjour.
Apparemment vous avez confondu les dimensions nécessaires du tableau résultant avec celles du tableau d'entrée (3 colonnes) .
Soit vous le prévoyez assez grand au départ pour couvrir tous les cas de figure,
soit vous faites deux boucles en dimensionnant les tableaux seulement une fois connu le nombre de lignes et de colonnes rangées dans d1 et d2,
soit vous faites un Redim Preserve TblTot chaque fois que vous avez besoin d'une colonne supplémentaire.
 

Dranreb

XLDnaute Barbatruc
Je pense qu'il vaut mieux faire deux boucles
Une qui fait seulement l'inventaire des ligne et des colonnes, puis les Redim, et après seulement la boucle qui remplit le tableau.
Remarque: en prévoyant le nombre de colonnes suffisamment grand ça aurait l'avantage d'effacer d'anciens résultats qui en auraient eu d'avantage.
 

Statistiques des forums

Discussions
311 720
Messages
2 081 898
Membres
101 834
dernier inscrit
Jeremy06510