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 :

L'indice n'appartient pas à la sélection


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    jeanyvesporcher
    Inscrit en
    Octobre 2020
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : jeanyvesporcher
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Octobre 2020
    Messages : 27
    Par défaut L'indice n'appartient pas à la sélection
    Bonjour,
    Je fais appel à vous pour résoudre un problème.
    Je rempli ma listview et je souhaite copier la liste entière de ma listview sur ma feuille historique
    dans un tableau structuré nommé Tableau1.
    Merci de m'aider
    Voici ci-dessous le code ;

    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
    Sub ListView_vers_Feuille()
    Dim R As Range 'déclare la variable R (Recherche)
    Dim LI As Integer 'déclare la variable LI (LIgne)
    Dim l As Integer 'déclare la variable I(Incrément)
    Dim lg As Long, cl As Long, i As Long, j As Long
    Dim T As Variant
     
    Set OB = Worksheets("Bilan") 'définit l'onglet OB
    Set TSB = OB.ListObjects("Tableau1")
     
    Set R = TSB.ListColumns(1).Range.Find("")
    If R Is Nothing Or TSB.ListRows.Count = 0 Then
        TSB.ListRows.Add 'ajoute une ligne à TSB
        LI = TSB.ListRows.Count  'définit la ligne LI (dernière ligne de TSB)
    Else
        LI = R.Row - TSB.HeaderRowRange.Row 'définit la ligne LI (ligne de la première occurrence trouvée moins la ligne de en-têtes de TSB)
    End If
     
        With UserFormFiltre.ListView1
            lg = .ListItems.Count
            cl = .ColumnHeaders.Count
            ReDim T(1 To lg, 1 To cl + 1)
            For i = 1 To lg
                T(i, 1) = .ListItems(i).Text
                For j = 1 To cl - 1
                    T(i, j + 1) = .ListItems(i).ListSubItems(j).Text
                Next j
               Next i
            End With
    For l = 1 To lg ' boucle sur les lignes du tableau
    TSB.DataBodyRange(LI, 1 + l) = T(i, 1)
    TSB.DataBodyRange(LI, 2 + l) = T(i, 2)
    TSB.DataBodyRange(LI, 3 + l) = T(i, 3)   
    TSB.DataBodyRange(LI, 4 + l) = T(i, 4) 
    TSB.DataBodyRange(LI, 5 + l) = T(i, 5)   
    TSB.DataBodyRange(LI, 6 + l) = T(i, 6)
    TSB.DataBodyRange(LI, 7 + l) = T(i, 7)
    TSB.DataBodyRange(LI, 8 + l) = T(i, 8)
    TSB.DataBodyRange(LI, 9 + l) = T(i, 9)
    Next
    End Sub

  2. #2
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 173
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Afin de rendre plus lisible le code de votre procédure, merci de le baliser comme c'est prévu dans les règles du forum (voir illustration)
    Cela étant dit, une fois que vous aurez placé le code comme il se doit, il serait opportun de nous indiquer à quel numéro de ligne du code, l'erreur "L'indice n'appartient pas à la sélection" est levée.

    Nom : dvp Editeur Balises Code.gif
Affichages : 291
Taille : 24,2 Ko
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  3. #3
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 508
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 508
    Par défaut
    Salut,

    Quelle ligne plante exactement ?
    Vérifie les dimensions des tableaux, ainsi que les indices.

    Note:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Set R = TSB.ListColumns(1).Range.Find("")
    If R Is Nothing Or TSB.ListRows.Count = 0 Then
    	TSB.ListRows.Add 'ajoute une ligne à TSB
    	LI = TSB.ListRows.Count 'définit la ligne LI (dernière ligne de TSB)
    Else
    	LI = R.Row - TSB.HeaderRowRange.Row 'définit la ligne LI (ligne de la première occurrence trouvée moins la ligne de en-têtes de TSB)
    End If
    Pas sûr d'avoir compris ce petit bout de code, mais s'il s'agit de s'assurer que le tableau structuré possède au moins une ligne et de se positionner sur la dernière, il y a plus simple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    If(TSB.ListRows.Count = 0) Then
    	TSB.ListRows.Add
    End If
     
    dim LastRow as Excel.ListRow
    Set LastRow = TSB.listrows(TSB.ListRows.Count)

  4. #4
    Membre averti
    Homme Profil pro
    jeanyvesporcher
    Inscrit en
    Octobre 2020
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : jeanyvesporcher
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Octobre 2020
    Messages : 27
    Par défaut L'indice n'appartient pas à la sélection
    Bonjour,
    Merci pour votre aide
    En faite je me suis trompé sur la boucle, For l To lg. J'ai remplacé par For i To lg et çà fonctionne.
    Sauf que dans mon tableau1 tout est décalé et créant des colonnes.
    Je vous envoi mon fichier.
    Merci encore.
    Cordialement
    Fichiers attachés Fichiers attachés

  5. #5
    Membre émérite
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2022
    Messages
    685
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Octobre 2022
    Messages : 685
    Par défaut
    Bonjour,

    en fait avec lg = .ListItems.Count tu dois parcourir ListItems de 0 = lg-1.

    Ce qui explique le premier message d'erreur (ListItems(lg) n'existe pas et par la suite le décalage : ListItems (i) est le i+1ème élément.

    Tu dois faire plutôt
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    T(i, 1) = .ListItems(i-1).Text
    avec i qui varie de 1 à lg, ou bien faire commencer tes tableaux à 0 plutôt qu'à 1, c'est une habitude à prendre.

  6. #6
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 508
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 508
    Par défaut
    C'est une bonne idée de passer par un tableau 2D,
    côté perfs, on ne fait pas mieux.

    Si j'ai bien compris,
    Tu cherches à recopier les données du listview dans le tableau structuré.
    Sais-tu que tu peux recopier un tableau 2D dans une plage en une seul opération ?
    (a condition que la taille du tableau et de la plage correspondent).

    Di coup, on peut simplifier:
    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
    Sub ListView_vers_Feuille()
        Dim lg As Long, cl As Long, i As Long, j As Long
        Dim Data() As Variant
     
        With UserFormFiltre.ListView1
                '// Collecte des données du listview
            lg = .ListItems.Count
            cl = .ColumnHeaders.Count
            ReDim Data(1 To lg, 1 To cl + 1)
            For i = 1 To lg
                Data(i, 1) = .ListItems(i).Text
                For j = 1 To cl - 1
                    Data(i, j + 1) = .ListItems(i).ListSubItems(j).Text
                Next j
            Next i
        End With
     
        Dim OB As Excel.Worksheet
        Set OB = Worksheets("Bilan") 'définit l'onglet OB
     
        Dim TSB As Excel.ListObject
        Set TSB = OB.ListObjects("Tableau1")
            '// vide le TS
        TSB.DataBodyRange.Delete
     
            '// Ajoute autant de lignes que necessaire
        For i = 1 To lg
            TSB.ListRows.Add
        Next
            '// Transfer les données
        TSB.DataBodyRange.Value = Data
     
            '// active la feuille a la fin du traitement
            '// (c'est plus joli)
        OB.Activate
    End Sub
    PS:
    Prend l'habitude d'ajouter Option Explicit en tête de tous tes module, et d'activer l'option "Déclaration de variables obligatoire" dans ton IDE (Menu: Outils ==> Option ==> Onglet Editeur).
    Donne également des nom parlant a tes fonctions et variables, ca facilitera la lecture, la relecture et la compréhension.

  7. #7
    Membre averti
    Homme Profil pro
    jeanyvesporcher
    Inscrit en
    Octobre 2020
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : jeanyvesporcher
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Octobre 2020
    Messages : 27
    Par défaut L'indice n'appartient pas à la sélection
    Merci pour ces précieux renseignements
    Merci d'avoir répondu rapidement
    Merci deedolith pour ta réponse que j'ai choisi et cela fonctionne très bien.
    Le problème est résolu
    Très cordialement

  8. #8
    Membre averti
    Homme Profil pro
    jeanyvesporcher
    Inscrit en
    Octobre 2020
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : jeanyvesporcher
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Octobre 2020
    Messages : 27
    Par défaut Nouveau problème
    Bonjour à tous
    J'ai un nouveau problème concernant la macro éditer par deedolith.
    Je reçois un message lors d'exécution de mon bouton Print(Listview_vers_feuille)

    Erreur d'exécution '35600'
    Index out of bounds

    Dans cette ligne : Data(i, j + 1) = .ListItems(i).ListSubItems(j).Text
    Cordialement

Discussions similaires

  1. [AC-2007] Erreur : L'indice n'appartient pas à la sélection
    Par Nayko dans le forum VBA Access
    Réponses: 5
    Dernier message: 04/04/2014, 11h23
  2. Réponses: 13
    Dernier message: 27/04/2012, 10h57
  3. erreur execution 9: l'indice n'appartient pas à la sélection
    Par oliver75 dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 30/07/2007, 12h00
  4. [VBA-E] L'indice n'appartient pas à la séléction.
    Par DevStage dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 07/02/2007, 17h43
  5. l'indice n'appartient pas à la sélection ??
    Par Bernard83140 dans le forum Access
    Réponses: 4
    Dernier message: 06/05/2006, 22h27

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