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 SubMerci à 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).ValueBonjour
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 !
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 !
@ 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 !