[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
 

Fichiers joints

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.
 

taupivin

XLDnaute Junior
Bonjour Dranreb et merci pour votre aide.
Je ne suis par sur comprendre le redim preserve TblTot, enfin je comprends l'idee mais quid de la syntaxe ?
 

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.
 

Créez un compte ou connectez vous pour répondre

Vous devez être membre afin de pouvoir répondre ici

Créer un compte

Créez un compte Excel Downloads. C'est simple!

Connexion

Vous avez déjà un compte? Connectez vous ici.

Haut Bas