IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

ListView et erreur 35600 - index out of bounds [XL-2007]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Février 2008
    Messages
    144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Service public

    Informations forums :
    Inscription : Février 2008
    Messages : 144
    Par défaut ListView et erreur 35600 - index out of bounds
    Bonjour,

    Je débute dans l'utilisation des listview.
    J'ai lu le didacticiel du site sur la listview que j'ai appliqué dans ce programme car je suis en dehors des limites des listbox que j'utilise habituellement.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    Sub creerann()
     
    Load ajout
        ajout.titre.Caption = "ENTRER ANNEE AU FORMAT exemple: 2014"
        ajout.saisi1.Visible = True
    ret:
    ajout.Show vbModal
     
    If ajout.annuliste.Caption = "true" Then
        Unload ajout
        Exit Sub
    End If
     
    If ajout.saisi1.Value = "" Or ajout.saisi1.Value < 2000 Or ajout.saisi1.Value > 2100 Then
        MsgBox "l'année est incorrecte", vbCritical
        GoTo ret
    End If
     
    ann = ajout.saisi1.Value
    lign = Sheets("param").Range("o6").Value + 8
    For a = 8 To lign
        If ann = Sheets("param").Range("n" & a).Value Then
            MsgBox "l'année a déjà été créée ", vbCritical
            GoTo ret
        End If
    Next a
    Sheets("param").Range("n" & lign).Value = ann
     
    'CREATION FEUILLE LISTE TRAVAIL
    Sheets("modelistrav").Copy after:=Sheets(7)
     
    nom = "trav" & ann
    ActiveSheet.Name = nom
    Sheets(nom).Range("c3").Value = ann
    Sheets("param").Range("o" & lign).Value = nom
     
                        'remplir le tableau des journées saisi
    dater = "01-janv-" & ann
    anns = ann + 1
    For a = 7 To 372
        If dater = "01-janv-" & anns Then Exit For
        Sheets(nom).Range("o" & a).Value = Format(dater, "dd-mmm-yyyy")
        Sheets(nom).Range("p5").Value = Sheets(nom).Range("p5").Value + 1
        dater = DateAdd("d", 1, dater)
    Next a
     
    'CREATION FEUILLE TOTAL ANNEE
    Sheets("modelanntot").Copy after:=Sheets(7)
     
    nom1 = "tot" & ann
    ActiveSheet.Name = nom1
    Sheets(nom1).Range("c3").Value = ann
    Sheets("param").Range("p" & lign).Value = nom1
     
    'CREATION FEUILLE CYCLE SEMAINE
    Sheets("modelcyclsem").Copy after:=Sheets(7)
     
    nom2 = "cycl" & ann
    ActiveSheet.Name = nom2
    Sheets(nom2).Range("c3").Value = ann
    Sheets("param").Range("q" & lign).Value = nom2
     
    'complete param
    lign = lign - 7
    Sheets("param").Range("o6").Value = lign
     
    'form pour régler chaque semaine et son rythme
    annp = ann - 1
    nom2p = "cycl" & annp
    If FeuilleExiste(nom2p) = True Then annprec = True Else annprec = False
     
    ltrav = 7
     
     
    Load nvelleann
     
    With nvelleann.LISTE.ColumnHeaders
        .Clear
        .Add , "col1", "nom", 50
        .Add , "col2", "prenom", 50
        .Add , "col3", "sem46", 10
        .Add , "col4", "sem47", 10
        .Add , "col5", "sem48", 10
        .Add , "col6", "sem49", 10
        .Add , "col7", "sem50", 10
        .Add , "col8", "sem51", 10
        .Add , "col9", "sem52", 10
        .Add , "col10", "sem53", 10
        .Add , "col11", "sem1", 10
        .Add , "col12", "sem2", 10
        .Add , "col13", "sem3", 10
        .Add , "col14", "sem4", 10
        .Add , "col15", "sem5", 10
        .Add , "col16", "sem6", 10
        .Add , "col17", "sem7", 10
        .Add , "col18", "sem8", 10
        .Add , "col19", "nombres semaines type", 40
        .Add , "col20", "nombre semaines dans 1 cycle", 40
    End With
     
    For ltag = 5 To 102
        nompre = Sheets("listagent").Range("b" & ltag).Value & " " & Sheets("listagent").Range("c" & ltag).Value
        If Sheets("listagent").Range("b" & ltag).Value = "" Then ' lance analyse si nom et prenom présent
        Else
            Sheets(nom2).Range("b" & ltrav).Value = nompre
            Sheets(nom1).Range("b" & ltrav).Value = nompre
            If Sheets("listagent").Range("d" & ltag).Value > 1 Then 'si cycle plusieurs semaines
     
                If annprec = True Then 'pour rechercher dans année précédente
     
                    For a = 7 To 104 'rechercher l agent dans l'année précédente
     
                        If nompre = Sheets(nom2p).Range("b" & a).Value Then 'rempli une ligne de liste lorsque agent trouvé
     
                                nvelleann.LISTE.ListItems.Add , a, Sheets(nom2p).Range("b" & a).Value
                                'saisie année précédente
                                With nvelleann.LISTE.ListItems(nvelleann.LISTE.ListItems.Count - 1).ListSubItems
                                    .Add , , Sheets(nom2p).Range("c" & a).Value     'col 1
                                    .Add , , Sheets(nom2p).Range("av" & a).Value    'col 2
                                    .Add , , Sheets(nom2p).Range("aw" & a).Value    'col 3
                                    .Add , , Sheets(nom2p).Range("ax" & a).Value    'col 4
                                    .Add , , Sheets(nom2p).Range("ay" & a).Value    'col 5
                                    .Add , , Sheets(nom2p).Range("az" & a).Value    'col 6
                                    .Add , , Sheets(nom2p).Range("ba" & a).Value    'col 7
                                    .Add , , Sheets(nom2p).Range("bb" & a).Value    'col 8
                                    .Add , , Sheets(nom2p).Range("bc" & a).Value    'col 9
                                End With
     
                                'proposition pour nouvelle année
                                semfin = Sheets("listagent").Range("e" & ltag).Value
                                If Weekday("01-janv-" & ann) = 1 Then
                                    If Semaine("31-déc-" & annp) = 53 Then
                                        nvelleann.LISTE.ListItems(nvelleann.LISTE.ListItems.Count - 1).ListSubItems.Add , , Sheets(nom2p).Range("bc" & a).Value 'col 10
                                        sem = Left(Sheets(nom2p).Range("bc" & a).Value, 1)
                                    Else
                                      nvelleann.LISTE.ListItems(nvelleann.LISTE.ListItems.Count - 1).ListSubItems.Add , , Sheets(nom2p).Range("bb" & a).Value  'col 10
                                      sem = Left(Sheets(nom2p).Range("bb" & a).Value, 1)
                                    End If
                                Else
                                    If Semaine("31-déc-" & annp) = 53 Then
                                        sem = Left(Sheets(nom2p).Range("bc" & a).Value, 1)
                                    Else
                                        sem = Left(Sheets(nom2p).Range("bb" & a).Value, 1)
                                    End If
                                        sem = sem + 1
                                        If sem > semfin Then sem = 1
                                        typ = Sheets("listagent").Range(Cells(ltag, sem + 117))
                                        nvelleann.LISTE.ListItems(nvelleann.LISTE.ListItems.Count - 1).ListSubItems.Add , , sem & "-" & typ 'col 10
                                End If
     
                                For b = 11 To 17 ' Rempli toutes les colonnes de l'année à venir
                                    sem = sem + 1
                                    If sem > semfin Then sem = 1
                                    typ = Sheets("listagent").Range(Cells(ltag, sem + 117))
                                    nvelleann.LISTE.ListItems(nvelleann.LISTE.ListItems.Count - 1).ListSubItems.Add , , sem & "-" & typ 'col de 11 a 17
                                Next b
     
                                Exit For
                        End If
                    Next a
     
                Else 'pas d'année précédente
                    With nvelleann.LISTE.ListItems(nvelleann.LISTE.ListItems.Count - 1)
                        .ListSubItems.Add , , Sheets("listagent").Range("dn" & ltag).Value 'col 10
                        .ListSubItems.Add , , Sheets("listagent").Range("do" & ltag).Value 'col 11
                        .ListSubItems.Add , , Sheets("listagent").Range("dp" & ltag).Value 'col 12
                        .ListSubItems.Add , , Sheets("listagent").Range("dq" & ltag).Value 'col 13
                        .ListSubItems.Add , , Sheets("listagent").Range("dr" & ltag).Value 'col 14
                        .ListSubItems.Add , , Sheets("listagent").Range("ds" & ltag).Value 'col 15
                        .ListSubItems.Add , , Sheets("listagent").Range("dt" & ltag).Value 'col 16
                        .ListSubItems.Add , , Sheets("listagent").Range("du" & ltag).Value 'col 17
                    End With
     
                End If
            Else 'si cycle 1 seule semaine
     
                nvelleann.LISTE.ListItems.Add , , Sheets("listagent").Range("b" & ltag).Value
                nvelleann.LISTE.ListItems(nvelleann.LISTE.ListItems.Count - 1).ListSubItems.Add , , Sheets("listagent").Range("c" & ltag).Value 'col 1
     
                For a = 10 To 17
                    If a > 9 Then
                        donnee = Sheets("listagent").Range("dn" & ltag).Value
                        nvelleann.LISTE.ListItems(nvelleann.LISTE.ListItems.Count - 1).ListSubItems.Add , , donnee   'col 10 a 17
                    Else
                        nvelleann.LISTE.ListItems(nvelleann.LISTE.ListItems.Count - 1).ListSubItems.Add , , " "   'col 2 a 9
                    End If
                Next a
     
            End If 'fin choix cycle
            ltrav = ltrav + 1
        End If 'fin presence nom et prenom
     
    Next ltag
     
    nvelleann.LISTE.View = lvwReport
     
    nvelleann.Show vbModal
     
    b = 0
     
    For a = 7 To 104 'remplir chaque ligne (par agent)
     
        'remplir la feuille total annuel
     
        Sheets(nom1).Range("b" & a).Value = nvelleann.LISTE.ListItems(b).ListSubItems(0).Text & " " & nvelleann.LISTE.ListItems(b).ListSubItems(1).Text
        'nombre heure semaine 1
        Sheets(nom1).Range("c" & a).Value = nbreheuresem(6, a)
         'nombre heure semaine 2
        Sheets(nom1).Range("d" & a).Value = nbreheuresem(34, a)
        'nombre heure semaine 3
        Sheets(nom1).Range("e" & a).Value = nbreheuresem(62, a)
        'nombre heure semaine 4
        Sheets(nom1).Range("f" & a).Value = nbreheuresem(90, a)
     
        'remplir la feuille cycle
        Sheets(nom2).Range("b" & a).Value = nvelleann.LISTE.ListItems(b).ListSubItems(0).Text & " " & nvelleann.LISTE.ListItems(b).ListSubItems(1).Text
     
        d = 0
        For c = 3 To 55 'remplir chaque colonne de la ligne
            Sheets(nom2).Range(Cells(a, c)).Value = nvelleann.LISTE.ListItems(d).ListSubItems(a).Text
            d = d + 1
        Next c
     
        b = b + 1
    Next a
     
    Unload nvelleann
    MsgBox "ANNEE " & ann & " A ETE CREEE", vbInformation
     
     
    End Sub
    Je vous ai volontairement mis toute la sub car il y a plusieurs actions.
    Le but de cette sub est de dupliquer et remplir 3 feuilles excel lors de la création d'une nouvelle année.
    Pour cela je charge un userform pour modifier les données.
    Cet userform est rempli en fonction de l'existence de l'année précédente.

    Pour mon essai il n'y a pas d'année précédente.
    Je bloque au niveau de cette ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
                nvelleann.LISTE.ListItems(nvelleann.LISTE.ListItems.Count - 1).ListSubItems.Add , , Sheets("listagent").Range("c" & ltag).Value 'col 1
    à cet emplacement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
            Else 'si cycle 1 seule semaine
     
                nvelleann.LISTE.ListItems.Add , , Sheets("listagent").Range("b" & ltag).Value
                nvelleann.LISTE.ListItems(nvelleann.LISTE.ListItems.Count - 1).ListSubItems.Add , , Sheets("listagent").Range("c" & ltag).Value 'col 1
    le message d'erreur "35600 - index out of bounds" apparaît sur cette ligne.
    Mes colonnes sont bien déclarées,
    J'ai essayé de remplacer "nvelleann.LISTE.ListItems.Count - 1" par "0",
    J'ai essayé de remplacer "Sheets("listagent").Range("c" & ltag).Value par "a",
    Mon message reste !!!!
    Je ne comprends pas cette sortie des limites ????

    Avez vous une idée ?

    Merci pour votre aide

  2. #2
    Membre confirmé
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Février 2008
    Messages
    144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Service public

    Informations forums :
    Inscription : Février 2008
    Messages : 144
    Par défaut test subsidiaire
    J'ai vérifié que la ligne soit créée!!
    ligne juste au dessus !!

  3. #3
    Membre éclairé
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2014
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2014
    Messages : 35
    Par défaut La collection ListItems commence à 1 et pas à 0
    Bonjour,

    La collection ListItems(Index) d'un ListView fonction très bien si vous vous faite référence à la clef.
    Par contre il y a un bug sur les Index numérique qui est un Integer (de -32 768 à 32 767), donc attention si vous faites des listes de plus de 32767 éléments.

    Dans votre problème, je pense tout simplement que vous avez appelé un index qui n'existe pas.

    En effet, quand vous dite que :

    J'ai essayé de remplacer "nvelleann.LISTE.ListItems.Count - 1" par "0"
    La collection ListItems commence à 1 et pas à 0, donc le message d'erreur est normale.

    De plus si vous n'avez qu'un seul élément, cette ligne de code renverra 0 car nvelleann.LISTE.ListItems.Count - 1 = 1 - 1 = 0

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    nvelleann.LISTE.ListItems(nvelleann.LISTE.ListItems.Count - 1).ListSubItems.Add , , Sheets("listagent").Range("c" & ltag).Value 'col 1
    @+

  4. #4
    Membre chevronné
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2012
    Messages
    214
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2012
    Messages : 214
    Par défaut
    Tu as essayé en remplaçant : nvelleann.LISTE.ListItems.Count - 1 par 1
    http://silkyroad.developpez.com/VBA/ListView/

  5. #5
    Membre confirmé
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Février 2008
    Messages
    144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Service public

    Informations forums :
    Inscription : Février 2008
    Messages : 144
    Par défaut Pas mal
    merci sogedic,
    PAS MAL CETTE ERREUR !!!!
    Et pourtant j'ai lu le doc du lien que tu me donnes

    merci et bonne année

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [socket]Erreur List Index Out Of Bound
    Par afrodje dans le forum C++Builder
    Réponses: 1
    Dernier message: 23/06/2008, 16h43
  2. Message d'erreur : Liste index out of bounds (-1)
    Par valer dans le forum Langage
    Réponses: 7
    Dernier message: 25/04/2008, 08h50
  3. Erreur List Index Out Of Bound
    Par Baxter67 dans le forum C++Builder
    Réponses: 29
    Dernier message: 21/04/2008, 10h39
  4. [VBA] Run-time error : '35600' Index out of bound
    Par neo2k2 dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 18/03/2008, 16h23
  5. Réponses: 15
    Dernier message: 31/03/2007, 16h32

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo