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 :

Filtrer 4 listview dès initialisation de l'userfom [XL-2007]


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Homme Profil pro
    Responsable de Maintenance
    Inscrit en
    Juin 2012
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Responsable de Maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2012
    Messages : 31
    Par défaut Filtrer 4 listview dès initialisation de l'userfom
    Hello;

    J'ai reussi a creer quatres lisview mais je n'arrive pas a filtrer et trier par ordre decroissant celle ci des l'initilisation de l'userform.

    exemple:
    LISTVIEW1 : avec comme critere de filtre en A : i.....jours & en F : d + ordre decroissant de la colonne A
    LISTVIEW2 : avec comme critere de filtre en A : a.....jours & en F : d + ordre decroissant de la colonne A
    etc...

    Je ne souhaite pas recuperer de valeur je souhaite juste faire de l'affichage.

    Je vous remercie par avance de vos reponses si cela est bien sur possible
    Fichiers attachés Fichiers attachés

  2. #2
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    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 208
    Par défaut
    Je t'ai répondu dans le fil initial, avant de trouver celui-ci.

  3. #3
    Membre averti
    Homme Profil pro
    Responsable de Maintenance
    Inscrit en
    Juin 2012
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Responsable de Maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2012
    Messages : 31
    Par défaut
    je sais j'ai vu ; mais j'ai essayer ton code et j'arrive pas ( ce qui peut etre du a mes competences ) a effectuer une listview avec son propre filtre des l'initialisation.


    Alors pour les quatres en meme temps je te raconte pas l'histoire

  4. #4
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    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 208
    Par défaut
    Je te mets en pièce jointe ton classeur modifié.
    Fichiers attachés Fichiers attachés

  5. #5
    Membre averti
    Homme Profil pro
    Responsable de Maintenance
    Inscrit en
    Juin 2012
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Responsable de Maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2012
    Messages : 31
    Par défaut
    Je te remercie fortement; comme je disais cela venait de moi.
    J'ai encore beaucoup a apprendre.

    Petite dernier question:

    Pour effectuer des filtres differents sur les autres listview de l'userform, qu'est ce que je dois recopier?
    Je suis obliger depasser par une listbox puis vers une listview.
    Ou je peux faire directement le filtre sur la listview et enlever la listBox?

    ListView2.View = lvwReport ' cela sert a quoi cette ligne?'


    Et encore MERCI

  6. #6
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    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 208
    Par défaut
    Non, tu filtres les données puis tu alimentes la listbox ou la listview directement. Je vais modifier le filtre pour la listview et je posterai le code commenté.

    Voici le code commenté :

    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
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    'initialisation de l'userform
    Private Sub UserForm_Initialize()
        Dim Plage As Range, c As Range
        'avec les données de Feuil1...
        'positionnement du premier filtre
        With Sheets("Feuil1")
            'détermination de la plage destinée à être filtrée
            Set Plage = .Range(.[A6], .Cells(.Rows.Count, 13).End(xlUp))
            'suppression des filtres automatiques
            .AutoFilterMode = False
            'filtre sur la colonne A des données commençant par "i"
            Plage.AutoFilter 1, "=i*"
            'filtre sur la colonne F des cellules égales à D
            Plage.AutoFilter 6, "D"
            'tri sur la colonne A
            With .AutoFilter.Sort
                .Header = xlYes
                .MatchCase = False
                .Orientation = xlTopToBottom
                .SortMethod = xlPinYin
                .Apply
            End With
        End With
        'avec la listbox ListBox1
        With Me.ListBox1
     
            'décalage de la plage filtrée pour ne pas récupérer la ligne d'entêtes
            Set Plage = Sheets(1).AutoFilter.Range.Offset(1)
            'redimensionnement de la plage pour éliminer la ligne ajoutée par la commande "offset"
            'redimensionnement de la plage pour ne prendre que la colonne A
            Set Plage = Plage.Resize(Plage.Rows.Count - 1, 1)
            'sélection des cellules visibles
            Set Plage = Plage.SpecialCells(xlCellTypeVisible)
            If Plage.Count > 0 Then
            'pour chaque cellule de cette plage
                For Each c In Plage
                    'ajout du premier item de la ligne
                    .AddItem c.Value
                    'ajout du deuxième item
                    .List(.ListCount - 1, 1) = c.Offset(, 1).Value
                    'etc.
                    .List(.ListCount - 1, 2) = c.Offset(, 2).Value
                    .List(.ListCount - 1, 3) = c.Offset(, 3).Value
                    .List(.ListCount - 1, 4) = c.Offset(, 8).Value
                    .List(.ListCount - 1, 5) = c.Offset(, 9).Value
                    .List(.ListCount - 1, 6) = c.Offset(, 11).Value
                    .List(.ListCount - 1, 7) = c.Offset(, 12).Value
                Next c
            End If
        End With
        'positionnement du deuxième filtre. Mêmes instructions que pour le premier
        With Sheets("Feuil1")
            Set Plage = .Range(.[A6], .Cells(.Rows.Count, 13).End(xlUp))
            .AutoFilterMode = False
            Plage.AutoFilter 1, "=a*"
            Plage.AutoFilter 6, "D"
            With .AutoFilter.Sort
                .Header = xlYes
                .MatchCase = False
                .Orientation = xlTopToBottom
                .SortMethod = xlPinYin
                .Apply
            End With
        End With
        'remplissage de la listview
        With ListView2
            Set Plage = Sheets(1).AutoFilter.Range.Offset(1)
            Set Plage = Plage.Resize(Plage.Rows.Count - 1, 1)
            Set Plage = Plage.SpecialCells(xlCellTypeVisible)
            'suppression des entêtes de colonne
            .ColumnHeaders.Clear
            'ajout de 8 entêtes de colonne
            For i = 1 To 8
                .ColumnHeaders.Add
            Next i
            'déterminatiion de la largeur des colonnes
            .ColumnHeaders(1).Width = 50
            .ColumnHeaders(2).Width = 50
            .ColumnHeaders(3).Width = 50
            .ColumnHeaders(4).Width = 50
            .ColumnHeaders(5).Width = 50
            .ColumnHeaders(6).Width = 50
            .ColumnHeaders(7).Width = 50
            .ColumnHeaders(8).Width = 50
            'on masque les entêtes de colonne
            .HideColumnHeaders = True
            'alimentation de la listview pour chaque ligne d ela zone filtrée
            For Each c In Plage
                'ajout d'une ligne et de la valeur de la première colonne
                .ListItems.Add , , c.Value
                With .ListItems(.ListItems.Count)
                    'ajout de la valeur de la deuxième colonne
                    .ListSubItems.Add , , c.Offset(, 1).Value
                    'etc
                    .ListSubItems.Add , , c.Offset(, 2).Value
                    .ListSubItems.Add , , c.Offset(, 3).Value
                    .ListSubItems.Add , , c.Offset(, 8).Value
                    .ListSubItems.Add , , c.Offset(, 9).Value
                    .ListSubItems.Add , , c.Offset(, 11).Value
                    .ListSubItems.Add , , c.Offset(, 12).Value
                End With
            Next c
        End With
        'Spécifie l'affichage en mode "Détails"
        ListView2.View = lvwReport
    End Sub

  7. #7
    Membre averti
    Homme Profil pro
    Responsable de Maintenance
    Inscrit en
    Juin 2012
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Responsable de Maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2012
    Messages : 31
    Par défaut
    Plus nul que moi; je pense que tu ne trouves pas.

    Je commence a perdre la tete.
    Je n'y arrive pas.

    Rrrrrrrrrrrrrrrrrrrrrrrrrrrrr
    Fichiers attachés Fichiers attachés

  8. #8
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    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 208
    Par défaut
    Plus nul que moi; je pense que tu ne trouves pas.
    Bien sûr que non, seulement, ce n'est pas évident de débuter, d'autant que tu fais fort en cumulant les difficultés :
    1. Filtrer les données avec VBA
    2. alimenter un listbox et un listview avec le résultat du 1.
    Je regarde le classeur dès que je peux.

  9. #9
    Membre averti
    Homme Profil pro
    Responsable de Maintenance
    Inscrit en
    Juin 2012
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Responsable de Maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2012
    Messages : 31
    Par défaut
    Je te remercie de ton réconfort.
    Quand tu regarderas le classeur; je suis partie un peux loin peut-être.

    Mais mon idée était de copie la feuille source afin de peut être l'exploiter plus tard (on ne sait jamais); et ensuite juste d'alimenter les 4 listview (plus de listBox; je me suis aperçu que question d'utilisation pour un rendu visuel c'était le plus adéquate; par contre plus volumineux pour mon classeur)

  10. #10
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    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 208
    Par défaut
    Pour le moment, tu vas chercher les données de "ListView1" sur la feuille "Feuil3" et celles de "ListView2" sur "Feuil4". Ces feuilles n'existent pas. Lesquelles doit-on utiliser ?

  11. #11
    Membre averti
    Homme Profil pro
    Responsable de Maintenance
    Inscrit en
    Juin 2012
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Responsable de Maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2012
    Messages : 31
    Par défaut
    En faite voici la correspondance

    "ListView1" sur la feuille "Feuil3"= Feuille nommée Alerteijours
    "ListView2" sur la feuille "Feuil4"= Feuille nommée Alerteiheures
    "ListView3" sur la feuille "Feuil5"= Feuille nommée Interventionajours
    "ListView3" sur la feuille "Feuil6"= Feuille nommée Interventionaheures

  12. #12
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    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 208
    Par défaut
    J'ai dû remplacer le ListView pour arriver à un résultat correct. J'ai supprimé les 3 autres. Dis-moi si le classeur fonctionne pour toi.
    Fichiers attachés Fichiers attachés

  13. #13
    Membre averti
    Homme Profil pro
    Responsable de Maintenance
    Inscrit en
    Juin 2012
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Responsable de Maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2012
    Messages : 31
    Par défaut
    je l'ai essayer mais j'ai pu remarquer que si je rajoute les autres listview 2 & 3 4 ( rien n'est affiché) et sur les feuille 4 & 5 & 6: il n'y a pas de filtre.



    Normalement dans la listview2 je devrais avoir la ligne 19 de la feuille 1 mais apres le filtre sur la feuille 4
    Normalement dans la listview2 je devrais avoir la ligne 20 de la feuille 1 mais apres le filtre sur la feuille 6



    J'ai regarder le code et j'etais pas loin.

  14. #14
    Membre averti
    Homme Profil pro
    Responsable de Maintenance
    Inscrit en
    Juin 2012
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Responsable de Maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2012
    Messages : 31
    Par défaut
    Yes j'y suis arrivé enfin avec ton aide (MERCI BCP) mais un dernier probleme quand le filtre est effectué et que sur cette action il n'y pas de cellule il me met un message d'erreur.

    Quand tu remets lvw 3 l'erreur se mets car pas de cellule correspondantes au filtre
    Fichiers attachés Fichiers attachés

  15. #15
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    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 208
    Par défaut
    Effectivement, c'est assez tordu. Il faut remplacer :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set Plage = Plage.SpecialCells(xlCellTypeVisible)
    par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set Plage = Range(Plage.Address).SpecialCells(xlCellTypeVisible)
    pour les 4 listviews.

  16. #16
    Membre averti
    Homme Profil pro
    Responsable de Maintenance
    Inscrit en
    Juin 2012
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Responsable de Maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2012
    Messages : 31
    Par défaut
    Cela ne fonctionne pas ; sur les feuilles j'ai bien les filtres d'effectuer mais sur les listview il m'affiche tout meme ceux filtrer

    Cela serait pas possible de faire un test du nombre de cellule visible comme

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    If Application.Subtotal(3, [A1:A1000]) - 1 > 0 then
     'mettre dans la listview 
    else exit sub
    Mais je ne sais pas ou le placer.

  17. #17
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    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 208
    Par défaut
    Il y a des jours où on se mettrait des claques...

    Remplace :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set Plage = Range(Plage.Address).SpecialCells(xlCellTypeVisible)
    par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
            If Application.Subtotal(103, Plage) = 0 Then Exit Sub
            Set Plage = Plage.SpecialCells(xlCellTypeVisible)

  18. #18
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    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 208
    Par défaut
    C'est la réponse que je viens de poster !
    Tu as été plus rapide que moi.
    Chapeau. les grands esprits se rencontrent !

  19. #19
    Membre averti
    Homme Profil pro
    Responsable de Maintenance
    Inscrit en
    Juin 2012
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Responsable de Maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2012
    Messages : 31
    Par défaut
    Je t'avouerai que sur cette experience je te remercie fortement; et j'aurai bien appris grace a toi.

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

Discussions similaires

  1. Filtrer une listView avec un predicate
    Par Petit Rasta dans le forum Windows Presentation Foundation
    Réponses: 16
    Dernier message: 28/04/2014, 16h45
  2. Filtrer une listview à l'aide d'un edittext
    Par redmonster dans le forum Composants graphiques
    Réponses: 7
    Dernier message: 03/06/2012, 22h24
  3. Filtrer une listView depuis un menu et sans utiliser d'EditText
    Par Invité dans le forum Composants graphiques
    Réponses: 4
    Dernier message: 20/07/2011, 12h58
  4. Filtrer un listView
    Par rabddoul dans le forum C#
    Réponses: 2
    Dernier message: 15/04/2010, 10h27
  5. initialisation d'une listview par une boucle
    Par sam_c_java dans le forum Windows Forms
    Réponses: 3
    Dernier message: 24/10/2007, 12h10

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