Erreur Execution 9 l'indice n'appartient pas a la selection
Bonsoir à tous,
J'ai une erreur exécution 9 "l'indice n'appartient pas à la sélection" et je ne comprend pas pourquoi.
Mon fichier est complexe mais fonctionne très bien pour mon utilisation.
Merci d'ailleurs encore à Gmb et Ric pour leur solution
J'ai besoin de 303 variables dans le code, ça bloque quand je rajoute une 287 ème et je ne comprend pas pourquoi a cet endroit.
la variable 287 (qui correspond à la colonne KS dans "PACTE") est en commentaire en attendant de comprendre dans mon code
Si quelqu'un a une idée svp
Losand
bonjour,
Ça bug car dercol = 286 donc ton Array n'a que 286 colonnes (la dernière colonne utilisée de la ligne 14 est JZ
A+
Bonsoir Galopin01,
Merci de t’être penché dessus.
Un dercol est forcément limité à 286? Ai je une manip à faire ?
Losand
dercol = 286 car dans ton code il y a cette ligne censée compter les colonne de ton tableau :
dercol = Cells(14, Columns.Count).End(xlToLeft).Column 'dernière colonne de la ligne 14
...Mais elle renvoi un nombre erroné à cause des colonnes fusionnées.
Difficile de suggérer une autre définition...
Tu peux peut-être remplacer par cette ligne :
dercol = UBound(tabloI, 2)
Mais c'est de la prog un peu à la Franquin...
A+
[Suite...]
Tu dois pouvoir faire un truc comme ça :
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim iC
Application.ScreenUpdating = False
Set fI = Worksheets("Tableau") 'On repére la feuille "Tableau" par une variable
Set fT = Worksheets("PACTE") 'On repère la feuille "PACTE" par une variable
tabloI = fI.Range("A1").CurrentRegion 'On met les données du tableau de la feuille "Tableau" dans une variable tableau
With fT.AutoFilter
If Not AutoFilter Is Nothing Then
Call MemoriseFiltres
Af = True
Else
Af = False
End If
End With
dercol = UBound(tabloI, 2) 'dernière colonne de la feuille "Tableau"
derln = Range("A" & Rows.Count).End(xlUp).Row 'dernière ligne de la colonne A
tabloT = Range(Cells(14, 1), Cells(derln, dercol))
ReDim tabloR(1 To UBound(tabloI, 1) - 1, 1 To UBound(tabloT, 2)) 'On définit la variable tableau du résultat
k = 0
For ii = 3 To UBound(tabloI, 1) 'On passe toutes les lignes de la variable tabloI
flag = 0
For it = 2 To UBound(tabloT, 1) 'pour chacune de ces lignes, on passe toutes les lignes de la variable tabloT
If UCase(tabloT(it, 2)) = UCase(tabloI(ii, 2)) Then 'On recherche les lignes qui ont le même nom en colonne B
'sur les 2 tableaux
flag = 1 'on indique qu'on en a trouvé une et
'on recopie à la même ligne les données de la feuille "Tableau"
'au cas ou une données ait changé
tabloT(it, 1) = tabloI(ii, 1) 'N° Dossier
For iC = 3 To 15
tabloT(it, iC) = tabloI(ii, iC)
Next
For iC = 17 To 29
tabloT(it, iC) = tabloI(ii, iC)
Next
For iC = 31 To UBound(tabloI, 2)
tabloT(it, iC) = tabloI(ii, iC)
Next
End If
Next it
If flag = 0 Then 'si flag = 0, aucune valeur en colonne B de tabloI ne corresopond
'à une valeur de la colonne B de TabloT. C'est donc qu'il faut
'ajouter la ligne du tabloI au tabloRon reporte dans tabloR les
'nouvelles données de tabloI
For iC = 1 To UBound(tabloI, 2)
tabloR(k + 1, iC) = tabloI(ii, iC)
Next
k = k + 1
End If
Next ii
'on reécrit le tabloT au bas du tableau de la feuille "PACTE" qui a pris en compte les lignes modifiées
Range("A14").Resize(UBound(tabloT, 1), UBound(tabloT, 2)) = tabloT
'on ajoute le tabloR (nouvelles lignes) au bas du tableau de la feuille Tableau
Range("A" & UBound(tabloT, 1) + 14).Resize(UBound(tabloI, 1) - 1, UBound(tabloT, 2)) = tabloR
'on classe les données du tableau de la feuille "PACTE"
dercol = Cells(14, Columns.Count).End(xlToLeft).Column 'dernière colonne de la ligne 14
derln = Range("A" & Rows.Count).End(xlUp).Row 'dernière ligne de la colonne A
tabloT = Range(Cells(14, 1), Cells(derln, dercol))
'With Range("A14").CurrentRegion
With Range(Cells(14, 1), Cells(derln, dercol))
.Sort key1:=Range("B1"), order1:=xlAscending, Header:=xlYes
'et on y met le quadrillage
'For i = 7 To 12
'.Resize(Range("A14").CurrentRegion.Rows.Count, UBound(tabloR, 2)).Borders(i).LineStyle = xlContinuous
'Next i
End With
If Af = True Then Call ReAppliqueFiltres
End Sub
Je te confirme que ca marche très bien
Merci Beucoup!
Losand