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 :

Affichage multilignes dans un ListBox [XL-2007]


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Inscrit en
    Mai 2010
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 33
    Par défaut Affichage multilignes dans un ListBox
    Bonjour à tous,
    est-ce que c'est possible de lier l'index d'un élément dans ListBox1 à PLUSIEURS éléments dans ListBox2, et comment coder celà?
    J'ai essayé ceci mais ça ne fonctionne pas

    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
    Option Explicit
     
    Private Sub UserForm_Initialize()
    ComboBox1.Clear
    Dim J As Integer
          'Définit le nombre de lignes dans la colonneH et rempli le cbx
        For J = 1 To Range("H65536").End(xlUp).Row
        ComboBox1 = Range("H" & J)
        'filtre les doublons
        If ComboBox1.ListIndex = -1 Then ComboBox1.AddItem Range("H" & J)
        Next J
         ComboBox2.Clear
    End Sub
     
     
    Private Sub ComboBox1_Click()
        'Remplissage Combo2
        Select Case ComboBox1.Value
        Case 1
        ComboBox2.AddItem "CasAA"
        ComboBox2.AddItem "CasAB"
        Case 2
        ComboBox2.AddItem "CasBA"
        ComboBox2.AddItem "CasBB"
        Case 3
        ComboBox2.AddItem "CasCA"
        ComboBox2.AddItem "CasCB"
        End Select
     
    End Sub

  2. #2
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut heuh!!!
    bonjour

    si j ai bien compris tu voudrais en cliquant sur la combo1 ajouter plusieures ligne dans la combo2

    pour cet question c'est possible


    maintenant si en cliquant sur la combo2 tu veux reunir plusieur ligne dans une variables c'est possible aussi

    mais si la condition est simple ca peut aller maintenant si la condition est aleatoire tu va perdre des cheveux


    donne un bout de fichier en expliquant voir meme un exemple on pourra peut etre t aider



    au plaisir
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  3. #3
    Membre averti
    Inscrit en
    Mai 2010
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 33
    Par défaut
    Bonjour Patrick, Merci pour ta réponse, les correspondances ne sont pas aléatoires,c'est fixe, toujours les mêmes Items qui correspondent, seulement il y a pas mal de données,
    Donc, pour un cas A choisi dans combo1, correspondront 10 cas dans combo2et ainsi de suite, j'ai réussi à afficher les 10 cas en énumérant chaque Item dans le code, mais c'est long.......(avec select case, case.....)
    Je ne sais pas si c'est clair ce que je dis?

  4. #4
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    oui c'est parfaitement clair


    avec tes select cases tu pourais utiliser une variable

    si la variable ceci

    la combobox cela

    cela dit

    j'ai peu etre une autre solution bien plus simple et qui diminurais gravement le code et le temp d'execution

    a tu penser a utilise une combobox a multicolonne puisque tes corespondances sont fixes reserve une colonne pour y placer une variable dans chaque ligne
    et en fonction de la variable que tu choisi dans le combo1 tu cherche toutes les lignes de la combo2 qui ont la meme et tu affiche que les colonnes qui te serve ca fera une sorte de repere caché je sais pas si tu ma compris
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  5. #5
    Membre averti
    Inscrit en
    Mai 2010
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 33
    Par défaut
    J'ai bien compris ce que tu dis mais malheureusement mes connaissances en VBA ne sont pas suffisantes pour savoir faire ce que tu dis. je sais que je peux trouver par ComboBox.Index chaque Item mais dans le deuxième où j'ai fais un ListBox pour permettre la multiligne, je ne sais pas comment lier un Index à plusieurs index??
    Quand tu dis "en fonction de ce que tu choisis dans la ligne de la colonne de Combo1, tu cherches celles qui a la même dans combo2," la même quoi au fait?

  6. #6
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    les données de combo1 sont issues de la colonne H, et quelle est la source de données de combo2?

  7. #7
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    rebonjour

    alors je vais repeter doucement tu va comprendre mieux

    puisque tu est censé cliquer sur la combo1 et choisir un item

    pour selectioner plusieur item dans la combo2

    la chose est simple

    l'ors du remplissage de ta combo2 sur la colonne 2 par exempleque tu peut metre 0 comme largeur pour la rendre invisible tu y met la valeur a l'item corespondant a la combo1

    exemple

    dans la combo1 tu a:

    valeur1
    valeur2
    valeur3

    quand tu rempli ta combobox2

    dans la colonne1 tu met ce que tu dois metre et dans la colonne 2tu met une des trois valeur


    a suposer que dans ta combo2 tu a:

    mr dupon en colonne1 valeur2 en colonne 2

    mr durand en colonne1 valeur1 en colonne 2

    mr michel en colonne1 valeur2 en colonne 2

    quand tu clic sur combo1

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    dim i ,e as long
     
    i=combobox2.listcount
    for e= 0 to i
    if combobox2.list(e,1)=valeur2 then montext = montext & combobox2.list(e,0)
    end if 
    a la fin ton text devrai avoir tout les noms qui sur leur ligne dans la colonne2 on la valeur choisi dans le combo1
    bon je le reconnais l'ortographe n'est pas mon fort en vba mais le principe est bon
    click sur aide et tu trouvera comment entrer plusieur colonne et sortir de la meme maniere



    au plaisir
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  8. #8
    Membre averti
    Inscrit en
    Mai 2010
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 33
    Par défaut
    A Mercatog,
    La source de la Combo2 est la colonne suivante (donc I).
    A Patrick, j'ai compris ce que tu veux dire, donc je vais essayer. Il faut d'abord que j'apprenne comment faire multicolonne alors.
    ;mais merci quand même hein. je comprends le principe, c'est déjà ça. par contre je t'assure que chez moi, plus je travaille, moins je suis payée car je ne suis pas encore assez productive

  9. #9
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    problème récurent des combobox en cascade, FAQ combo en cascade

  10. #10
    Membre averti
    Inscrit en
    Mai 2010
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 33
    Par défaut
    Alors, pour le Combo en cascade, une partie du text dans combo1 se retrouve dans combo2, etc....ce qui permet de faire le cascade........j'ai essayé de changer mais pas pu.....

  11. #11
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    On alimente en cascade ta combo1, tu sais faire
    au changement de combo1 on alimente combo2 selon critère
    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
    Option Explicit
    Dim LastLig As Long
     
    Private Sub UserForm_Initialize()
    Dim i As Long
    With Sheets("Feuil1")
       LastLig = .Cells(Rows.Count, "H").End(xlUp).Row
       For i = 2 To LastLig
          ComboBox1 = .Range("H" & i).Value
          If ComboBox1.ListIndex = -1 Then ComboBox1.AddItem .Range("H" & i).Value
       Next i
    End With
    ComboBox1.ListIndex = -1
    End Sub
     
    Private Sub ComboBox1_Change()
    Dim i As Long
    Me.ComboBox2.Clear
    With Sheets("Feuil1")
       For i = 2 To LastLig
          If .Range("H" & i).Value = ComboBox1 Then ComboBox2.AddItem .Range("I" & i).Value
       Next i
    End With
    End Sub

  12. #12
    Membre averti
    Inscrit en
    Mai 2010
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 33
    Par défaut
    Hello Mercatog,
    ça fonctionne, il y a juste un soucis, le combo2 affiche les Items AVEC DOUBLONS, comment je supprime les doublons?

  13. #13
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    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
    28
    29
    Option Explicit
     
    Dim LastLig As Long
     
    Private Sub UserForm_Initialize()
    Dim i As Long
    With Sheets("Feuil1")
       LastLig = .Cells(Rows.Count, "H").End(xlUp).Row
       For i = 2 To LastLig
          ComboBox1 = .Range("H" & i).Value
          If ComboBox1.ListIndex = -1 Then ComboBox1.AddItem .Range("H" & i).Value
       Next i
    End With
    ComboBox1.ListIndex = -1
    End Sub
     
    Private Sub ComboBox1_Change()
    Dim i As Long
    Me.ComboBox2.Clear
    With Sheets("Feuil1")
       For i = 2 To LastLig
            If .Range("H" & i).Value = ComboBox1 Then
                ComboBox2 = .Range("I" & i).Value
                If ComboBox2.ListIndex = -1 Then ComboBox2.AddItem .Range("I" & i).Value
            End If
       Next i
    End With
    ComboBox2.ListIndex = -1
    End Sub
    Je croyais à tort que tu savais alimenter une combobox sans doublons! mais bref!

  14. #14
    Membre averti
    Inscrit en
    Mai 2010
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 33
    Par défaut
    Effectivement j'ai su remplir un combo sans doublon mais quand c'est au début vers userform_initialize.
    Bref, tu vas dire, je suis stupide , mais j'ai tellement de mal que je n'ose pas bidouiller dans un code que je ne comprends pas trop.
    Justement, dans ton code, je dois selectionner ce que je veux afficher (dans combo2), mais si je veux afficher tous les Items qui correspondent à celui que j'ai choisi dans combo1 sans devoir selectionner, Je pensais que ça devait être même plus facile que ce que tu as fait. L'idée de cascade, c'est s'il y a encore un combobox3 après, donc c'est justifié la selection dans combo2. Ici, je dois plutôt afficher tous les Items, alors d'un coup je me disais que c'est peut-être mieux d'utiliser un listBox? Miantenant, j'ai déjà changer le code pour un listBox mais il me semble un peu plus compliquer de faire le ListBox sans doublon?
    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 LastLig As Long
     
    Private Sub UserForm_Initialize()
    Dim i As Long
    With Sheets("Table")
       LastLig = .Cells(Rows.Count, "H").End(xlUp).Row
       For i = 2 To LastLig
          ComboBox1 = .Range("H" & i).Value
          If ComboBox1.ListIndex = -1 Then ComboBox1.AddItem .Range("H" & i).Value
       Next i
    End With
    ComboBox1.ListIndex = -1
    End Sub
     
    Private Sub ComboBox1_Change()
    Dim i As Long
    Me.ListBox1.Clear
    With Sheets("Table")
       For i = 2 To LastLig
            If .Range("H" & i).Value = ComboBox1 Then
                ListBox1.AddItem Range("I" & i)
                If ListBox1.ListIndex = -1 Then ListBox1.AddItem Range("I" & i)
            End If
       Next i
    End With
    ListBox1.ListIndex = -1
    End Sub

  15. #15
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Pour la listbox, une proposition en passant par une collection
    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
    Private Sub ComboBox1_Change()
    Dim i As Long
    Dim lst As New Collection
     
    Me.ListBox1.Clear
    If ComboBox1.ListIndex > -1 Then
        With Sheets("Feuil1")
           For i = 2 To LastLig
            On Error Resume Next
                If .Range("H" & i).Value = ComboBox1 Then lst.Add Item:=CStr(.Range("I" & i).Value), key:=CStr(.Range("I" & i).Value)
            On Error GoTo 0
           Next i
        End With
        For i = 1 To lst.Count
            ListBox1.AddItem lst(i)
        Next i
    End If
    End Sub

  16. #16
    Membre averti
    Inscrit en
    Mai 2010
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 33
    Par défaut
    Il me met l'erreur que l'indice n'appartient pas à la selection.
    je pense que ça a voir avec le new collection ou le key?

  17. #17
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Désolé d'intervenir encore sur un point négligé.
    Si tu as adapté le code en entier à ta feuille, et si tu essaies de comprendre chaque ligne du code, tu auras épargné à soi et au forum un temps considérable.
    J'ai pensé que tu sais faire une alimentation d'une combobox sans doublons
    J'ai pensé que tu pourra adapter le code fourni à titre d'exemple pour ton classeur, notamment au niveau du nom de la feuille donnée et les colonnes d'alimentation.
    Si en fin de compte, tu n'as pas compris quelque chose, tu n'as qu'à le dire pour commenter le code proposé.
    je pense que ça a voir avec le new collection ou le key?
    Réponse, ça ne peux pas prévenir de ceci, primo parce que j'avais testé avant de poster; secundo parce que l'alimentation de la collection est mises entre une gestion d'erreur.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
            On Error Resume Next
                If .Range("H" & i).Value = ComboBox1 Then lst.Add Item:=CStr(.Range("I" & i).Value), key:=CStr(.Range("I" & i).Value)
            On Error GoTo 0
    Il reste cet élément à àdapter:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub UserForm_Initialize()
    Dim i As Long
    With Sheets("Feuil1")  '<<= LE NOM DE LA FEUILLE A ADAPTER

  18. #18
    Membre averti
    Inscrit en
    Mai 2010
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 33
    Par défaut
    Mais je t'assure que je n'ai pas mis "Feuil1", j'ai bien entendu changer le nom de la feuille, mais j'ai dis l'histoire de collection et de key, car quand je fais F1, pour savoir c'est quoi l'erreur, c'est ecrit, vous avez utilisé une collection mal-adaptée ou un key.......
    je suis désolée de te faire perdre du temps......
    merci quand même.
    d'ailleurs sans rien y comprendre, je viens de faire ceci, et ça marche sans doublons:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Private Sub ComboBox1_Change()
    Dim i As Long
    Me.ListBox1.Clear
    With Sheets("Table")
       For i = 2 To LastLig
          If .Range("C" & i).Value = ComboBox1 Then
                  ListBox1.AddItem Range("B" & i)
           End If
       Next i
    End With
    End Sub
    Tu vois, par exemple, ce matin, j'étais au travail quand j'ai posé la question, donc ici à la maison, j'ai d'autre nom de feuille et d'autres entêtes de colonnes. Donc au moins ça je sais adapter. Il ne manquait plus que je fasse du copier-coller sans réfléchir....

  19. #19
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Bon, je teste souvent, presque toujours, avant de poster sur le forum pour 2 raisons: la première pour mon propre apprentissage, la seconde pour ne pas proposer une coquille à celui qui demande l'aide, et de ce fait, par respect, pour ne pas lui faire perdre un temps précieux.
    J'ai fais un classeur test et ça fonctionne.
    si c'est pas le cas pour toi, je présume que soit tu post ton code utilisé et adapté à ton cas. soit éventuellement mettre en pièce jointes un extrait de ton fichier (sans données confidentielles).
    si ça fonctionne, c'est donc résolu

    Edit:
    lisons ton code, tu juges que c'est sans doublons. je présume que c'est dû au fait que tu n'as pas de doublons.
    il parcours la colonne C, s'il trouve une valeur=Combo1 il ajoute la cellule en B à la listbox, s'il retrouve les mêmes valeurs e C et en B, il va aussi les ajouter, et paf, doublons

  20. #20
    Membre averti
    Inscrit en
    Mai 2010
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 33
    Par défaut
    Au fait d'abord, j'ai utilisé le premier code que tu as proposé avec deux combo, après j'ai changé combo2 en listBox pour qu'il affiche plusieurs lignes, et là j'ai eu des doublons. Et là coup de théatre, j'ai oublié de changer la colonne I en B, et du coup, il m'a affiché les données correspondantes dans la colonne I et B, en remplaçant I par B dans les 2 lignes de code, j'ai eu des doublons, donc j'ai juste mis une apostrophe devant la 2ème ligne et Paff, plus de doublons....., Enfin, je ne suis pas experte, comme tu le constate.....
    Alors maintenant que j'ai trouvé cette solution-ci, mon chef veut que je mette des cases à cocher devant chaque Item.......je vais faire une autre poste

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Affichage incorrecte dans une listbox
    Par miamou dans le forum IHM
    Réponses: 3
    Dernier message: 29/04/2010, 16h07
  2. affichage tabulaire dans une listbox
    Par idream dans le forum VB.NET
    Réponses: 3
    Dernier message: 17/08/2007, 10h32
  3. Affichage d'un champ dans une listbox
    Par BigZ444 dans le forum Bases de données
    Réponses: 5
    Dernier message: 22/04/2007, 19h23
  4. Erreur de syntaxe clause FROM affichage Tous dans Listbox
    Par Lou Pitchoun dans le forum Access
    Réponses: 9
    Dernier message: 21/09/2005, 11h40

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