erreur d'execution - 35600 - index hors limite

  • Initiateur de la discussion Initiateur de la discussion GADENSEB
  • 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 !

GADENSEB

XLDnaute Impliqué
Bonsoir,

J'ai cette erreur sur la ligne "ici l'erreur"
J'arrive pas à résoudre.

QQn aurait une idée ?




Code:
Sub IniListview()
Dim Lastline As Long
Dim LastCol As Long
 
'Dim i As Single, j As Single
Dim i, j As Integer
Dim BaseDD() As Variant
 
Dim Ws As Worksheet
Set Ws = Worksheets("BASE EMPLOI")
 
With Ws
     Lastline = .Columns(1).Find("*", , , , xlByRows, xlPrevious).Row
     LastCol = .Rows(1).Find("*", , , , xlByRows, xlPrevious).Column
 
     BaseDD = .Range(.Cells(1, 1), .Cells(Lastline, LastCol))
End With
 
With LISTBDD
     For i = LBound(BaseDD, 1) To UBound(BaseDD, 1)
          .ColumnHeaders.Add , , i, "100"
          For j = LBound(BaseDD, 2) To UBound(BaseDD, 2)
               .ListItems(.ListItems.Count).ListSubItems.Add BaseDD(i, j) -----> ici l'erreur
          Next j
     Next i
End With
End Sub
 
Re : erreur d'execution - 35600 - index hors limite

Bonsoir.
Il me semble que .ListItems(.ListItems.Count) ne peut jamais exister.
S'il y a eu 10 ListItems.Add (je n'en vois d'ailleurs aucun, seulement des ListSubItems.Add), le 1er c'est .ListItems(0) et le dernier .ListItems(9). ListItems.Count vaut 10 mais il il n'y a pas de ListItems(10)
 
Re : erreur d'execution - 35600 - index hors limite

@ David 84 :
Cela ne change rien de mettre i as long...


@ Danreb : Je ne compte pas un nombre de ListItems.Add puisque celui-ci doit bouclé le nombre de colonnes (et en-tetes) automatiquement avec i et j
 
Re : erreur d'execution - 35600 - index hors limite

@ David 84 :
Cela ne change rien de mettre i as long...


@ Danreb : Je ne compte pas un nombre de ListItems.Add puisque celui-ci doit bouclé le nombre de colonnes (et en-tetes) automatiquement avec i et j
 
Re : erreur d'execution - 35600 - index hors limite

Bonjour.
Je me suis trompé, ça ne marche pas comme une ListBox, la dernière ligne d'une ListView c'est bien .ListItems(.ListItems.Count) et non .ListItems(.ListItems.Count - 1). Mais est-ce que vous ne dépassez pas un nombre de colonne autorisé, à empiler toutes les cellules de tout le tableau à droite de la dernière ligne existante ? S'il en existe toutefois une ! J'en doute un peu vu qu'il n'y a aucun ListItem.Add pour la créer, avec sa 1ère colonne…
 
Re : erreur d'execution - 35600 - index hors limite

Dans le tableau BaseDD ou dans la ListView, où vous sembler vouloir l'y transposer (intervertir les lignes et les colonnes) ?
VB:
Dim L As Long, C As Long, LstIt As MSComctlLib.ListItem
With LISTBDD
   With .ColumnHeaders: .Clear
      For L = 1 To UBound(BaseDD, 1)
         .Add Text:=CStr(L), Width:=100: Next L: End With
   .ListItems.Clear
   For C = 1 To UBound(BaseDD, 2)
      Set LstIt = .ListItems.Add(Text:=BaseDD(1, C))
         For L = 2 To UBound(BaseDD, 1)
            LstIt.ListSubItems.Add Text:=BaseDD(L, C): Next L, C: End With
1200 colonnes pour une ListView ça me parait beaucoup.
Alors, pour la remplir normalement :
VB:
Dim L As Long, C As Long, LstIt As MSComctlLib.ListItem
With LISTBDD
   With .ColumnHeaders: .Clear
      For C = 1 To UBound(BaseDD, 2)
         .Add Text:=CStr(C), Width:=100: Next C: End With
   .ListItems.Clear
   For L = 1 To UBound(BaseDD, 1)
      Set LstIt = .ListItems.Add(Text:=BaseDD(L, 1))
         For C = 2 To UBound(BaseDD, 2)
            LstIt.ListSubItems.Add Text:=BaseDD(L, C): Next C, L: End With
 
Dernière édition:
Re : erreur d'execution - 35600 - index hors limite

Du coup le code se serait ça !
Mais j'ai une erreur d'incompatibilité 13


Code:
Sub IniListview()
Dim Lastline As Long
Dim LastCol As Long
 
'Dim i As Single, j As Single
Dim i As Integer
Dim j As Integer

Dim BaseDD() As Variant
 
Dim Ws As Worksheet
Set Ws = Worksheets("BASE EMPLOI")
 
With Ws
     Lastline = .Columns(1).Find("*", , , , xlByRows, xlPrevious).Row
     LastCol = .Rows(1).Find("*", , , , xlByRows, xlPrevious).Column
 
     BaseDD = .Range(.Cells(1, 1), .Cells(Lastline, LastCol))
End With



Dim L As Long, C As Long, LstIt As MSComctlLib.ListItem
With LISTBDD
   With .ColumnHeaders: .Clear
      For C = 1 To UBound(BaseDD, 2)
         .Add Text:=CStr(C), Width:=100: Next C: End With
   .ListItems.Clear
   For L = 1 To UBound(BaseDD, 1)
      Set LstIt = .ListItems.Add(Text:=BaseDD(L, 1))
         For C = 2 To UBound(BaseDD, 2)
            LstIt.ListSubItems.Add Text:=BaseDD(L, C): Next C, L: End With
end sub
 
Re : erreur d'execution - 35600 - index hors limite

Bonsoir Le Forum, Le Fil
GADENSEB pourquoi tu n'utilises pas LISTOBJECT ?
Voici un code qui remplis dynamiquement un LISTVIEW :

PHP:
Option Explicit
Private Sub UserForm_Initialize()
Dim WS As Worksheet
Dim LST As ListObject
Dim Y As Byte, X As Byte
Dim NbCol, NbLig
Dim Largeur
Dim cel As Range
Dim Col

Set WS = Worksheets("DATA")
Set LST = WS.ListObjects("Tableau1")

With Me.ListView1
    .Gridlines = True
    .HideColumnHeaders = False
    .View = lvwReport
    .ListItems.Clear
    'REMPLISSAGE DES ENTETES "HEADERS"
    With .ColumnHeaders
        For Y = 1 To NbCol     'OK pour numérotation des Colonnes
            For Each cel In LST.HeaderRowRange.Columns(Y).Cells
                Largeur = LST.DataBodyRange.Columns(Y).Width * 1.1
                .Add , , cel, Largeur   'ici valeur Texte des Entêtes de colonnes
            '.Add , , y, Largeur    'Ok garder ce code pour N° Col enlever au-dessus
            Next cel
        Next Y
    End With
    'Ligne = 1
        'Données Colonne 1 du "Tableau1" sans Entêtes et Totaux
       ' For Each cel In LST.DataBodyRange.Columns(1).Cells
        
        'Données Colonne 1 du "Tableau1" sans Entêtes avec Totaux
        For Each cel In LST.DataBodyRange.Columns(1).Cells.Resize(NbLig + 1, 1)
            .ListItems.Add , , cel.Text     'Text pour reprendre le Format
            X = .ListItems.Count
                For Col = 1 To NbCol - 1
                   ' .ListItems(Ligne).ListSubItems.Add , , cel.Offset(, Col)
                    .ListItems(X).ListSubItems.Add , , cel.Offset(, Col).Text
                   ' .ListSubItems(NbCol - 1).ForeColor = cel.Offset(0, NbCol - 1).Font.Color
                    .ListItems(X).ListSubItems(Col).ForeColor = cel.Offset(, Col).Font.Color
                    '.ListItems(X).ListSubItems(Col).TooltipText = cel.Offset(, Col).AddComment
                    Next Col
            'Ligne = Ligne + 1
         Next cel
         For Col = 1 To NbCol - 1
         .ListItems(.ListItems.Count - 1).ListSubItems(Col).ForeColor = vbRed
        .ListItems(.ListItems.Count - 1).ListSubItems(Col).Bold = True
        .ListItems(.ListItems.Count - 1).ListSubItems(NbCol - 1).Bold = True
         Next Col
         
        For X = 1 To .ListItems.Count - 1
        .ListItems(X).Bold = True
        .ListItems(X).ListSubItems(NbCol - 1).Bold = True
        Next X
        
        MsgBox "Ce " & LST.Name & " comporte : " & Chr(10) & Chr(10) & _
        "Colonnes : " & NbCol & Chr(10) & _
        "Lignes : " & LST.DataBodyRange.Rows.Count & " ( Sans Totaux ) " & Chr(10) & _
        "Lignes : " & LST.DataBodyRange.Rows.Count + 1 & " ( Avec Totaux )" & Chr(10) & _
        "Cellules : " & LST.DataBodyRange.Count & " ( Sans Totaux ) " & Chr(10) & _
         "Cellules : " & LST.DataBodyRange.Resize(NbLig + 1, NbCol).Count & " ( Avec Totaux ) " & Chr(10) & Chr(10) & _
 _
        "Cette : " & Me.ListView1.Name & " comporte :" & Chr(10) & Chr(10) & _
        "Colonnes : " & Me.ListView1.ColumnHeaders.Count & Chr(10) & _
        "Lignes : " & Me.ListView1.ListItems.Count & Chr(10) & _
        "Cellules : " & (.ListItems.Count - 1) * .ColumnHeaders.Count & " ( Sans Totaux ) " & Chr(10) & _
        "Cellules : " & .ListItems.Count * .ColumnHeaders.Count & " ( Avec Totaux ) "
        

End With
Me.Caption = "Nombres d'enregistrements : " & LST.DataBodyRange.Rows.Count
End Sub
Avec Le Fichier en PJ
A+
 

Pièces jointes

Re : erreur d'execution - 35600 - index hors limite

Hello

@ Dranreb : J'arrive pas à savoir sur quelle instruction......


@ Regueiro : J'ai testé ton fichier et ton code --> Super

Du coup j'essaye de l'adapter au mien

(j'ai renommé mon usf BDD --> GENERAL)

Mais cela pose des problémes ... est-ce que tu peux regarder svp


Bonne journée

Seb

Code:
Private Sub IniListview()
Dim WS As Worksheet
Dim LST As ListObject
Dim Y As Byte, X As Byte
Dim NbCol, NbLig
Dim Largeur
Dim cel As Range
Dim Col

Set WS = Worksheets("BASE EMPLOI")
Set LST = WS.ListObjects("BASEDD")

With Me.LISTBDD
    .Gridlines = True
    .HideColumnHeaders = False
    .View = lvwReport
    .ListItems.Clear
    'REMPLISSAGE DES ENTETES "HEADERS"
    With .ColumnHeaders
        For Y = 1 To NbCol     'OK pour numérotation des Colonnes
            For Each cel In LST.HeaderRowRange.Columns(Y).Cells
                Largeur = LST.DataBodyRange.Columns(Y).Width * 1.1
                .Add , , cel, Largeur   'ici valeur Texte des Entêtes de colonnes
            '.Add , , y, Largeur    'Ok garder ce code pour N° Col enlever au-dessus
            Next cel
        Next Y
    End With
    'Ligne = 1
        'Données Colonne 1 du "Tableau1" sans Entêtes et Totaux
       ' For Each cel In LST.DataBodyRange.Columns(1).Cells
         
        'Données Colonne 1 du "Tableau1" sans Entêtes avec Totaux
        For Each cel In LST.DataBodyRange.Columns(1).Cells.Resize(NbLig + 1, 1)
            .ListItems.Add , , cel.Text     'Text pour reprendre le Format
            X = .ListItems.Count
                For Col = 1 To NbCol - 1
                   ' .ListItems(Ligne).ListSubItems.Add , , cel.Offset(, Col)
                    .ListItems(X).ListSubItems.Add , , cel.Offset(, Col).Text
                   ' .ListSubItems(NbCol - 1).ForeColor = cel.Offset(0, NbCol - 1).Font.Color
                    .ListItems(X).ListSubItems(Col).ForeColor = cel.Offset(, Col).Font.Color
                    '.ListItems(X).ListSubItems(Col).TooltipText = cel.Offset(, Col).AddComment
                    Next Col
            'Ligne = Ligne + 1
         Next cel
         For Col = 1 To NbCol - 1
         .ListItems(.ListItems.Count - 1).ListSubItems(Col).ForeColor = vbRed
        .ListItems(.ListItems.Count - 1).ListSubItems(Col).Bold = True
        .ListItems(.ListItems.Count - 1).ListSubItems(NbCol - 1).Bold = True
         Next Col
          
        For X = 1 To .ListItems.Count - 1
        .ListItems(X).Bold = True
        .ListItems(X).ListSubItems(NbCol - 1).Bold = True
        Next X
         
        MsgBox "Ce " & LST.Name & " comporte : " & Chr(10) & Chr(10) & _
        "Colonnes : " & NbCol & Chr(10) & _
        "Lignes : " & LST.DataBodyRange.Rows.Count & " ( Sans Totaux ) " & Chr(10) & _
        "Lignes : " & LST.DataBodyRange.Rows.Count + 1 & " ( Avec Totaux )" & Chr(10) & _
        "Cellules : " & LST.DataBodyRange.Count & " ( Sans Totaux ) " & Chr(10) & _
         "Cellules : " & LST.DataBodyRange.Resize(NbLig + 1, NbCol).Count & " ( Avec Totaux ) " & Chr(10) & Chr(10) & _
 _
        "Cette : " & Me.LISTBDD.Name & " comporte :" & Chr(10) & Chr(10) & _
        "Colonnes : " & Me.LISTBDD.ColumnHeaders.Count & Chr(10) & _
        "Lignes : " & Me.LISTBDD.ListItems.Count & Chr(10) & _
        "Cellules : " & (.ListItems.Count - 1) * .ColumnHeaders.Count & " ( Sans Totaux ) " & Chr(10) & _
        "Cellules : " & .ListItems.Count * .ColumnHeaders.Count & " ( Avec Totaux ) "
         

End With
Me.Caption = "Nombres d'enregistrements : " & LST.DataBodyRange.Rows.Count
End Sub
 

Pièces jointes

Dernière édition:
Re : erreur d'execution - 35600 - index hors limite

Bonjour.
En tout cas chez moi, où je n'ai pas de ListObject, j'ai réussi à faire tourner ça, à grand peine, après avoir fini par renoncer à me battre avec vos Find qui ne marchaient pas :
VB:
Sub IniListview()
Dim BaseDD() As Variant, L As Long, C As Long, LstIt As MSComctlLib.ListItem
With ThisWorkbook.Worksheets("BASE EMPLOI")
   L = .[A60000].End(xlUp).Row
   C = .[A1].End(xlToRight).Column
   BaseDD = .[A1].Resize(L, C).Value: End With
With LISTBDD
   With .ColumnHeaders: .Clear
      For C = 1 To UBound(BaseDD, 2)
         .Add Text:=BaseDD(1, C), Width:=100: Next C: End With
   .ListItems.Clear
   For L = 2 To UBound(BaseDD, 1)
      Set LstIt = .ListItems.Add(Text:=BaseDD(L, 1))
         For C = 2 To UBound(BaseDD, 2)
            LstIt.ListSubItems.Add Text:=BaseDD(L, C): Next C, L: End With
End Sub
 
Re : erreur d'execution - 35600 - index hors limite

Cochez peut être "Arrêt dans le module de classe", menu Outils, Options…, onglet Général, rubrique Récupération d'erreurs, afin de voir l'instruction qui bloque dans l'Userform, au lieu du Show. Il faut arriver à dépasser ces problèmes de renseignement du tableau BaseDD, afin de voir enfin si le remplissage de la ListView est bon, lui…
 
- 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

  • Question Question
Microsoft 365 worksheet_change
Réponses
29
Affichages
481
Réponses
10
Affichages
281
Réponses
4
Affichages
179
  • Question Question
Microsoft 365 Erreur UBound
Réponses
4
Affichages
144
Réponses
7
Affichages
164
Retour