[Resolu] erreur : Subscript out of range

  • Initiateur de la discussion Initiateur de la discussion taupivin
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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

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.
 
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.
 
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.
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
3
Affichages
907
Réponses
1
Affichages
2 K
Réponses
68
Affichages
8 K
Retour