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 listebox multiple colonne à partir de plusieurs combobox


Sujet :

Macros et VBA Excel

  1. #1
    Membre éclairé
    Inscrit en
    Juillet 2007
    Messages
    502
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 502
    Par défaut affichage listebox multiple colonne à partir de plusieurs combobox
    'ai un big probleme sur le code si dessous , je pensais avoir trouver mais non
    dans mon formulaire j'ai 5 combox qui , à l'initialisatoin, sont vides et donc le listbox devrait afficher tout le contenu de la feuil2?

    si je selectionne un ou plusieur combobox ,en fonction du critere, le listbox ne devrait contenir que les donnes coorespondant au filtre . mais ce n'est pas le cas


    merci de votre aide

  2. #2
    Membre éclairé
    Inscrit en
    Juillet 2007
    Messages
    502
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 502
    Par défaut
    bonjour
    voila j'ai apporte qql modif , mais dans la liste box je n'ai qu'une colonne qui s'affiche ????
    c'est la partie du code que j'ai modifié par rapport à celui dans le fichier joint dans le premier post
    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
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
     
    Private Sub recherche() 'recherche multicritere
    Dim lignedebut As Integer
    Dim derniereligne As Integer
     
    Dim c1$, c2$, c3$, c4$, c5$, c6$, j
    Dim Cu1$, Cu2$, Cu3$, Cu4$, Cu5$, Cu6$
    Cu1 = "" 'type installation
    Cu2 = "" 'n° installation
    Cu3 = "" 'site
    Cu4 = "" 'entreprise
    Cu5 = "" 'etablissement
     
     
    j = 0
     
    ListBox1.Clear
    ListBox1.BoundColumn = 5
    ListBox1.ColumnWidths = "15;15;20;10;10;"
     
     
    derniereligne = Sheets("feuil2").Range("A4").End(xlDown).Row 'derniere ligne occupee dans colonne A
     
    For lignedebut = 4 To derniereligne 'on test le contenu des combobox
         If ComboBox5.Value <> "" Then Cu3 = ComboBox5.Value Else Cu3 = Sheets("feuil2").Cells(lignedebut, 6)
         If ComboBox6.Value <> "" Then Cu2 = ComboBox6.Value Else Cu2 = Sheets("feuil2").Cells(lignedebut, 1)
         If ComboBox22.Value <> "" Then Cu4 = ComboBox22.Value Else Cu4 = Sheets("feuil2").Cells(lignedebut, 11)
         If ComboBox24.Value <> "" Then Cu1 = ComboBox24.Value Else Cu1 = Sheets("feuil2").Cells(lignedebut, 2)
         If ComboBox3.Value <> "" Then Cu5 = ComboBox3.Value Else Cu5 = Sheets("feuil2").Cells(lignedebut, 7)
     
     
        'test final avec toute les conditon imbriquee
        'affichage  dans listbox en multicolonne
        If Sheets("feuil2").Cells(lignedebut, 2) = Cu1 And Sheets("feuil2").Cells(lignedebut, 1) = Cu2 And Sheets("feuil2").Cells(lignedebut, 6) = Cu3 And Sheets("feuil2").Cells(lignedebut, 11) = Cu4 Then
        ListBox1.AddItem
        ListBox1.Column(0, j) = Sheets("feuil2").Cells(lignedebut, 1).Value 'n°installation
        ListBox1.Column(1, j) = Sheets("feuil2").Cells(lignedebut, 2).Value 'type installation
        ListBox1.Column(2, j) = Sheets("feuil2").Cells(lignedebut, 6).Value 'site
        ListBox1.Column(3, j) = Sheets("feuil2").Cells(lignedebut, 7).Value 'etablissement
        ListBox1.Column(4, j) = Sheets("feuil2").Cells(lignedebut, 11).Value 'entreprise
     
     
        j = j + 1
     
     
        End If
    Next lignedebut
    End Sub

  3. #3
    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
    Par défaut
    Déjà, pour renseigner tes combobox, tu as plus simple
    Pour me simplifier la vie, j'ai donné aux combos les N° de colonnes. C'est tout de même plus orthodoxe (!)
    Tu devras adapter sinon, la procédure Recherche ne retrouve pas ses petits et plante.
    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 UserForm_initialize()
    'change la couleur des combobox servant à la construction du filtre
        ComboBox1.BackColor = 8454016
        ComboBox2.BackColor = 8454016
        ComboBox6.BackColor = 8454016
        ComboBox7.BackColor = 8454016
        ComboBox11.BackColor = 8454016
     
       Dim derniereligne As Integer
       Dim FL2 As Worksheet
        Set FL2 = Worksheets("Feuil2")
        derniereligne = FL2.Range("A4").End(xlDown).Row 'derniere ligne occupee dans colonne A
        ComboBox1.RowSource = FL2.Range("A4:A" & derniereligne).Address
        ComboBox2.RowSource = FL2.Range("B4:B" & derniereligne).Address
        ComboBox6.RowSource = FL2.Range("F4:F" & derniereligne).Address
        ComboBox7.RowSource = FL2.Range("G4:G" & derniereligne).Address
        ComboBox11.RowSource = FL2.Range("K4:K" & derniereligne).Address
    End Sub
    Pour la couleur de fond, j'ai donc converti en décimal.

    Je ne comprends pas ce que tu veux faire en recherche. J'ai bien compris que tu voulais rassembler dans la liste les données de tes combos mais pourquoi passer par une sélection dans le combo si c'est pour créer une liste de toutes les lignes.
    Comme je soupçonne qu'il y a plus simple, peux-tu préciser ta volonté
    A+

    Edit
    Ce ne serait pas un truc dans ce genre là que tu voudrais ?
    Pièce jointe 27727 'corrigé pour afficher la ligne dans les combos
    Comme tu vois, la sélection dans un combo permet d'afficher dans les autres combos les données de la même ligne de ta feuille de calculs.
    Si c'est bien ce que tu veux mettre dans ta liste, tu n'as même pas besoin de cette liste
    Tu testes et tu dis
    A+

    NB - Il y a sans doute plus simple mais pour ça il serait nécessaire de savoir ce que tu veux dans ta liste

  4. #4
    Membre éclairé
    Inscrit en
    Juillet 2007
    Messages
    502
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 502
    Par défaut
    bonjour ouskenor
    Je ne comprends pas ce que tu veux faire en recherche. J'ai bien compris que tu voulais rassembler dans la liste les données de tes combos mais pourquoi passer par une sélection dans le combo si c'est pour créer une liste de toutes les lignes.
    Comme je soupçonne qu'il y a plus simple, peux-tu préciser ta volonté

    En fait , la liste de toutes les lignes c'est le cas ou aucune des combobox n'est selectionnée.
    mais dans la majorite des cas il y aura plusieurs combobox qui seront remplies et donc un filtre sera applique et il ne sera afficher dans la listbox que les lignes de la feuiil2 qui rempliront les conditions du filtre.

    ex le selectionne entreprise7 , j'aurais 5 lignes (4,5,7,8,9)
    si je rajoute Straphael il me restera 3 lignes (4,5,8)

    l'objectif final est de cliquer sur une des lignes contenue dans la listebox pour afficher la totalite des infos contenu dans la feuil2 via un formulaire .



    Apres essai, ce nest pas tout à fait cela car comme je dis plus haut, dans ce post, si rien de selectionner , dans le listebox il faut tout.
    si une selection seul les lignes correspondante à la selection s'afficheront

  5. #5
    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
    Par défaut
    Comme quoi, les explications, c'est parfois nécessaire...
    Pour renseigner ta liste quand rien n'est sélectionné dans les combo, tu ajoute cette ligne en fin d'userform_initialize
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Private Sub UserForm_initialize()
    Dim derniereligne As Integer
        Set FL2 = Worksheets("Feuil2")
        derniereligne = FL2.Range("A4").End(xlDown).Row
        'Le code actuel
        '...
     
        ListBox1.List() = Tablo
    End Sub
    et ajoute la macro qui suit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub InitList(derniereligne As Long)
    Dim Tablo(), i, j
    Dim combo
        combo = Array("A", "B", "F", "G", "K")
        ReDim Tablo(derniereligne, UBound(combo))
        For i = 4 To derniereligne
            For j = 0 To 4
                Tablo(i - 4, j) = FL2.Range(combo(j) & i).Value
            Next
        Next
        ListBox1.List() = Tablo
    End Sub
    Tu pourras ainsi l'appeler de "partout avec derniereligne comme paramètre

    Pour le filtre, tu le fais à partir de quel combo ? Comment vois-tu ça ?
    A+

    Edit
    Tableau Combo corrigé de 0 à 4, commençant par "A"

  6. #6
    Membre éclairé
    Inscrit en
    Juillet 2007
    Messages
    502
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 502
    Par défaut
    bonjour ouskel'n'or

    peut un porte le combobox , dans l'exemple il y en à 5 (dans le prog final il y en a 20).
    c'est pour cela que j'avais choisi l'evenement change dans tout les combobox.



    ex : on peut choisir entreprise+ sitegeographique
    ou sitegeographique+typeinstallation+sitegeographique+etablissement
    etc..........


    j'ai modifie le fichier mais il y qql erreur : j'ai passer la variable en global
    Dim Tablo(0, 4) As Variant

    le programme tourne mais les combobox se remplissent toutes seuls ?????
    et si je selectionne un combobox , toutes
    se remplissent??? pas bon



    dans le programme d'origine , meme si code n'est pas top, le combobox se remplissent sans doublon !!!!

  7. #7
    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
    Par défaut
    Tu as joint le fichier que je t'ai envoyé à l'execption de ce que j'avais ajouté dans Userform_Initialize.
    Je te demande ce que tu veux faire. Reprends depuis le début.

    Tu veux pouvoir sélectionner ce que tu veux dans chacun des combobox ?
    Dans certains combos seulement ? Dans tous ?
    Pour obtenir quoi ?
    Quel type de filtre veux-tu obtenir ?
    Que veux-tu voir s'afficher dans la listbox une fois tes sélections faites ?

    L'histoire de l'affichage dans tous les combos lors de la sélection dans l'un d'eux, c'était volontaire, on peut le supprimer ainsi que les doublons.

  8. #8
    Membre éclairé
    Inscrit en
    Juillet 2007
    Messages
    502
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 502
    Par défaut
    bonsoir ouskel'n'or
    bon reprenons.


    Je te demande ce que tu veux faire. Reprends depuis le début.
    au depart , l'ensemble des combobox doit etre vide et la listebox doit contenir l'ensemble des lignes presentent dans la feuil2.

    les combobox doivent contenir la liste respective de chaque colonne de la feuil2 sans doublons. cb1=col a, cb2=colb, cb6=colF, cb7=col G, cb11=col K.
    si on click sur un des combobox 6une liste deroulante apparait et on fait son choix. les autres combobox reste vide.
    dans la listebox seules s'affichent les lignes correspndantes au critere la combobox selectionner

    si derrriere on choisi un autre combobox, cb7(par exemple) , idem, il s'affiochera dans listebox que les lignes qui repondent au choix realisé dans cb6+cb7.


    et enfin au final si je click sur une des lignes dans le listebox, j'ouvre un formulaire qui reprendra l'ensemble des infos des la feuil2 pour la ligne considerée.


    merci

  9. #9
    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
    Par défaut
    Youpi, j'ai tout compris. Là, tout de suite, je ne peux pas mais tu n'es plus à une nuit près
    Je regarde si on peut daire ça "simplement".
    A±

  10. #10
    Membre éclairé
    Inscrit en
    Juillet 2007
    Messages
    502
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 502
    Par défaut
    bonsoir
    au yes

    je precise que si on peut partir de mon fichier de base . cela serait top .

    la feuil2 , à l'origine contient 40 de colonnes et le nb de combobox est 20 (environ).

    merci encore

  11. #11
    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
    Par défaut
    Un problème intéressant, ton histoire
    Citation Envoyé par oscar.cesar
    au depart , l'ensemble des combobox doit etre vide et la listebox doit contenir l'ensemble des lignes presentent dans la feuil2.
    Réalisé
    les combobox doivent contenir la liste respective de chaque colonne de la feuil2 sans doublons. cb1=col a, cb2=colb, cb6=colF, cb7=col G, cb11=col K.
    si on click sur un des combobox 6une liste deroulante apparait et on fait son choix. les autres combobox reste vide.
    Réalisé
    dans la listebox seules s'affichent les lignes correspndantes au critere la combobox selectionner
    Partiellement réalisé - A adapté pour choix multiple (consiste à récupérer plusieurs paramètres au lieu d'un, afin de les envoyer à la macro) (*)

    si derrriere on choisi un autre combobox, cb7(par exemple) , idem, il s'affiochera dans listebox que les lignes qui repondent au choix realisé dans cb6+cb7.
    Réalisé
    Reste à réalisé
    Citation Envoyé par oscar.cesar
    et enfin au final si je click sur une des lignes dans le listebox, j'ouvre un formulaire qui reprendra l'ensemble des infos des la feuil2 pour la ligne considerée.
    Tu sauras faire ?

    Le fichier Pièce jointe 27787
    A+

    (*) Si tu veux pouvoir établir une liste sur choix multiple dans tes combos, il te faut un bouton. Sinon, comment savoir quand renseigner la listbox ? Au second choix ? au troisième ? ... Avec un bouton, tu sélectionnes dans 1, 2, 3, 4 ou cinq combos et tu fais un clic sur le bouton pour avoir les bonnes lignes.
    Mais tu as le principe.

    PS - Je viens de m'apercevoir que j'ai laissé un filtre sur les colonnes. Il ne sert à rien, tu le supprimes simplement.

    Edit
    J'ai une question dont la solution pour réaliser ta dernière demande dépend de ta réponse : Une fois obtenue la listes des lignes correspondantes à ta selection dans un combo, veux-tu pouvoir effectuer une ou plusieurs sélections dans la listbox (à reporter dans une autre feuille) ?
    Bonne nuit

  12. #12
    Membre éclairé
    Inscrit en
    Juillet 2007
    Messages
    502
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 502
    Par défaut
    bonjour
    merci ouskel'n'or

    super en effet c'est cela.
    de mon cote comme tu t'endoutes (voir les post suivants)j'ai avance mais je suis bloque sur 10 colonne dans mon listbox

    Citation Envoyé par oscar.cesar
    et enfin au final si je click sur une des lignes dans le listebox, j'ouvre un formulaire qui reprendra l'ensemble des infos des la feuil2 pour la ligne considerée.
    Tu sauras faire ?
    j'ai deja recupere le numero de la ligne de la feuil quand je click sur une ligne dans la listbox donc je pense qu'avec cela ,ouvrir un formulaire et recopier les donnees de la ligne correspondante , je dois y arriver

  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
    Par défaut
    Non, l'index de la listbox ne correspond pas au N° de ligne dans la feuille, puisque tu filtres tes données. Par contre si tu utilises ma méthode (une colonne de la liste pour une colonne de la feuille, la ligne de la liste correspondra à la ligne de la feuil2. Et tu n'auras pas besoin d'affecter à une colonne de la feuiln une colonne différente de la liste. (j'y tiens !)

  14. #14
    Membre éclairé
    Inscrit en
    Juillet 2007
    Messages
    502
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 502
    Par défaut
    bonjour à tous

    ok je suis les conseils avisés .

    je cloture ce post je continue sur le dernier

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

Discussions similaires

  1. Comment mettre dans une autre colonne à partir d'une ComboBox?
    Par Paulopiv dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 06/05/2012, 18h30
  2. [XL-2003] Affichage d'une feuille à partir d'une combobox
    Par JulienLeno dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 12/08/2011, 11h30
  3. [XL-2003] Affichage de donnes a partir d'une combobox dans un UserForm
    Par natab dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 08/07/2011, 13h37
  4. listebox multiple colonne
    Par oscar.cesar dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 28/03/2008, 13h47
  5. calcul à partir de plusieur champs et affichage du resultat dans un champ
    Par carmen256 dans le forum Général JavaScript
    Réponses: 10
    Dernier message: 24/05/2006, 11h47

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