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 :

Listbox sans ligne cachée d'autofiltre


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Juillet 2008
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 58
    Par défaut Listbox sans ligne cachée d'autofiltre
    Bonjour,

    après 3 jours de recherche je reviens vers vous.

    Quelle méthode utilisez-vous pour afficher des lignes filtrées dans une listbox?

    En gros j'ai un worksheet avec des lignes de données. Après un autofilter certaines lignes disparaissent (normal!). Je met donc à jour ma listbox, problème: les lignes cachées sont toujours là bien que non visible sur le worksheet.?

    Pour info j'utilise cette méthode
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Listbox.RowSource = Range("A2", Range("K65000").End(xlUp)).Address
    Merci pour votre aide.

    Elumastebit

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    753
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 753
    Par défaut
    Malheureusement, tes lignes ont beau êtres cachées, elles existent toujours, et VBA ne tient pas compte du fait qu'elles soient cachées ou non.

    Cela veut donc dire que si tu veux que si tu veux qu'il n'y ait que les lignes non cachées qui apparaissent dans ta listbox, tu devras l'alimenter à la main (et surtout au un par un avec une boucle) avec la méthode AddItem et des tests.

  3. #3
    Membre averti
    Inscrit en
    Juillet 2008
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 58
    Par défaut
    Bonjour decondelite

    Donc en gros, si je fais une recherche à partir d'une textbox dans ma listbox je ne peux pas juste avoir les résultats correspondants? J'utilise actuellement l'autofilter, n'y aurait-t'il pas une autre méthode que celle ci puisqu'ensuite je ne peux pas retourner juste mes résultats dans ma listbox.

    Merci.

    Elumastebit

  4. #4
    Membre émérite
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    753
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 753
    Par défaut
    Eh bien tu fais comme tu sens:
    -soit tu gardes ta listbox tel quel, et ta recherche depuis ta textbox n'affichera pas les résultats correspondant aux éléments cachés: à la fois compliqué et pas très logique voilà mon avis
    -soit tu fais comme je te l'ai dit, c'est à dire remplir ta textbox avec tes éléments un par un
    -soit tu envisages encore un autre truc, c'est que tu fasses un filtrage qui supprime les lignes au lieu de juste les cacher.

  5. #5
    Membre confirmé Avatar de allergique
    Homme Profil pro
    Inscrit en
    Août 2006
    Messages
    151
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Août 2006
    Messages : 151
    Par défaut
    Bonsoir,

    J'avais créé il y a peu de temps un post avec le même problème.

    je te mets le lien ci-dessous:

    http://www.developpez.net/forums/d66...gnes-masquees/

  6. #6
    Membre averti
    Inscrit en
    Juillet 2008
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 58
    Par défaut
    Bonjour allergique,

    Dans le code du post que tu m'as transmis:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    For i = 2 To UBound(tableau)
        If Rows(i).Hidden = False Then
            resultat.Add tableau(i, 9), CStr(tableau(i, 9))
        End If
    Next i
     
    For i = 1 To resultat.Count
            ListBoxnom.AddItem resultat(i)
    Next i
    comment est défini "resultat"? comment le déclarer?

    Merci.

    Elumstebit

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Août 2004
    Messages
    15
    Détails du profil
    Informations personnelles :
    Âge : 60
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 15
    Par défaut filtre
    bonjour
    pourquoi ne pas utiliser le filtre élaboré ?
    ce qui permet d'avoir les données sur une feuille le filtre sur une autre
    et d'afficher les resulats sur une autre dans une plage bien defini, dans ce cas tu n'as plus de probleme de lignes vides. al la suite de cela tu pe avoir des liste de validation basé sur plusieurs champs.
    enfin moi je crois, plutot que de taper du code que l'on ne maitrise pas toujours.
    @+

  8. #8
    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
    Voici un exemple de code qui fait ce que tu demandes.
    J'ai deux listbox dans un userform : listbox1 et listbox2
    Dans ListBox1 j'affiche les données d'une colonne sans doublon et triées par ordre Alpha.
    Une sélection dans ListBox1 entraîne l'affichage de trois colonnes dans ListBox2

    Pour des Combos, le principe et le code sont les mêmes (noms de contrôles mis à part [!!!] )

    La méthode utilisée permet de renseigner les trois colonnes d'une ListBox2 selon des colonnes non contigues de la feuille de calculs.
    Le code susceptible de t'intéresser est dans Private Sub ListBox1_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
    Private Sub ListBox1_Click()
    Dim plage As Range, Cell As Range
    Dim FL1 As Worksheet, critere As String
        Set FL1 = Worksheets("Feuil1")
        ListBox2.Clear
    'On fixe le critère
        critere1 = ListBox1
    'Pose du filtre : Si un filtre existe, on le supprime...
        If FL1.FilterMode Then FL1.Cells.AutoFilter
    '... avant de le poser sur la colonne désirée
        FL1.Columns("A:A").AutoFilter Field:=1, Criteria1:=critere1
     
    'La plage de données filtrées correspond aux seules cellule visibles
    'Dans cette plage, la colonne du filtre est la colonne 1
        Set plage = FL1.AutoFilter.Range.Columns(1).SpecialCells(xlCellTypeVisible)
    'Parcours de la plage filtrée -> remplissage des trois colonnes de la listbox
        For Each Cell In plage 'dans la listbox, la première colonne a l'indice 0
            'Colonne 1 ds listbox (indice 0) : colonne du filtre => D
            ListBox2.AddItem Cell 'colonne A de la feuille
            'Colonne 2 ds listbox (indice 1) : A + 2 => colonne C de la feuille
            ListBox2.List(ListBox2.ListCount - 1, 1) = Cell.Offset(0, 2)
            'Colonne 3 ds listbox (indice 2) : A + 3 => colonne D de la feuille
            ListBox2.List(ListBox2.ListCount - 1, 2) = Cell.Offset(0, 3)
        Next
        Set plage = Nothing
    End Sub
    Je te mets le remplissage de ListBox1 afin que tu puisses éventuellement tester sur une base de données existante
    Le test nécessite un userform et deux listbox, la première ne comportant qu'une colonne, la seconde trois colonnes.
    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
    Private Sub UserForm_Activate()
    Dim Tablo As Variant, Tempo As Variant, i As Long, j As Long
        Worksheets("Feuil1").Activate 'à défaut d'instancier la feuille
        Tablo = Range("a2:a" & Range("a" & Rows.Count).End(xlUp).Row).Value
    'triAlpha
        For i = 1 To UBound(Tablo)
            For j = 1 To UBound(Tablo)
                If Tablo(i, 1) < Tablo(j, 1) Then
                    Tempo = Tablo(i, 1)
                    Tablo(i, 1) = Tablo(j, 1)
                    Tablo(j, 1) = Tempo
                End If
            Next j
        Next i
        ListBox1.Clear
    'Remplissage excluant les doublons
        ListBox1.AddItem Tablo(1, 1)
        For i = 2 To UBound(Tablo)
            If Tablo(i, 1) <> Tablo(i - 1, 1) Then ListBox1.AddItem Tablo(i, 1)
        Next
    End Sub
    Bonne journée

    NB - Je n'ai pas intégré le saut de la première ligne de la plage filtrée. A ajouter le cas échéant.
    En cas de pb, tu demandes.

Discussions similaires

  1. [XL-2010] comment copier coller des cellules sans prendre en compte les lignes cachées
    Par bboy-eazy dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 15/09/2014, 15h20
  2. Ajouter du texte dans une ListBox sans sauter de ligne
    Par walid_kerkoub dans le forum Composants VCL
    Réponses: 2
    Dernier message: 03/03/2008, 15h42
  3. Réponses: 2
    Dernier message: 02/08/2006, 17h21
  4. Listbox sans scrollbar?
    Par mekacom dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 06/07/2006, 23h20
  5. Réponses: 3
    Dernier message: 27/09/2005, 08h44

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