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 :

Récupérer la liste des critères non actifs dans un filtre automatique


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Inscrit en
    Septembre 2008
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 5
    Points : 3
    Points
    3
    Par défaut Récupérer la liste des critères non actifs dans un filtre automatique
    Bonjour,

    J'ai un tableau avec un filtre automatique. Je cherche à récupérer la liste des critères d'une colonne particulière alors que les critères ne sont pas actifs, c'est-à-dire qu'aucun critère n'est sélectionné et toutes les données du tableau sont visibles. Mon but est après de sélectionner chaque critère de la colonne en question l'un après l'autre. J'aimerais faire un boucle du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    For each critère in liste des critères
    Worksheets("Sheet1").Range("A1").AutoFilter field:=2, Criteria1:=critère
    etc.
    Quelqu'un voit-il une solution au problème ?

    Merci pour vos efforts!
    Mikla

  2. #2
    Expert éminent

    Avatar de Maxence HUBICHE
    Homme Profil pro
    Développeur SQLServer/Access
    Inscrit en
    Juin 2002
    Messages
    3 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur SQLServer/Access

    Informations forums :
    Inscription : Juin 2002
    Messages : 3 842
    Points : 9 197
    Points
    9 197
    Par défaut
    Une solution simple serait de faire une extraction sans doublons des données de la colonne. Alors, tu aurais ta liste

  3. #3
    Candidat au Club
    Inscrit en
    Septembre 2008
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    Citation Envoyé par Maxence HUBICHE Voir le message
    Une solution simple serait de faire une extraction sans doublons des données de la colonne. Alors, tu aurais ta liste
    Tu veux dire en utilisant un filtre élaboré, avec un code de ce genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("B1", Range("B65536").End(xlUp)).AdvancedFilter Action:=xlFilterInPlace, Unique:=True
    Merci pour cette proposition, ça marche très bien... en accès exclusif, mais le problème, c'est que le programme que je développe est utilisé en partage, et les filtres élaborés ne fonctionnent pas en partage.

    Merci quand même !

  4. #4
    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
    Points : 15 543
    Points
    15 543
    Par défaut
    Non, je pense plutôt que Maxence HUBICHE voulait dire "masquer les doublons"
    Pas de filtre.
    Tu peux faire ça en passant pas les collections
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Dim Collect As New Collection, Cell as range
     
        For each cell in Range("A1:A" & split(ActiveSheet.usedRange.address,"$")(4))
            On Error Resume Next
                if not isempty(cell) then Collect.Add CStr(NoLig), Cell 
                If Err <> 0 Then Rows(Cell.Row).EntireRow.Hidden = True
            Err.Clear
            On error goto 0
        Next
    Ensuite, tu peux avoir la plage des lignes non masquées avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set Plage = ActiveSheet.Cells.SpecialCells(xlCellTypeVisible)
    plage que tu peux parcourir dans une boucle For each
    Bonne journée

    PS - Pas testé, tu peux faire ça pour moi ?

    Edit
    Comme la lecture de la seule colonne désirée n'est pas évidente d'un premier coup d'oeil, je te mets toujours une solution
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Dim Plage as range
        Set Plage = ActiveSheet.Cells.SpecialCells(xlCellTypeVisible)
        For Each Cell In Plage
            If Cell.Column = 1 Then
                MsgBox Cell
            End If
        Next
    Je pense d'ailleurs qu'on doit pouvoir améliorer ça...
    A toutes fins utiles

    PS (re) - Oui, on peut simplifier en créant un tableau des données ou des N° des lignes non masquées dans la première boucle, tableau qu'il ne resterait plus qu'à relire.
    Même mieux, créer un range des cellules non masquées de la colonne A avec Union (F1) qu'il ne resterait plus qu'à parcourir dans une boucle For each... Next

    Edit (bis)
    Amélioré, ça donne ça
    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
    Sub test()
    Dim Collect As New Collection, Cell As Range, Plage As Range
        Set Plage = Range("A1") 'en-tête de colonne
        For Each Cell In Range("A2:A" & Split(ActiveSheet.UsedRange.Address, "$")(4) - 1)
            On Error Resume Next
                If Not IsEmpty(Cell) Then Collect.Add CStr(NoLig), Cell
                If Err.number <> 0 Then
                    Rows(Cell.Row).EntireRow.Hidden = True
                  Else
                    Set Plage = Union(Plage, Range(Cell.Address))
                End If
            Err.Clear
            On Error GoTo 0
        Next
     
        'Relecture sans doublon
        For Each Cell In Plage
            'Evite l'en-tête
            If Not Cell.Address = "$A$1" Then
                MsgBox Cell
                'Une collection se nettoie après usage
                Collect.Remove 1
            End If
        Next
    End Sub
    On doit pouvoir se passer de cette ligne " Set Plage = Range("A1") 'en-tête de colonne" et donc de celle-ci " If Not Cell.Address = "$A$1" Then" mais je ne vois plus comment

  5. #5
    Expert éminent

    Avatar de Maxence HUBICHE
    Homme Profil pro
    Développeur SQLServer/Access
    Inscrit en
    Juin 2002
    Messages
    3 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur SQLServer/Access

    Informations forums :
    Inscription : Juin 2002
    Messages : 3 842
    Points : 9 197
    Points
    9 197
    Par défaut
    Citation Envoyé par mikla Voir le message
    Tu veux dire en utilisant un filtre élaboré, avec un code de ce genre:
    Exactement !

    Tu dis que cela ne fonctionne pas en partage... soit !
    Mais tu dois bien pouvoir extraire sur un autre classeur non ?
    Qu'est-ce qui t'empèche de créer un classeur à la volée, pour récupérer les infos, et le détruire dès que c'est remplit ?

    Sinon, la solution d'Ouskel ... ouskè... ousk..... allez oust ! () est très intéressante aussi si tu n'as pas trop de lignes à filtrer

    Tu as essayé ?

  6. #6
    Candidat au Club
    Inscrit en
    Septembre 2008
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    Merci beaucoup Ouskel pour cette solution. Le problème, c'est que je cherchais justement à éviter de boucler sur chaque ligne de la colonne car le fichier contient beaucoup de lignes et ça prend trop de temps.
    Je voulais juste savoir si y avait moyen de récupérer la liste déroulante du filtre automatique qui contient déjà tous les critères sans doublons, ce serait tellement plus simple et plus rapide que de boucler sur toutes les lignes et supprimer les doublons. Mais, apparamment, c'est pas aussi simple.

    Sinon, bah tant pis, je me contenterai d'une solution avec boucle sur toutes les lignes.

    Merci encore Ouskel

  7. #7
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Août 2005
    Messages
    3 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2005
    Messages : 3 317
    Points : 20 144
    Points
    20 144
    Par défaut
    bonjour


    tu peux également extraire des listes sans doublon par formules :

    Comment créer des listes de validation conditionnelles et sans doublon ?

    http://silkyroad.developpez.com/excel/doublons/



    bonne journée
    michel

  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
    Points : 15 543
    Points
    15 543
    Par défaut
    Sinon, bah tant pis, je me contenterai d'une solution avec boucle sur toutes les lignes.
    En début de code, ajoute
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.screenUpdating = false
    Ça accélère considérablement la procédure
    A toutes fins utiles et si tu n'y as pas pensé

Discussions similaires

  1. Liste des élèves non notés dans une matière donnée
    Par devman2011 dans le forum Langage SQL
    Réponses: 7
    Dernier message: 14/03/2012, 19h11
  2. Récupérer des lignes non enregistrées dans une table
    Par leddy dans le forum Langage SQL
    Réponses: 2
    Dernier message: 24/04/2008, 15h09
  3. Comment récupérer la liste des utilisateurs, locaux ou NON ?
    Par sinfoni dans le forum API, COM et SDKs
    Réponses: 0
    Dernier message: 01/04/2008, 11h07
  4. Bouton "liste des champs" non actif
    Par emilie31 dans le forum Access
    Réponses: 5
    Dernier message: 25/01/2007, 21h44
  5. Réponses: 2
    Dernier message: 24/03/2006, 09h55

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