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 :

problème listviews vba


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 21
    Points : 12
    Points
    12
    Par défaut problème listviews vba
    bonjour,
    j'ai bien pris connaissances de cette page là : http://silkyroad.developpez.com/VBA/ListView/
    et sur mon pc (XP avec MO basique 2003) il y a plein de choses qui ne marche pas, tel que "listsubitems" ou les "with"

    En fait voilà, je m'explique, j'ai 2 colonnes d'un tableau excel, et je voudrais les mettre dans une listview.
    voici mon 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
     
     
    Private Sub UserForm_Initialize()
     
    Dim debut_col As Integer, ligne As Integer, fin_col As Integer, i As Integer, entete1 As String, entete2 As String
     
        'recherche de la fin de la colonne 1
        debut_col = 2
        ligne = debut_col
        While Worksheets("Feuil1").Cells(ligne, 1) <> ""
            ligne = ligne + 1
        Wend
        fin_col = ligne - 1
     
        entete1 = Worksheets("Feuil1").Cells(1, 1)
        entete2 = Worksheets("Feuil1").Cells(1, 2)
     
        'Le première ligne des colonne A et B contiennent les entetes
        ListView1.ColumnHeaders.Clear
        ListView1.ColumnHeaders.Add , , entete1, 70
        ListView1.ColumnHeaders.Add 1, , entete2, 70
     
        'Les autres lignes contiennent les données
        For i = debut_col To fin_col
            donnee1 = Worksheets("Feuil1").Cells(i, 1)
            donnee2 = Worksheets("Feuil1").Cells(i, 2)
            ListView1.ListItems.Add i, , donnee1
            ListView1.ListItems.Add i, , donnee2
        Next i
     
    End Sub
    Ca bloque au niveau de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ListView1.ListItems.Add i, , donnee1
    . Ca me met une erreur d'éxecution 35600 qui me dit " Index out of bounds".
    Quelqu'un a-t-il une idée pour m'aider? (car là c'est vraiment la panne sèche :/)
    Je vous en remercie d'avance.
    Beralienne

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 21
    Points : 12
    Points
    12
    Par défaut
    Merci de ta réponse.
    j'ai essayé ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ListView1.ListItems(i).Add , , donnee1
    et ça me mets une erreur de compilation : Membre de méthode ou de données introuvable
    Alors je ne comprend pas où est l'erreur.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 17
    Points : 17
    Points
    17
    Par défaut
    Salut,

    La première colonne du Listview doit être remplie avec la methode ListItems.Add.

    Pour les colonnes suivantes on utilise la méthode ListItems(i).ListSubItems.Add

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    With Listview1
          .ListItems.Add , , Donnée1DeLaPremièreColonne 'on ajoute une ligne au Listview
          .ListItems(i).ListSubItems.Add , , Donnée2 'on rempli la colonne 2
          .ListItems(i).ListSubItems.Add , , Donnée2 'on rempli la colonne 3 ...
    End With
    Je l'utilise souvent, je pense que c'est ce qui manque à ton code.

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 21
    Points : 12
    Points
    12
    Par défaut
    Merci de m'aider, mais désolé, j'insiste

    Donc j'ai testé ton 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
    Private Sub UserForm_Initialize()
     
    Dim debut_col As Integer, ligne As Integer, fin_col As Integer, i As Integer, entete1 As String, entete2 As String
    Dim donnee1 As String, donnee2 As String, NoLig As Integer
     
        debut_col = 2
        ligne = debut_col
        While Worksheets("Feuil1").Cells(ligne, 1) <> ""
            ligne = ligne + 1
        Wend
     
        fin_col = ligne - 1
        entete1 = Worksheets("Feuil1").Cells(1, 1)
        entete2 = Worksheets("Feuil1").Cells(1, 2)
        'Les données sont dans la Feuil2.
        'La premiere ligne, de la colonne A à J contient les entêtes.
        ListView1.ColumnHeaders.Clear
        ListView1.ColumnHeaders.Add , , entete1, 70
        ListView1.ColumnHeaders.Add 1, , entete2, 70
     
        NoLig = 0
        For i = 2 To fin_col 'N° de lignes de ta feuille de calculs
            NoLig = NoLig + 1   'N° de lignes de ta listview
            ListView1.ListItems(NoLig).Add , , Worksheets("Feuil1").Cells(i, 1)
            ListView1.ListItems(NoLig).Add , , Worksheets("Feuil1").Cells(i, 2)
        Next
     
    End Sub
    Mais ça me mets toujours la même erreur au niveau du add de la boucle for.

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 21
    Points : 12
    Points
    12
    Par défaut
    Merci Fabal36, mais jsutement le listsubitems ne s'affiche pas dans la liste à choisir quand on met le "." après "listitems
    Donc je n'ai pas pu le mettre.

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 21
    Points : 12
    Points
    12
    Par défaut
    bon ça marche comme ça :
    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
    Private Sub UserForm_Initialize()
     
    Dim debut_col As Integer, ligne As Integer, fin_col As Integer, i As Integer, entete1 As String, entete2 As String
    Dim donnee1 As String, donnee2 As String, NoLig As Integer
     
        debut_col = 2
        ligne = debut_col
        While Worksheets("Feuil1").Cells(ligne, 1) <> ""
            ligne = ligne + 1
        Wend
     
        fin_col = ligne - 1
        entete1 = Worksheets("Feuil1").Cells(1, 1)
        entete2 = Worksheets("Feuil1").Cells(1, 2)
        'La première ligne des colonnes A et B sont les entètes
        ListView1.ColumnHeaders.Clear
        ListView1.ColumnHeaders.Add , , entete1, 70
        ListView1.ColumnHeaders.Add 1, , entete2, 70
     
        NoLig = 0
        For i = 2 To fin_col 'N° de lignes de ta feuille de calculs
            NoLig = NoLig + 1   'N° de lignes de ta listview
            ListView1.ListItems.Add NoLig, , Worksheets("Feuil1").Cells(i, 1)
            ListView1.ListItems.Add NoLig, , Worksheets("Feuil1").Cells(i, 2)
        Next
     
    'Spécifie l'affichage en mode "Détails"
        ListView1.View = lvwReport
     
    End Sub
    seulement un autre problème se pose
    les données de la colonne A et B s'affiche dans la première colonne, et en plus ceux sont les données de la colonne B avant celles de la colonne A qui s'affiche.
    Vous avez une solution?
    Merci d'avance

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 21
    Points : 12
    Points
    12
    Par défaut
    Bien sur que j'ai testé vos solutions avant et je t'ai meme répondu comme quoi ça NE MARCHAIT PAS, et c'est pour cette raison que j'ai testé autrement.

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 21
    Points : 12
    Points
    12
    Par défaut
    et biensur, le ".value" ne change rien à la situation. Mais merci de me le dire.

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 17
    Points : 17
    Points
    17
    Par défaut Corrections du code
    Voici ton code corrigé :

    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
     
    Private Sub UserForm_Initialize()
     
    Dim debut_col As Integer, ligne As Integer, fin_col As Integer, i As Integer, entete1 As String, entete2 As String
    Dim donnee1 As String, donnee2 As String, NoLig As Integer
     
        debut_col = 2
        ligne = debut_col
        While Worksheets("Feuil1").Cells(ligne, 1) <> ""
            ligne = ligne + 1
        Wend
     
        fin_col = ligne - 1
        entete1 = Worksheets("Feuil1").Cells(1, 1)
        entete2 = Worksheets("Feuil1").Cells(1, 2)
        'La première ligne des colonnes A et B sont les entètes
        ListView1.ColumnHeaders.Clear
        ListView1.ColumnHeaders.Add , , entete1, 70
        ListView1.ColumnHeaders.Add , , entete2, 70
     
        NoLig = 1  ' Demarrer le Listview à 1
     
        For i = 2 To fin_col 'N° de lignes de ta feuille de calculs
            ' On rempli la première colonne
            ListView1.ListItems.Add , , Worksheets("Feuil1").Cells(i, 1)
            ' On rempli la deuxième colonne
            ListView1.ListItems(NoLig).ListSubItems.Add , , Worksheets("Feuil1").Cells(i, 2)
            NoLig = NoLig + 1   'N° de lignes de ta listview
        Next
     
    'Spécifie l'affichage en mode "Détails"
        ListView1.View = lvwReport
     
     
    End Sub
    Ce qui change par rapport à avant :
    - NoLig commence à 1 et non pas à 0,
    - L'instruction qui permet de renseigner la première colonne est différente de celle utilisée pour les colonnes suivantes (voir mon précédent message)

    Recopie ce code et colle le à la place de ce que tu as écrit et dit moi si çà marche cette fois.

    Bon courage.

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 21
    Points : 12
    Points
    12
    Par défaut
    Pour Fabal36 : J'ai recopier exactement ton code comme tu me la demandé et ça me mets une erreur de compilation : membre de methode ou de données introuvable

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 21
    Points : 12
    Points
    12
    Par défaut
    Pour ouskel'n'or : j'ai testé ton code également, et j'ai exactement la même erreur.
    j'ai oublié de précisé cette erreur est pour le "ListSubItems" !!!
    ce n'est pas possible il doit y avoir un soucis au niveau de vba ce n'est pas le code qui merde !!
    merci de votre dévouement.

  12. #12
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 17
    Points : 17
    Points
    17
    Par défaut Vérifie les contrôles de la boite à outil
    Bérilienne, le code que je t'ai posté fonctionne parfaitement sur mon poste.

    A mon avis il a un problème avec le contrôle Listview utilisé puisqu'il ne dispose pas de la méthode ListSubItems employée.

    Pour vérifier, Afficher la Boite à outil, clic droit, contrôles supplémentaires, vérifie que le contrôle coché est bien Microsoft Listview Control, version 6.0.

    On trouve aussi parfois un controle Microsoft Listview Control, version 5.0 (SP2) dans la liste, je crains que ce soit celui là que tu utilise. Si c'est le cas la case est cochée, il faut la décocher et prendre à la place la version 6.0

  13. #13
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    De mon côté, j'ai simplement adapté le code de SilkyRoad
    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
    Private Sub UserForm_Initialize()
        With ListView1 'remplissage ListView
            'Définit le nombre de colonnes et Entêtes
            With .ColumnHeaders 'Supprime les anciens entêtes
                .Clear
                'Ajoute 2 colonnes d'entête et fixe la largeur des colonnes
                .Add , , Cells(1, 1), 80
                .Add , , Cells(1, 2), 50
            End With
     
            Derlig = Split(ActiveSheet.UsedRange.Address, "$")(4)
            With .ListItems 'Remplissage de la 1ere colonne 
                For NoLig = 2 To Derlig
                       .Add , , Cells(NoLig, 1)
                Next
            End With
     
            For NoLig = 2 To Derlig 'Remplissage de la colonne 2
                i = i + 1
                .ListItems(i).ListSubItems.Add , , Cells(NoLig, 2)
            Next
        End With
     
        ListView1.View = lvwReport ''Spécifie l'affichage en mode "Détails"
    End Sub
    Et j'ai testé

Discussions similaires

  1. Problème EXCEL VBA
    Par olivierm34 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 11/03/2007, 23h52
  2. [VB.NET] Problème ListView avec checkbox
    Par elkidos dans le forum Windows Forms
    Réponses: 1
    Dernier message: 15/02/2007, 15h27
  3. Problème valeurs[VBA]
    Par Yanmeunier dans le forum Access
    Réponses: 1
    Dernier message: 18/05/2006, 15h17
  4. Problème de VBA de passage de 2000 à 2002
    Par Oberown dans le forum Access
    Réponses: 9
    Dernier message: 10/05/2006, 14h51
  5. problème avec VBA
    Par Delph dans le forum Langage
    Réponses: 2
    Dernier message: 19/08/2002, 13h15

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