L'indice n'appartient pas à la sélection

Bonjour à tous,

J'ai cette erreur dans ma macro " L'indice n'appartient pas à la sélection " ici !

Tablo2(i, 2 * j - 1) = Tablo1(i * NB_GROUPE - j + 1, 1)

lorsque i est arrivé à 24 comme NB_BLOC !

pourtant la boucle i fait bien son travail !

Sub Repartie()
Dim NB_LIGNE&, NB_GROUPE$, NB_BLOC&, Tablo1, Tablo2(), Tablo3(), tabAux(), tabOK()
Dim Deb1&, Fin1&, Deb2&, Fin2&, i&, ii&, j&, k&, n&, auxCli, auxVal
Dim oldEcart, newEcart
  Sheets("MON_PROJET (2)").Range("G10").Resize(108, 32) = ""
  Application.Calculation = xlCalculationAutomatic
  Application.ScreenUpdating = False
  NB_GROUPE = Sheets("MON_PROJET (2)").Range("Nb_Groupes").Value

  If NB_GROUPE = 0 Then
    MsgBox "Le nombre de colonnes doit être supérieure à 0 -> Echec !", vbCritical
    Exit Sub
  End If

  NB_LIGNE = Sheets("MON_PROJET (2)").Cells(Rows.Count, "B").End(xlUp).Row
  Do While Cells(NB_LIGNE, "B") = "XXX"
    Cells(NB_LIGNE, "B").Resize(, 2) = Empty
    NB_LIGNE = NB_LIGNE - 1
  Loop
  NB_LIGNE = NB_LIGNE - 20
  NB_BLOC = Int(NB_LIGNE / NB_GROUPE)
  If NB_LIGNE Mod NB_GROUPE > 0 Then
    NB_BLOC = Int(NB_LIGNE / NB_GROUPE) + 1
    Range(Cells(NB_LIGNE + 1, "B"), Cells(NB_GROUPE * NB_BLOC, "B")) = "XXX"
    Range(Cells(NB_LIGNE + 1, "C"), Cells(NB_GROUPE * NB_BLOC, "C")) = 0
    NB_LIGNE = NB_GROUPE * NB_BLOC
  End If

  Sheets("MON_PROJET (2)").Select
  Range("B8:C" & NB_LIGNE).Sort key1:=Range("C8"), order1:=xlDescending, Header:=xlNo

  Tablo1 = Sheets("MON_PROJET (2)").Range("B8:C" & NB_LIGNE).Value
  ReDim Tablo2(1 To NB_BLOC, 1 To 2 * NB_GROUPE)
  ReDim Tablo3(1 To NB_BLOC, 1 To 2 * NB_GROUPE)

   For j = 1 To NB_GROUPE
    For i = 1 To NB_BLOC Step 2
    If i > NB_BLOC Then Exit For
      Tablo2(i, 2 * j - 1) = Tablo1((i - 1) * NB_GROUPE + j, 1)
      Tablo2(i, 2 * j) = Tablo1((i - 1) * NB_GROUPE + j, 2)
    Next i
    For i = 2 To NB_BLOC Step 2
    If i > NB_BLOC Then Exit For
     Tablo2(i, 2 * j - 1) = Tablo1(i * NB_GROUPE - j + 1, 1)
      Tablo2(i, 2 * j) = Tablo1(i * NB_GROUPE - j + 1, 2)
    Next i
  Next j

  Sheets("MON_PROJET (2)").Range("G10").Resize(NB_BLOC, 2 * NB_GROUPE) = Tablo2

  'rotation de chaque ligne pour voir si l'écart moyen diminue
  oldEcart = Sheets("MON_PROJET (2)").Range("ecart_moyen").Value
  ReDim tabAux(1 To 1, 1 To 2 * NB_GROUPE)
  ReDim tabOK(1 To 1, 1 To 2 * NB_GROUPE)
  For i = 2 To NB_BLOC Step 1
    oldEcart = Sheets("MON_PROJET (2)").Range("ecart_moyen").Value
    tabOK = Sheets("MON_PROJET (2)").Range("G" & i + 2).Resize(, 2 * NB_GROUPE).Value
    tabAux = Sheets("MON_PROJET (2)").Range("G" & i + 2).Resize(, 2 * NB_GROUPE).Value
    For ii = 1 To 9
        auxCli = tabAux(1, 2 * NB_GROUPE - 1)
        auxVal = tabAux(1, 2 * NB_GROUPE)
      For j = NB_GROUPE To 2 Step -1
        tabAux(1, 2 * j) = tabAux(1, 2 * j - 2)
        tabAux(1, 2 * j - 1) = tabAux(1, 2 * j - 1 - 2)
      Next j
      tabAux(1, 1) = auxCli
      tabAux(1, 2) = auxVal

      Sheets("MON_PROJET (2)").Range("G" & i + 2).Resize(, 2 * NB_GROUPE) = tabAux

      If Sheets("MON_PROJET (2)").Range("ecart_moyen").Value < oldEcart Then
      oldEcart = Sheets("MON_PROJET (2)").Range("ecart_moyen").Value

      tabOK = Sheets("MON_PROJET (2)").Range("G" & i + 2).Resize(, 2 * NB_GROUPE).Value

      Else

      Sheets("MON_PROJET (2)").Range("G" & i + 2).Resize(, 2 * NB_GROUPE) = tabOK

      End If
    Next ii
   Next i
Sheets("MON_PROJET (2)").Select
End Sub

Merci à l'avance !

Bonjour

dans cette instruction

Tablo2(i, 2 * j - 1) = Tablo1(i * NB_GROUPE - j + 1, 1)

i * NB_GROUPE - j + 1, la valeur dépasse la première dimension du tableau tablo1, d'où l'erreur.

par exemple quand j vaut 1, i vaut 24 et NB_GROUPE vaut "4"

comme je ne sais pas ce que tu cherches à faire, je ne peux pas te proposer de solution.

Bjr,

  Tablo1 = Sheets("Feuil1").Range("B8:C" & NB_LIGNE + 7).Value

Bonjour

dans cette instruction

Tablo2(i, 2 * j - 1) = Tablo1(i * NB_GROUPE - j + 1, 1)

i * NB_GROUPE - j + 1, la valeur dépasse la première dimension du tableau tablo1, d'où l'erreur.

par exemple quand j vaut 1, i vaut 24 et NB_GROUPE vaut "4"

comme je ne sais pas ce que tu cherches à faire, je ne peux pas te proposer de solution.

Merci de me répondre !

Mon explication est dans le fichier ci-joint !

Merci !

7classement.zip (15.88 Ko)

Bjr,

  Tablo1 = Sheets("Feuil1").Range("B8:C" & NB_LIGNE + 7).Value

Bjr,

Le nombre de Lignes doit être de 96 et donc ne doit pas être positif !

NB_LIGNE = NB_LIGNE - 20

NB_LIGNE = 116

Voir le fichier ci-joint :

Bonne journée !

7classement.zip (15.88 Ko)

@ jbchb

la correction proposée ne convient pas ?

j'ai bien vu que le nombre de ligne est 96

mais quand tu mets Range("B8:C" & NB_LIGNE), comme tu pars de la ligne 8 elle n'est que de 89, c'est pour cela que cela plantait !

@ jbchb

la correction proposée ne convient pas ?

j'ai bien vu que le nombre de ligne est 96

mais quand tu mets Range("B8:C" & NB_LIGNE), comme tu pars de la ligne 8 elle n'est que de 89, c'est pour cela que cela plantait !

Re,

Bien vu !

Maintenant c'est OK

Merci !

Rechercher des sujets similaires à "indice appartient pas selection"