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

Mettez des espions sur L, C, et BaseDD(L, C)


Vous pouvez aussi essayer :
VB:
LstIt.ListSubItems.Add Text:=CStr(BaseDD(L, C))
pour que même une valeur d'erreur dans BaseDD(L, C) soit acceptée.
 
Dernière édition:
Re : erreur d'execution - 35600 - index hors limite

LstIt.ListSubItems.Add Text:=CStr(BaseDD(L, C)): Next C, L: End With

me renvoie n'importe quoi ;-)

Capture.jpg
 

Pièces jointes

  • Capture.jpg
    Capture.jpg
    32.1 KB · Affichages: 96
  • Capture.jpg
    Capture.jpg
    32.1 KB · Affichages: 89
Re : erreur d'execution - 35600 - index hors limite

Ça m'est arrivé aussi, avec, pour une raison que je n'ai pas comprise BaseDD pris de la mauvaise feuille.
Ah, non, excuses, propriété View de la ListView sur 0 - lvwIcon au lieu de 3 - lvwReport
Possible aussi que d'autres erreurs précédentes aient aussi été dues à ça…
 
Dernière édition:
Re : erreur d'execution - 35600 - index hors limite

F4 pour afficher la fenêtre de propriétés, cliquez sur la ListView, modifier la dernière de la rubrique Divers.
…Ou l'antépénultième si vous les avez par ordre alphabétique…
 
Dernière édition:
Re : erreur d'execution - 35600 - index hors limite

Bonjour Le Fil
GADENSEB.
Pour info dans ta Feuille "Base Emploi"
Tu n'as pas de Tableau
Pour avoir un tableau tu sélectionnes ta Plage y Compris les en têtes
Insertion - Tableau -

Ta Références à BDD ici dessous :
Ne fonctionne pas car ce n'est pas un tableau mais plage nommée
Set WS = Worksheets("BASE EMPLOI")
Set LST = WS.ListObjects("BASEDD")

XLD 001.PNG
XLD 002.PNG

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

Bonsoir Le Forum, le Fil, GADENSEB
Ton Fichier en Retour :
Sur la Feuille ("BASE EMPLOI")
J'ai mis tes données sous forme de tableau .LISTOBJECTS
Il s'appelle Tableau1
Sur l'onglet ("Feuil1")
Tu lances la Macro pour ouvrir USF "GENERAL"
Voilà tes données du Tableau1 sont dans le LISTVIEW ("LISTBBD")
Tu click sur le Combobox ("COMMENTAIRESPOSTES")
Petit détail si tu renommes des Combobox mais devant par exemple CB_Commetaires
Attention j'ai modifier le Tableau1, rajouter 1ere Colonne avec N°

Les données de la Colonnes 42 du Tableau1 sont Filtrer selon le résultat de la Combobox
Attention j'ai effacé toutes tes plages nommées sur mon fichier.

Tu verras lorsque tu click sur Commanbutton FILTRER
La ListView sera remplis avec les données filtrées depuis la colonne N°42 à NBCOL ici N°52

PS : j'ai bidouillés uniquement les codes sur USF GENERAL
Pour le défiltrage du tableau1

Code:
Sub Défiltrage()
On Error Resume Next
Range("Tableau1").AutoFilter.ShowAllData
On Error GoTo 0
End Sub

Code:
Public Sel As Variant, Flag As Boolean, FlagMdP As Boolean  'variables à ne surtout pas supprimer !!
Option Explicit
Dim WS As Worksheet
Dim LST As ListObject
Dim Y As Byte, X As Byte
Dim NbCol, NbLig
Dim Largeur
Dim Cel As Range
Public Col As Integer
Dim ligne
Private Sub CONTROLEDONNEES_Click()
MacroX
CODEBASE
DATEGOOGLEAGENDA
LIENHYPERTEXTEMODIF
IniListview
End Sub
Private Sub INITIALISATION_Click()
IniListview
Défiltrage
COMMENTAIRESPOSTES.Value = ""
End Sub
Private Sub RETOUREXCEL_Click()
Unload GENERAL
End Sub
Private Sub UserForm_Initialize()
Dim Cel As Range 'Déclaration de la Variable Cel
Dim i As Byte, j As Byte
Dim tablo As New Collection 'déclare la variable tablo
Dim item As Variant 'déclare la variable item
Dim strTemp
IniListview
'***********************************************************************
'remplissage sans doublons de la ComboBox1 en passant par une Collection
'***********************************************************************
On Error Resume Next 'gestion des erreurs
'Boucle sut toutes les cel de la plage
   'ajoute un membre (la valeur de la cellule cel convertie en texte) a la collection
   'un doublon provoque une erreur
For Each Cel In LST.DataBodyRange.Columns(42).Cells
    tablo.Add CStr(Cel.Value), CStr(Cel.Value)
Next Cel

For Each item In tablo 'boucle sur tous les membres de la collection "tablo"
    Me.COMMENTAIRESPOSTES.AddItem tablo(item)
Next item 'prochain membre de la collection

'Remplissage du Combobox avec la Colonne N°42
With Me.COMMENTAIRESPOSTES
   For i = 0 To .ListCount - 1
       For j = 0 To .ListCount - 1
         If .List(i) < .List(j) Then
strTemp = .List(i)
              .List(i) = .List(j)
              .List(j) = strTemp
              End If
        Next j
    Next i
End With
End Sub
Private Sub IniListview()
Set WS = Worksheets("BASE EMPLOI")
Set LST = WS.ListObjects("TABLEAU1")
NbCol = LST.HeaderRowRange.Columns.Cells.Count
With Me.LISTBDD
    .Gridlines = True
    .HideColumnHeaders = False
    .View = lvwReport
    .ListItems.Clear
    .ColumnHeaders.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
        'Données Colonne 1 du "Tableau1" sans Entêtes et Totaux
     For Each Cel In LST.DataBodyRange.Columns(1).Cells
            .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
         Next Cel
        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
Private Sub LISTBDD_ColumnClick(ByVal ColumnHeader As MSComctlLib.ColumnHeader)
LISTBDD.Sorted = False
LISTBDD.SortKey = ColumnHeader.Index - 1
    If LISTBDD.SortOrder = lvwAscending Then
        LISTBDD.SortOrder = lvwDescending
    Else
        LISTBDD.SortOrder = lvwAscending
    End If
LISTBDD.Sorted = True
    
End Sub
Private Sub FILTRER_Click()
Dim Plage As Range
Dim Cel
Dim Cel2
'IniListview
LISTBDD.ListItems.Clear
LISTBDD.ColumnHeaders.Clear
With Sheets("BASE EMPLOI")
    .AutoFilterMode = False
    .ListObjects("Tableau1").Range.AutoFilter Field:=42, Criteria1:=Me.COMMENTAIRESPOSTES.Value
        'With .AutoFilter.Range
        'Set Plage = .Offset(1, 0).Resize(.Rows.Count - 1, 1).SpecialCells(xlCellTypeVisible)
            'For Each Cel In Plage
                With LISTBDD
                    With .ColumnHeaders
                    .Add , , LST.HeaderRowRange.Cells(1, 1).Text, LST.HeaderRowRange.Cells(1, 1).Width * 1.1
                        For Y = 42 To NbCol     'OK pour numérotation des Colonnes
                            Largeur = LST.DataBodyRange.Columns(Y).Width * 1.1
                            For Each Cel2 In LST.HeaderRowRange.Columns(Y).Cells
                                'Largeur = LST.DataBodyRange.Columns(Y).Width * 1.1
                                .Add , , Cel2, Largeur   'ici valeur Texte des Entêtes de colonnes
                                '.Add , , y, Largeur    'Ok garder ce code pour N° Col enlever au-dessus
                            Next Cel2
                        Next Y
                    End With
                For Each Cel In LST.DataBodyRange.SpecialCells(xlCellTypeVisible).Columns(1).Cells
                    .ListItems.Add , , Cel
                    For Y = 41 To NbCol
                        .ListItems(.ListItems.Count).ListSubItems.Add , , Cel.Offset(0, Y)
                    Next Y
                Next Cel
        End With
    End With
End Sub



Sub LISTBDD_DblClick()


'Cette macro se déclenche uniquement sur DoubleClick de ta Listbox
 
Dim CodeBaseValue As Variant 'Je ne sais pas ce qu'il y a dans ta base, dans le doute, Variant
 
'S'il ya un double clique sur une item
'A- Je récupére la valeur CODEBASE correspondante à la ligne cliquer
 
With LISTBDD
     CodeBaseValue = .List(.ListIndex, 1)          'X correspond au numéro de colonne dont tu veux l'information
End With
'Tu récupere la valeur sur laquelle tu as double Click
 
'B-Puis je lance l'userform  GESTIONPOSTE en remplissant tout les textbox en faisant une recherche verticale dans l'onglet BASE EMPLOI sur la valeur CODEBASE mise en mémoire.'
 Me.Hide
Load GESTIONPOSTE
 
With GESTIONPOSTE
 
     CODEBASE.Value = CodeBaseValue
     'Do some stuff
 
End With
 
GESTIONPOSTE.Show
 
End Sub
'On remplit la listbox ou la combobox LST par les données de la colonne COL
Private Sub Remplir(ByVal LST As Object, ByVal Col As Integer)
Dim MonDico As Object
Dim f As Worksheet
Dim C As Range
Dim temp()
 
Set MonDico = CreateObject("Scripting.Dictionary")
Set f = Worksheets("BASE EMPLOI")
With f
    For Each C In .Range(.Cells(2, Col), .Cells(.Rows.Count, Col).End(xlUp))
        If C.Value <> "" Then MonDico.item(C.Value) = C.Value
    Next C
End With
Set f = Nothing
temp = MonDico.Items
Set MonDico = Nothing
 
Call Tri(temp, LBound(temp), UBound(temp))
LST.List = temp
End Sub
 
Private Sub Tri(a(), ByVal gauc As Long, ByVal droi As Long)    ' Quick sort
Dim G As Long, d As Long
Dim Ref, temp
 
Ref = a((gauc + droi) \ 2)
G = gauc: d = droi
Do
    Do While a(G) < Ref: G = G + 1: Loop
    Do While Ref < a(d): d = d - 1: Loop
    If G <= d Then
        temp = a(G): a(G) = a(d): a(d) = temp
        G = G + 1: d = d - 1
    End If
Loop While G <= d
If G < droi Then Call Tri(a, G, droi)
If gauc < d Then Call Tri(a, gauc, d)
End Sub


A+
 

Pièces jointes

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

Re Bonsoir
Pour Alimenter la ListView
Avec un code plus court, je pense que l'on peut faire encore plus court, hein Danreb 😕
Code:
Sub IniListview2()
Dim L As Long, C As Long
Dim NbCol
Dim WS As Worksheet
Dim LST As ListObject
Dim LSTHEADER  As Range
Dim LSTDATA As Range

Set WS = Worksheets("BASE EMPLOI")
Set LST = WS.ListObjects("TABLEAU1")
Set LSTHEADER = LST.HeaderRowRange.Cells
Set LSTDATA = LST.DataBodyRange
NbCol = LSTHEADER.Columns.Count
NbLig = LST.DataBodyRange.Rows.Count
With LISTBDD
    .Gridlines = True
    .HideColumnHeaders = False
    .View = lvwReport
    .ListItems.Clear
    .ColumnHeaders.Clear
    With .ColumnHeaders
       For C = 1 To NbCol
          .Add , , LSTHEADER.Cells(1, C).Text, LSTHEADER.Columns(C).Width
        Next C
    End With
    .ListItems.Clear
    For L = 1 To NbLig
    .ListItems.Add , , LSTDATA.Cells(L, 1)
          For C = 2 To NbCol
      .ListItems(.ListItems.Count).ListSubItems.Add , , LSTDATA.Cells(L, C)
      Next C
             Next L
             End With
End Sub
Bonne Soirée
A Demain
 
Re : erreur d'execution - 35600 - index hors limite

Bonjour.
On devrait pouvoir fair encore un peut plus court avec :
VB:
With LISTBDD
   …
   .ListItems.Clear
      For L = 1 To NbLig
         With .ListItems.Add(, , LSTDATA.Cells(L, 1))
            For C = 2 To NbCol
               .ListSubItems.Add , , LSTDATA.Cells(L, C)
               Next C: End With: Next L: End With
 
- 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

Réponses
5
Affichages
245
  • Question Question
Microsoft 365 worksheet_change
Réponses
29
Affichages
484
Réponses
10
Affichages
282
Réponses
4
Affichages
180
  • Question Question
Microsoft 365 Erreur UBound
Réponses
4
Affichages
145
Réponses
7
Affichages
165
Retour