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 :

[VBA-Excel]Problème pour remplir une listview


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Inscrit en
    Février 2005
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 15
    Points : 13
    Points
    13
    Par défaut [VBA-Excel]Problème pour remplir une listview
    Bonjour le forum,
    Voilà j'ai 3 colonnes (A,B et D) avec environ 1500 lignes, le voudrai remplir une listview qui est sur une form avec ces données.

    Ce code ne me remplit que la 1ère colonne
    Je vous présente 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
     
    Dim nbfonction As Integer, i As Integer
     
    nbfonction = Sheets("Qualifs").Range("F1").Value
     
    ListView4.ColumnHeaders.Clear
    ListView4.ListItems.Clear
     
    'Alimentation des titres de colonne :
    ListView4.ColumnHeaders.Add , , "Code diplôme", 80, lvwColumnLeft
    ListView4.ColumnHeaders.Add , , "Domaine", 60, lvwColumnCenter
    ListView4.ColumnHeaders.Add , , "Filière", 60, lvwColumnCenter
    ListView4.ColumnHeaders.Add , , "Libellé diplôme", 160, lvwColumnCenter
     
    ListView4.SortOrder = lvwAscending
    ListView4.Sorted = True
    ListView4.SortKey = 0
     
    Dim txtA As String, txtB As String, txtC As String, txtD As String
     
    For i = 2 To nbfonction + 1
        txtA = Sheets("Qualifs").Range("A" & i).Value
        ListView4.ListItems.Add i - 1, , CStr(txtA) 'COLONNE 1
     
        txtB = Sheets("Qualifs").Range("B" & i).Value
        ListView4.ListItems(i - 1).SubItems(1) = CStr(txtB) 'COLONNE 2
     
        txtC = Sheets("Qualifs").Range("C" & i).Value
        ListView4.ListItems(i - 1).SubItems(3) = CStr(txtC) 'COLONNE 3
        ListView4.Refresh
    Next i
    Ce code par contre fonctionne mais est incroyablement long (car il effectue une boucle par colonne) :
    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
     
    Dim nbfonction As Integer, i As Integer
    nbfonction = Sheets("Qualifs").Range("F1").Value
     
    ListView4.ColumnHeaders.Clear
    ListView4.ListItems.Clear
     
    'Alimentation des titres de colonne :
    ListView4.ColumnHeaders.Add , , "Code diplôme", 80, lvwColumnLeft
    ListView4.ColumnHeaders.Add , , "Domaine", 60, lvwColumnCenter
    ListView4.ColumnHeaders.Add , , "Filière", 60, lvwColumnCenter
    ListView4.ColumnHeaders.Add , , "Libellé diplôme", 160, lvwColumnCenter
     
    ListView4.SortOrder = lvwAscending
    ListView4.Sorted = True
    ListView4.SortKey = 0
     
    Dim txtA As String, txtB As String, txtC As String, txtD As String
     
    For i = 2 To nbfonction + 1
        txtA = Sheets("Qualifs").Range("A" & i).Value
        ListView4.ListItems.Add i - 1, , CStr(txtA)
        ListView4.Refresh
    Next i
     
    For i = 2 To nbfonction + 1
        txtB = Sheets("Qualifs").Range("B" & i).Value
        ListView4.ListItems(i - 1).SubItems(1) = CStr(txtB)
        ListView4.Refresh
    Next i
     
    For i = 2 To nbfonction + 1
        txtC = Sheets("Qualifs").Range("C" & i).Value
        ListView4.ListItems(i - 1).SubItems(3) = CStr(txtC)
        ListView4.Refresh
    Next i
    Alors pourquoi l'un fonctionne et pas l'autre ?
    Merci de m'éclairer.

  2. #2
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Août 2005
    Messages
    3 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2005
    Messages : 3 317
    Points : 20 144
    Points
    20 144
    Par défaut
    bonjour

    je ne suis pas sur d'avoir bien compris car aucun des 2 exemples ne fonctionne chez moi (Excel2002)

    tu peux tester cette adaptation


    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
    Dim nbfonction As Integer, i As Integer
    Dim txtA As String, txtB As String, txtC As String, txtD As String
     
    nbfonction = Sheets("Qualifs").Range("F1").Value
     
    ListView4.ColumnHeaders.Clear
    ListView4.ListItems.Clear
     
    'Alimentation des titres de colonne :
    ListView4.ColumnHeaders.Add , , "Code diplôme", 80, lvwColumnLeft
    ListView4.ColumnHeaders.Add , , "Domaine", 60, lvwColumnCenter
    ListView4.ColumnHeaders.Add , , "Filière", 60, lvwColumnCenter
    ListView4.ColumnHeaders.Add , , "Libellé diplôme", 160, lvwColumnCenter
     
    ListView4.SortOrder = lvwAscending
    ListView4.Sorted = True
    ListView4.SortKey = 0
     
    For i = 2 To nbfonction + 1
        txtA = Sheets("Qualifs").Range("A" & i).Value
        ListView4.ListItems.Add , , CStr(txtA)
     
        txtB = Sheets("Qualifs").Range("B" & i).Value
        ListView4.ListItems(i - 1).ListSubItems.Add , , CStr(txtB)
     
        txtC = Sheets("Qualifs").Range("C" & i).Value
        ListView4.ListItems(i - 1).ListSubItems.Add , , CStr(txtC)
     
        txtD = Sheets("Qualifs").Range("D" & i).Value
        ListView4.ListItems(i - 1).ListSubItems.Add , , CStr(txtD)
    Next i
     
    ListView4.View = lvwReport


    bon dimanche
    michel

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    290
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 290
    Points : 374
    Points
    374
    Par défaut
    Bonjour,
    Tu vas dans la page de propriété de la ListView, Personnalisé/Général et à View tu choisis 3-lvwReport.J'ai essayé avec ton premier code, ça marche.

    jpleroisse

  4. #4
    Membre à l'essai
    Inscrit en
    Février 2005
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 15
    Points : 13
    Points
    13
    Par défaut
    Bonjour

    Merci leroissejp mais ma listview est déjà en "lwreport"

    J'ai bien les 4 en-têtes de colonne mais seulement la 1ère est remplie.

    J'ai oublié de préciser que :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    nbfonction = Sheets("Qualifs").Range("F1").Value 'C'est une formule qui est dans F1, NBVAL() pour avoir le nombre de lignes
    Et la solution de SilkyRoad ne fonctionne pas, merci qd même.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    290
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 290
    Points : 374
    Points
    374
    Par défaut
    Re
    Alors, c'est peut-être à cause de ta formule, comme je ne savais pas, j'ai mis 5 en F1. Fais un essai.

    jpleroisse

  6. #6
    Expert éminent
    Avatar de ThierryAIM
    Homme Profil pro
    Inscrit en
    Septembre 2002
    Messages
    3 673
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2002
    Messages : 3 673
    Points : 8 524
    Points
    8 524
    Par défaut
    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
    Dim nbfonction As Integer, i As Integer
     
    nbfonction = Sheets("Qualifs").Range("F1").Value
     
    ListView4.ColumnHeaders.Clear
    ListView4.ListItems.Clear
     
    'Alimentation des titres de colonne :
    ListView4.ColumnHeaders.Add , , "Code diplôme", 80, lvwColumnLeft
    ListView4.ColumnHeaders.Add , , "Domaine", 60, lvwColumnCenter
    ListView4.ColumnHeaders.Add , , "Filière", 60, lvwColumnCenter
    ListView4.ColumnHeaders.Add , , "Libellé diplôme", 160, lvwColumnCenter
     
    ListView4.SortOrder = lvwAscending
    ListView4.Sorted = True
    ListView4.SortKey = 0
     
    Dim itmX As ListItem
     
    For i = 2 To nbfonction + 1
        Set itmX = ListView4.ListItems.Add(i - 1, , CStr(Sheets("Qualifs").Range("A" & i).Value)) 'COLONNE 1
     
        itmX.SubItems(1) = CStr(Sheets("Qualifs").Range("B" & i).Value) 'COLONNE 2
     
        itmX.SubItems(2) = CStr(Sheets("Qualifs").Range("C" & i).Value) 'COLONNE 3
        Set itmX = Nothing
    Next i
    Et comme ça :
    Vous vous posez une question, la réponse est peut-être ici :
    Toutes les FAQs VB
    Les Cours et Tutoriels VB6/VBScript
    Les Sources VB6


    Je ne réponds pas aux questions techniques par MP. Utilisez les forums. Merci de votre compréhension

  7. #7
    Membre à l'essai
    Inscrit en
    Février 2005
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 15
    Points : 13
    Points
    13
    Par défaut
    Impeccable !

    Ca marche du premier coup et en plus c'est beaucoup plus rapide ! MERCI

Discussions similaires

  1. Problème pour remplir une ListView
    Par sebac dans le forum VB.NET
    Réponses: 3
    Dernier message: 21/05/2008, 14h59
  2. [VBA-E] Problème pour remplir une listbox multicolonne
    Par Invité dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 07/05/2007, 16h55
  3. [VBA-E] Problème pour coder une boucle
    Par lord-asriel dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 04/03/2007, 10h10
  4. [VBA-EXCEL]-condition pour ouvrir une msgbox
    Par captaine93 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 29/08/2006, 20h51
  5. [VBA Excel] Userform pour supprimer une ligne précise
    Par Viper7 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 15/06/2006, 14h32

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