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

5pacte-test-4.xlsm (558.70 Ko)

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

Rechercher des sujets similaires à "erreur execution indice appartient pas selection"