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-E] Problème pour remplir une listbox multicolonne


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Inscrit en
    Juin 2004
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 24
    Points : 11
    Points
    11
    Par défaut [VBA-E] Problème pour remplir une listbox multicolonne
    Bonjour à tous,

    j'ai un problème avec une listbox récalcitrante.

    Je cherche à la remplir avec des données qui viennent d'une feuille Excel.
    Dans mon userform, j'ai plusieurs combobox, notamment une qui liste des noms de personne. La source est la même que celle de la listbox.

    Je cherche a mettre à jour dynamiquement ma listbox en fonction de la valeur de la combobox. Il y a 5 colonnes à mettre à jour.

    Quand je fais un test en séléctionnant le nom de la première personne qui est dans la feuille Excel, ma macro fonctionne, j'ai bien trois lignes (car il a trois entrées qui correspondent au nom de cette personne dans la feuille Excel) ainsi que les valeur des 5 colonnes suivantes.

    Par contre, dès que je séléctionne un autre nom dans ma combobox, la mise à jour de ma listbox ne se fait que pour la 1ère colonne.

    J'ai retourné le problème dans tous les sens, je n'ai pas encore réussi à comprendre d'où venait le problème. Intuitivement, je pense qu'il y a un soucis dès que l'on séléctionne le nom d'une personne qui n'est pas le premier dans la liste de la feuille Excel... Mais après...

    Qu'en pensez vous ?

    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
     
    Private Sub ComboBox1_Change()
    Dim Comptes As New Collection
    Dim id As Integer
    Dim n As Integer
     
    Application.ScreenUpdating = False
     
    Sheets("Database").Activate
     
    id = Sheets("Database").Range("A1000").End(xlUp).Row
     
    ListBox1.Clear
     
    On Error Resume Next
     
    For n = 4 To id
    If Sheets("database").Range("A" & n).Value = ComboBox1.Value Then
        ListBox1.AddItem Sheets("database").Range("W" & n).Value
        ListBox1.List(n - 4, 1) = Sheets("database").Range("F" & n).Value
        ListBox1.List(n - 4, 2) = Sheets("database").Range("J" & n).Value
        ListBox1.List(n - 4, 3) = Sheets("database").Range("L" & n).Value
        ListBox1.List(n - 4, 4) = Sheets("database").Range("V" & n).Value
    End If
    Next n
     
    Application.ScreenUpdating = True
     
    End Sub
    Qu'en pensez vous ?

  2. #2
    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
    Juste pour le principe. Dans l'exemple, le No de colonne de la feuille de calcul est utilisé pour déterminer le No de colonne dans le combo
    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
    DernièreLigne = 100
    NbreColonnes = 6
    'Je commence par remplir la première colonne de mon combo avec Additem
    'DernièreLigne = DernièreLigne de la colonne Nom
    NoCol = 1 'N° de la 1ère colonne lue
    For i = 1 To DernièreLigne - 1 '(-1) voir explication ci-dessous
        '(+1 pour passer la ligne de titre dans la feuille de calcul, 
        'donc DernièreLigne -1 parce Cells(NoLigne + 1, NoCol)
        MaForm.ComboAideLoyers.AddItem Cells(i + 1, NoCol).Value  
    Next i
     
    'Dans cet exemple, la première colonne lue est la colonne 1, donc, je lis les suivantes
    For NoCol = 2 To NbreColonnes
        For NoLigne = 2 To DernièreLigne - 1
            MaForm.ComboAideLoyers.List(NoLigne - 1, NoCol) = Cells(NoLigne, NoCol).Value
        Next NoLigne
    Next NoCol
    On peut bien sûr combiner les deux comme tu l'as fait.
    C'est toi qui vois...
    A+

  3. #3
    Membre à l'essai
    Inscrit en
    Juin 2004
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 24
    Points : 11
    Points
    11
    Par défaut
    Je vois ce que tu veux dire Ouskel'n'or, j'ai aussi pensé faire une boucle sur les colonnes mais je ne peux pas car ces dernières ne sont pas juxtaposées.

    Pas d'idées sinon sur le fait que je n'arrive pas à remplir les autres colonnes de ma listbox quand je change la séléction de ma combobox ?

  4. #4
    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
    Citation Envoyé par Tu
    quand je change la séléction de ma combobox ?
    Que représente cette sélection ? Une donnée ? Une colonne ou un nom de colonne ?
    A+

  5. #5
    Membre à l'essai
    Inscrit en
    Juin 2004
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 24
    Points : 11
    Points
    11
    Par défaut
    Il s'agit d'un nom.

    Je compare ce nom avec la valeur de chaque cellules de la colonne A de n à id.

    Lorsque je trouve une valeur identique, alors j'ajoute les valeurs de certaines cellules de la même ligne dans ma listbox.

    Normalement l'orthographe des nom est identique car ces derniers sont rentrés à partir d'un userform et d'une list de nom prédéfinie.

  6. #6
    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
    Déjà, tu peux tester ça en adaptant id et le nom de la combo...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    id = 10
    With Worksheets("Feuil1")
        Set Plage = .Range(Cells(1, 4), Cells(1, id))
        Set c = Plage.Find(Combo.List(Me.Combo.ListIndex), LookIn:=xlValues, SearchOrder:=xlByColumns)
            If Not c Is Nothing Then
                    NoCol = c.Column
                Else
                    MsgBox "La colonne " & Me.Combo.List(Combo.ListIndex) & " n'existe pas"
            End If
    Après on verra. (pas testé mais ça devrait aller)

  7. #7
    Membre à l'essai
    Inscrit en
    Juin 2004
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 24
    Points : 11
    Points
    11
    Par défaut
    Je viens de trouver la solution.

    Il suffit de rendre indépendant le numéro de la ligne de la listbox que l'on souhaite remplir.

    Dans mon code, n était le numéro de ligne de chacune des cellules testés.

    J'ai remplacé n par une autre variable que j'incrémente de 1 à chaque fois que mon test "si" est vrai.

    Merci pour le temps que vous avez passé sur mon problème.

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

Discussions similaires

  1. Problème pour remplir une listeView multicolonne
    Par sebac dans le forum VB.NET
    Réponses: 9
    Dernier message: 29/07/2009, 03h19
  2. [VBA-E] Problème pour faire une boucle dans une userform
    Par Garlim dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 02/05/2007, 23h10
  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]Problème pour remplir une listview
    Par Le Djé dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 29/01/2006, 16h27
  5. [VB.NET] Problème pour alimenter une listbox.
    Par gueguen23 dans le forum Windows Forms
    Réponses: 6
    Dernier message: 17/01/2005, 14h05

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