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 :

Trier des lignes d'un tableau à partir d'une sélection listbox


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Août 2011
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2011
    Messages : 63
    Points : 28
    Points
    28
    Par défaut Trier des lignes d'un tableau à partir d'une sélection listbox
    Bonjour je vous expose mon problème. J'ai un tableau avec des valeurs sur lequel je veux appliquer un tri. Par exemple dans la collone B j'ai les les noms des différents continents (europe, asie,..) et je viens récupérer ces noms pour venir remplir ma listbox. Ceci fonctionne. Ce que je veux faire maintenant c'est en fonction de ce que je selectionne dans ma listbox (je peux selectionner plusieurs valeurs) je viens cacher les lignes qui ne posséde pas la valeur selectionné dans la listbox. Savez vous comment faire?

    merci

  2. #2
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 207
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 207
    Points : 14 362
    Points
    14 362
    Par défaut
    Bonjour,

    Fais un filtre automatique (Autofilter). Si tu as besoin de plus d'aide, précise où tu as placé ta listbox (sur une feuille ou sur un userform).

  3. #3
    Membre chevronné Avatar de Jean-Pierre49
    Homme Profil pro
    Retraité
    Inscrit en
    Juillet 2007
    Messages
    659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2007
    Messages : 659
    Points : 2 056
    Points
    2 056
    Par défaut
    Bonjour Daniel

    fonction de ce que je selectionne dans ma listbox (je peux selectionner plusieurs valeurs)
    un filtre automatique (sur 2003) ne peut prendre que 2 valeurs dans la personnalisation

    Il me semble que ce serait bien d’abord le fichier pour mieux comprendre
    Afin de faire quelque chose qui fonctionnerait sur toutes les versions.

    Cordialement

  4. #4
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 207
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 207
    Points : 14 362
    Points
    14 362
    Par défaut
    Bonjour,

    un filtre automatique (sur 2003) ne peut prendre que 2 valeurs dans la personnalisation
    Avec Excel 2010, tu peux sélectionner autant de valeurs entières que tu le désires, même si le filtre perso façon XL 2003 existe toujours.

    Afin de faire quelque chose qui fonctionnerait sur toutes les versions.
    C'est se priver de toutes les nouvelles fonctionnalités.

  5. #5
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Août 2011
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2011
    Messages : 63
    Points : 28
    Points
    28
    Par défaut
    Ce n'est pas vraiment ce a quoi j'avais pensé. en fait au départ j'avais une combobox qui était dans un userform je venais choisir la valeur qui m'interessait et excel affichait toute les lignes ayant la valeur entré dans la combobox du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If combobox.value= cells(a,i)
    . Il cachait les autres avec la propriété . La je veux faire la même chose mais avec une listbox c'est a dire que plusieurs valeurs sont sélectionnés et il cache toute les lignes qui n'ont pas cette valeur. est ce que c'est plus clair dans la démarche?

    Merci de vos réponse

  6. #6
    Membre chevronné Avatar de Jean-Pierre49
    Homme Profil pro
    Retraité
    Inscrit en
    Juillet 2007
    Messages
    659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2007
    Messages : 659
    Points : 2 056
    Points
    2 056
    Par défaut
    Bonjour

    C'est se priver de toutes les nouvelles fonctionnalités.
    Ce n'est pas idiot bien sur, mais je reste convaincu que si on règle ce type de problème par Vba on doit essayer a que ce soit au moins pour 2003 aussi, beaucoup on cette version et vont continuer à l'avoir pendant encore quelque temps.

    Si on est dans l’Excel classique (dans la feuille, je veux dire) bien sur qu’il ne faut pas se priver des nouvelles fonctionnalités

    Une Piste

    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
     
    Private Sub commandButton1_Click()
    Dim Table() As String
        Dim CompA As Long
        Dim CompB As Byte
        Dim Mouchard As Boolean
     
        Dim Ind As Byte
        For CompA = 0 To ListBox1.ListCount - 1
            If ListBox1.Selected(CompA) = True Then
                Ind = Ind + 1
                ReDim Preserve Table(Ind)
                Table(Ind) = ListBox1.List(CompA)
            End If
        Next CompA
     
        For CompA = Range("A" & Rows.Count).End(xlUp).Row To 1 Step -1
            Mouchard = False
            For CompB = 1 To UBound(Table)
                If Cells(CompA, 1).Value = Table(CompB) Then Mouchard = True
            Next CompB
            If Mouchard = False Then Rows(CompA).Hidden = True
        Next CompA
    End sub
    Tu dis

    Bon courage

  7. #7
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Août 2011
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2011
    Messages : 63
    Points : 28
    Points
    28
    Par défaut
    Merci pour ta réponse mais quand j'essaie çà ne fonctionne pas une erreur m'est renvoyé mais dans tous les cas ce qui ne va pas c'est que je comprend pas la moitié des lignes... Peux tu me mettre quelques commentaires pour savoir comment marche ton code. Que je puisse voir quel problème j'ai.

    Merci

  8. #8
    Membre chevronné Avatar de Jean-Pierre49
    Homme Profil pro
    Retraité
    Inscrit en
    Juillet 2007
    Messages
    659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2007
    Messages : 659
    Points : 2 056
    Points
    2 056
    Par défaut
    J'ai testé ça fonctionne chez moi

    Code avec explication

    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
    Option Base 1
    Private Sub UserForm_Initialize()
        ListBox1.MultiSelect = fmMultiSelectMulti ' on affecte la multi selection a ListBox
        ListBox1.List() = Range("A1:A10").Value ' On alimente une ListBox
    End Sub
    Private Sub commandButton1_Click()
        Dim Table() As String
        Dim CompA As Long
        Dim CompB As Byte
        Dim Mouchard As Boolean
     
        Dim Ind As Byte
     
        For CompA = 0 To ListBox1.ListCount - 1 ' on boucle sur données de la ListBox
            If ListBox1.Selected(CompA) = True Then ' si la donnée est selectionnée
                Ind = Ind + 1 ' on incrémente Ind
                ReDim Preserve Table(Ind) ' on Redimensionne Table
                Table(Ind) = ListBox1.List(CompA) ' on Affecte a Table la valeur du listbox selectionnée
            End If
        Next CompA
     
        For CompA = Range("A" & Rows.Count).End(xlUp).Row To 1 Step -1 ' on demarre à la dernière ligne
            Mouchard = False ' on affecte à Mouchard False
            For CompB = 1 To UBound(Table) ' On boucle sur les valeurs de Table
                If Cells(CompA, 1).Value = Table(CompB) Then Mouchard = True ' si la cellule en colonne A = la valeur testée on attribue True à mouchard
            Next CompB
            If Mouchard = False Then Rows(CompA).Hidden = True 'Si mouchard est resté a false (pas de valeurs testées trouvées, on cache la ligne)
        Next CompA
    End Sub
    Tu dis

    Bon courage

  9. #9
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 207
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 207
    Points : 14 362
    Points
    14 362
    Par défaut
    @ Jean-Pierre49
    J'ai repris une partie de ton code, et pour éviter une boucle, je me suis servi d'un filtre avancé (ou élaboré) :


    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
    Private Sub CommandButton1_Click()
        Dim CompA As Long, Ind As Byte
        With Sheets("Feuil2")
            .[I1] = .[A1]
            .[I2:I6].ClearContents
            For CompA = 0 To ListBox1.ListCount - 1
                If ListBox1.Selected(CompA) = True Then
                    Ind = Ind + 1
                    .[I1].Offset(Ind) = ListBox1.List(CompA)
                End If
            Next CompA
            .Range(.[A1], .Cells(.Rows.Count, 1).End(xlUp)).AdvancedFilter _
                Action:=xlFilterInPlace, CriteriaRange:=.Range(.[I1], _
                .Cells(.Rows.Count, 9).End(xlUp)), Unique:=False
        End With
    End Sub
    Note les données sont en colonne A sur Feuil2 et je me sers des 6 premières cellules de la colonne I.

  10. #10
    Membre chevronné Avatar de Jean-Pierre49
    Homme Profil pro
    Retraité
    Inscrit en
    Juillet 2007
    Messages
    659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2007
    Messages : 659
    Points : 2 056
    Points
    2 056
    Par défaut
    Daniel

    C'est vrai que le filtre élaboré est une solution, mais on ne reste pas dans le tableau d'origine
    Tout dépend de l'objectif final
    Mais tu as raison c'est une solution


    Cordialement

  11. #11
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 207
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 207
    Points : 14 362
    Points
    14 362
    Par défaut
    C'est vrai que le filtre élaboré est une solution, mais on ne reste pas dans le tableau d'origine
    Si, bien sûr, à moins que tu choisisses de copier le résultat ailleurs.

  12. #12
    Membre chevronné Avatar de Jean-Pierre49
    Homme Profil pro
    Retraité
    Inscrit en
    Juillet 2007
    Messages
    659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2007
    Messages : 659
    Points : 2 056
    Points
    2 056
    Par défaut
    On ne ce comprend pas

    Note les données sont en colonne A sur Feuil2 et je me sers des 6 premières cellules de la colonne I.
    Quand je parle du tableau je pensais là ou sont les valeurs d'origine

    Cordialement

  13. #13
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 207
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 207
    Points : 14 362
    Points
    14 362
    Par défaut
    Pour mes tests, le tableau est composé d'une seule colonne (A) avec un entête en A1. A l'utilisateur de modifier selon l'agencement de ses données. Tu as compris autrement ?

  14. #14
    Membre chevronné Avatar de Jean-Pierre49
    Homme Profil pro
    Retraité
    Inscrit en
    Juillet 2007
    Messages
    659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2007
    Messages : 659
    Points : 2 056
    Points
    2 056
    Par défaut
    Oui
    Mais, tu dis
    je me sers des 6 premières cellules de la colonne I
    Cordialement

  15. #15
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 207
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 207
    Points : 14 362
    Points
    14 362
    Par défaut
    Désolé d'écrire à la va-vite. La zone I1:I6 est la zone de critères du filtre et comme il n'y a que 5 continents...
    Dans un autre contexte, il suffirait d'effacer la totalité de la colonne I pour avoir plus de critères.

Discussions similaires

  1. Réponses: 2
    Dernier message: 18/05/2015, 22h09
  2. [XL-2013] Trier les lignes d'un tableau à partir d'une liste de ligne
    Par dttpedt dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 06/08/2014, 15h59
  3. Suppression d'une ligne d'un tableau à partir d'une valeur de cellule
    Par jerem1 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 17/12/2010, 14h15
  4. Réponses: 31
    Dernier message: 27/11/2010, 19h14
  5. [MySQL] Trier des lignes d'un tableau aléatoirement
    Par bilou95 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 10/03/2008, 21h30

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