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 :

Alimentation d'un listbox multi colonnes à partir d'une table de dim variable (n, p)


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 4
    Points : 2
    Points
    2
    Par défaut Alimentation d'un listbox multi colonnes à partir d'une table de dim variable (n, p)
    Bonjour,
    Etant donnée ma modeste expérience en VBA, je me permets de demander de l'aide à vous toutes et tous. Mon problème est simple : Je souhaite alimenter un contrôle listbox multi-colonnes à partir d'une table de n lignes et p colonnes (p=5 en l'occurence).
    Si je le fais avec un listbox 1 colonne, j'ai pas de pb sinon celui du temps (ma table peut avoir jusqu'à 500000 lignes), mais là où je coince c'est pour affecter les tb(i,j) aux éléments de ma liste. je ne trouve pas le code pour affecter de tb(1,1) à tb(1,5) à listbox1, si je déclare ma listbox en multi-colonnes.
    J'espère avoir été assez clair.
    Merci pour votre aide...

  2. #2
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 617
    Points : 5 912
    Points
    5 912
    Par défaut
    Bonjour,

    Avec le code ci-dessous, ça prend 1 seconde
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Private Sub CommandButton1_Click()
        Dim Temps As Double
     
        Temps = Timer
     
        ListBox1.ColumnCount = 5
        ListBox1.List = Range("A1:E500000").Value
     
        MsgBox Format(Timer - Temps, "0.00") & " sec"
    End Sub
    Si tu veux le faire avec une boucle, il faut en premier Ajouter une ligne, puis remplir celle-ci

    exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    For i = 2 to 50
       Listbox1.AddItem  'ajout d'une ligne avant remplissage
       Listbox1.List(i - 2, 0) = Cells(i, 1)
       Listbox1.List(i - 2, 1) = Cells(i, 2)
       Listbox1.List(i - 2, 2) = Cells(i, 3)
       Listbox1.List(i - 2, 3) = Cells(i, 4)
       Listbox1.List(i - 2, 4) = Cells(i, 5)
    Next
    MPi²

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    652
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2009
    Messages : 652
    Points : 1 219
    Points
    1 219
    Par défaut
    Bonjour,

    Vous ne précisez pas si c'est
    1) une ListBox dans un UserForm
    2) un OLEObject ListBox dans une feuille
    3) autre chose (si tel est le cas, j'en apprendrais)

    Merci d'apporter la précision.

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    C'est une ListBox dans un UserForm, et merci pour votre réponse.

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Avec ce bout de code, peut-être que je me ferai mieux comprendre :

    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
    UserForm7.ListBox11.Clear
    ReDim Preserve Tb1(UBound(ary, 1), UBound(ary, 2))
    For i = 1 To UBound(ary, 1)
     k = 0
           For j = 1 To UBound(ary, 2)
     
                k = k + ary(i, j)
                Next j
                 If k > pmin And k < pmax Then
                        Tb1(i, 1) = ary(i, 1)
                         Tb1(i, 2) = ary(i, 2)
                         Tb1(i, 3) = ary(i, 3)
                         Tb1(i, 4) = ary(i, 4)
                         Tb1(i, 5) = ary(i, 5)
     
                        If Tb1(i, 1) <> 0 And Tb1(i, 2) <> 0 And Tb1(i, 3) <> 0 And Tb1(i, 4) <> 0 And Tb1(i, 5) <> 0 Then
                            UserForm7.ListBox11.AddItem (Tb1(i, 1) & vbTab & Tb1(i, 2) & vbTab & Tb1(i, 3) & vbTab & Tb1(i, 4) & vbTab & Tb1(i, 5))
     
                         End If
             End If
     
        Next i
     
    p = UserForm7.ListBox11.ListCount
    UserForm7.Label1125.Caption = p & " Nbre des possibles "
    mon pb consiste à trouver une solution pour .AddItem : comment passer les Tb1(i,j) sur j colonnes dans mon ListBox1 , au lieu que de le faire sur 1 colonne ou alors devrais-je passer par un ListView ? Je pourrais passer les ary(i,j) directement mais j'ai d'autres filtres discriminants à passer après sur les Tb1(i).

    Merci pour votre sollicitude.

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    652
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2009
    Messages : 652
    Points : 1 219
    Points
    1 219
    Par défaut
    Bonjour,

    parmi vous a donné la bonne piste.
    Un exemple commenté ci-dessous. Je l'ai mis dans Sub UserForm_Initialize mais cela peut être ailleurs (par exemple dans Sub UserForm_Click)
    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 WB As Workbook
    Dim S As Worksheet
    Dim R As Range
    Dim var As Variant
    Dim LigneFin&
    Dim ColonneFin&
     
    '### Où se trouvent les données ? ###
    Set WB = ActiveWorkbook   'dans le classeur actif (à adapter)
    Set S = WB.Sheets("Data") 'dans la feuille "Data" (à adapter)
    '--- on suppose que les données commencent en A1
    '--- et que toutes les cellules de la colonne A
    '--- ainsi que toutes les cellules de la ligne 1
    '--- sont renseignées
    LigneFin& = S.[a1].End(xlDown).Row          'dernère ligne
    ColonneFin& = S.[a1].End(xlToRight).Column  'dernière colonne
    '--- on affecte la plage de données à une variable Range
    Set R = S.Range(S.Cells(1, 1), S.Cells(LigneFin&, ColonneFin&))
    '--- on monte tout le Range dans un Variant qui va se comporter comme un tableau bidimensionné
    var = R   'toutes les données sont dans le Variant
     
    '### REMARQUE ###
    'Si vous avez des calculs, faites les à partir et dans le Variant
     
    '### ListBox ###
    '--- nombre de colonnes de la ListBox = nombre de colonnes du Variant
    ListBox11.ColumnCount = UBound(var, 2)  ',2 est la dimension des colonnes
    '--- on monte d'un seul coup le variant dans la ListBox
    ListBox11.List = var
    End Sub
    Je mets l'exemple en pièce jointe pour faciliter.

  7. #7
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    merci beaucoup pour votre aide, je vais poursuivre dans ce sens.

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

Discussions similaires

  1. delete de colonnes à partir d'une table de sauvegarde
    Par Papy214 dans le forum Développement
    Réponses: 6
    Dernier message: 26/05/2014, 09h04
  2. ListBox Multi Colonnes
    Par Hiraa dans le forum VB.NET
    Réponses: 3
    Dernier message: 05/03/2010, 07h36
  3. Insertion données dans Listbox multi colonnes
    Par jrevert dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 20/08/2009, 16h38
  4. Listbox multi colonne
    Par soso78 dans le forum Windows Forms
    Réponses: 6
    Dernier message: 12/12/2007, 10h48
  5. [VB6] comment saisir l'entête Listbox (multi colonnes)
    Par oumarsaw dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 07/04/2006, 16h21

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