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

Excel Discussion :

Filtrage automatique d'une liste avec plusieurs critères


Sujet :

Excel

  1. #1
    Membre à l'essai
    Homme Profil pro
    ingénieur en génie civile
    Inscrit en
    Juillet 2015
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : ingénieur en génie civile
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juillet 2015
    Messages : 19
    Points : 14
    Points
    14
    Par défaut Filtrage automatique d'une liste avec plusieurs critères
    Salut tous le monde;

    je veux filtrer une liste automatiquement avec plusieurs critères, vous pouvez trouver dans le fichier attaché les tableaux source et le resultat souhaité avec les critères a prendre en considération.

    Merci d'avance.
    Fichiers attachés Fichiers attachés

  2. #2
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 369
    Points : 518
    Points
    518
    Par défaut
    Bonjour perlodz,

    Je te conseillerai de boucler sur toute la portée de ton tableau :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    Dim Wb As ThisWorkbook
    Dim WbO As Worksheet
    Dim t As ListObject
     
    Set WbO = Wb.Sheets(1)
    Set t = WbO.ListObjects("t_data")
     
    For Each Cell In t.ListColumns(1).DataBodyRange
        If ... and .... and .... Then
        'Insérer critères inverses à ce que tu cherches
             Cell.EntireRow.Hidden = True
        End If
    Next Cell

  3. #3
    Membre à l'essai
    Homme Profil pro
    ingénieur en génie civile
    Inscrit en
    Juillet 2015
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : ingénieur en génie civile
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juillet 2015
    Messages : 19
    Points : 14
    Points
    14
    Par défaut
    Merci pour votre réponse, j'ai une petite experience dans les Macros, SVP, si possible de modifier le fichier attaché avec votre code.

    Salutations.

  4. #4
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 369
    Points : 518
    Points
    518
    Par défaut
    Il ne m'est malheureusement pas possible d'accéder aux macros d'un classeur téléchargé, sécurité IT au travail ^^

    Mais pour sélectionner toutes les données de ton tableau, tu vas dans sur n'importe quelle cellule de ce dernier et tu fais "Ctrl + * " Puis, mettre sous forme de tableau et tu le renommes en "t_data"

    Set WbO = Wb.Sheets(1) : Cette ligne va pointer sur la feuille 1, à toi de définir à quelle position est ta feuille ou bien d'utiliser le nom de ta feuille comme suit - Wb.Sheets("NomFeuille").

    Set t = WbO.ListObjects("t_data") : Cette ligne va pointer sur l'objet "t_data" qui est un tableau structuré. il se situe dans la feuille préalablement définie

    For Each Cell In t.ListColumns(1).DataBodyRange : Cette ligne va parcourir chaque cellule contenue dans la colonne 1 du corps de ton tableau (hors en-tête et lignes de total)

    A l'intérieur de cette boucle, c'est à toi de définir les besoins que tu as. Je te conseille dans ton cas de partir sur les conditions opposées à ce que tu cherches pour chacun de tes critères

    Cell.EntireRow.Hidden = True : Cette ligne va masquer chaque ligne qui répond aux critères définis dans ton IF.

    Next Cell : Tout simplement boucler sur la Cellule suivante

  5. #5
    Membre à l'essai
    Homme Profil pro
    ingénieur en génie civile
    Inscrit en
    Juillet 2015
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : ingénieur en génie civile
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juillet 2015
    Messages : 19
    Points : 14
    Points
    14
    Par défaut
    Merci beaucoup pour votre explication détaillée, je vais essayer de suivre votre explication et l'appliquer a mon tableau, mais j'attends toujours quelqu'un pour me modifier le fichier attaché selon mes besoins

    Merci à tous

  6. #6
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 369
    Points : 518
    Points
    518
    Par défaut
    Les personnes du forum ne sont pas là pour travailler à ta place, nous sommes là pour t'aider et t'orienter. C'est toi qui écrira ton code et pas nous, mais nous t'aiderons à faire en sorte qu'il fonctionne, voir t'aiderons à l'optimiser le cas échéant.

    Tu n'apprendras rien si on te donne du tout cuit

  7. #7
    Expert éminent sénior

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 413
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Conseil, Formation, Développement - Indépendant

    Informations forums :
    Inscription : Février 2010
    Messages : 8 413
    Points : 16 255
    Points
    16 255
    Par défaut
    Bonjour

    Tu peux faire cela sans VBA avec PowerQuery, en add on à partir de 2010, intégré à partir de 2016
    Chris
    PowerQuery existe depuis plus de 13 ans, est totalement intégré à Excel 2016 &+. Utilisez-le !

    Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson.
    Confucius

    ----------------------------------------------------------------------------------------------
    En cas de résolution, n'hésitez pas cliquer sur c'est toujours apprécié...

  8. #8
    Expert confirmé
    Homme Profil pro
    Electrotechnicien
    Inscrit en
    Juillet 2016
    Messages
    3 240
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Electrotechnicien

    Informations forums :
    Inscription : Juillet 2016
    Messages : 3 240
    Points : 5 655
    Points
    5 655
    Par défaut
    Bonjour,

    Autre solution, une formule pour chaque cas de figure suivi d' une mise en forme. Un bout de VBA pour faire tout ça. Ne reste plus qu'à cliquer sur le bouton.

    le code
    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
    Sub Filtrage()
        Dim DerLig As Long, Lig As Long, i As Long
        Application.ScreenUpdating = False
        DerLig = Range("A" & Rows.Count).End(xlUp).Row
     
        'Les formules
        Range("G2:G" & DerLig).FormulaR1C1 = "=IF(COUNTIF(R2C2:R9C2,RC2)=1,1,2)"
        Range("H2:H" & DerLig).FormulaR1C1 = "=COUNTIFS(RC7,1,RC4,""Consultation"")"
        Range("I2:I" & DerLig).FormulaR1C1 = "=COUNTIFS(RC7,2,RC4,""Controle"",RC6,""En instance"")"
        Range("J2:J" & DerLig).FormulaR1C1 = "=COUNTIFS(RC7,1,RC4,""Controle"",RC6,""En instance"")"
        Range("K2:K" & DerLig).FormulaR1C1 = "=SUM(RC[-3]:RC[-1])"
     
        'Récupération des données correspondant aux critères
        Lig = 2
        For i = 2 To DerLig
            If Cells(i, "K") <> 0 Then
                Range(Cells(i, "A"), Cells(i, "F")).Copy Cells(Lig, "M")
                Lig = Lig + 1
            End If
        Next i
        'Suppression des calculs intermédiaires
        Columns("G:L").Clear
    End Sub
    Le fichier
    Pièce jointe 541082

    Cdlt

  9. #9
    Membre à l'essai
    Homme Profil pro
    ingénieur en génie civile
    Inscrit en
    Juillet 2015
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : ingénieur en génie civile
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juillet 2015
    Messages : 19
    Points : 14
    Points
    14
    Par défaut
    Citation Envoyé par révèr Voir le message
    je vous remercercie infiniment pour votre aide, je t'ai informé precedemment que j'ai une petite experience dans les marcros, cet experience ne me permet pas d'appliquer votre code sur mon fichier.

    c'est pour ça j'ai demandé d'un quelqu'un de m'aider pour modifier mon fichier suite a votre proposition

    Salutations.

    Citation Envoyé par 78chris Voir le message
    merci pour votre proposition, le fichier Excel concerné est partagé sous réseau avec plusieurs utilisateurs qui ont plusieurs versions d'Execl différentes.

    Citation Envoyé par ARTURO83 Voir le message

    Merci beaucoup pour votre reponse, votre code ça marche trés bien (mais, lors de la modification dans le tableau source; il supprime pas un resultat déja existe dans le tableau résultat qui ne correspond pas aux critères de filtrage aprés cette modification, donc, il faux supprimer le tableau résultat a chaque fois avant d'executer le macro) , j'essai de le modifier et de l'appliquer sur mon fichier source.

  10. #10
    Expert confirmé
    Homme Profil pro
    Electrotechnicien
    Inscrit en
    Juillet 2016
    Messages
    3 240
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Electrotechnicien

    Informations forums :
    Inscription : Juillet 2016
    Messages : 3 240
    Points : 5 655
    Points
    5 655
    Par défaut
    il faux supprimer le tableau résultat a chaque fois avant d'executer le macro

    Voilà qui prend en compte l'effacement des précédents résultats
    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
    Sub Filtrage()
        Dim DerLig As Long, Lig As Long, i As Long
        Application.ScreenUpdating = False
     
        'Nettoyage des précédents résultats
        Range("M2:R10000").Clear
     
        'Les formules
        DerLig = Range("A" & Rows.Count).End(xlUp).Row
        Range("G2:G" & DerLig).FormulaR1C1 = "=IF(COUNTIF(R2C2:R9C2,RC2)=1,1,2)"
        Range("H2:H" & DerLig).FormulaR1C1 = "=COUNTIFS(RC7,1,RC4,""Consultation"")"
        Range("I2:I" & DerLig).FormulaR1C1 = "=COUNTIFS(RC7,2,RC4,""Controle"",RC6,""En instance"")"
        Range("J2:J" & DerLig).FormulaR1C1 = "=COUNTIFS(RC7,1,RC4,""Controle"",RC6,""En instance"")"
        Range("K2:K" & DerLig).FormulaR1C1 = "=SUM(RC[-3]:RC[-1])"
     
        'Récupération des données correspondant aux critères
        Lig = 2
        For i = 2 To DerLig
            If Cells(i, "K") <> 0 Then
                Range(Cells(i, "A"), Cells(i, "F")).Copy Cells(Lig, "M")
                Lig = Lig + 1
            End If
        Next i
        'Suppression des calculs intermédiaires
        Columns("G:L").Clear
    End Sub
    Cdlt

  11. #11
    Membre à l'essai
    Homme Profil pro
    ingénieur en génie civile
    Inscrit en
    Juillet 2015
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : ingénieur en génie civile
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juillet 2015
    Messages : 19
    Points : 14
    Points
    14
    Par défaut
    merci infiniment, maintenant le code fonctionne 10/10

  12. #12
    Membre chevronné
    Homme Profil pro
    Inscrit en
    Septembre 2013
    Messages
    1 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2013
    Messages : 1 369
    Points : 2 156
    Points
    2 156
    Par défaut
    Bonjour,


    Sans VBA, avec le filtre avancé et un critère formule.

    En H2

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =OU(ET(NB.SI(B:B;B2)=1;D2="Consultation");ET(NB.SI(B:B;B2)>1;D2="Controle";F2="En instance");ET(D2="Controle";F2="En instance"))
    Spécifier H1:H2 comme critère.


    Boisgontier
    Fichiers attachés Fichiers attachés

  13. #13
    Membre à l'essai
    Homme Profil pro
    ingénieur en génie civile
    Inscrit en
    Juillet 2015
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : ingénieur en génie civile
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juillet 2015
    Messages : 19
    Points : 14
    Points
    14
    Par défaut
    merci beaucoup pour votre aide, c'est exacte que je cherche, c'est trés simple et efficace, je vous demande une autre fois de m'aider pour exécuter ce filtre automatiquement sans afficher les ligne filtrées sur le tableau source, et de copier les résultats vers une autre feuille.

    je vous remercie beaucoup.

    Salutations.

  14. #14
    Membre chevronné
    Homme Profil pro
    Inscrit en
    Septembre 2013
    Messages
    1 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2013
    Messages : 1 369
    Points : 2 156
    Points
    2 156
    Par défaut
    Bonjour,

    Vous pouvez modifier la formule.
    Pour faire une extraction sans macro, il faut se placer dans la feuille d'extraction.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =OU(ET(NB.SI(BD!B:B;BD!B2)=1;BD!D2="Consultation");ET(NB.SI(BD!B:B;BD!B2)>1;BD!D2="Controle";BD!F2="En instance");ET(BD!D2="Controle";BD!F2="En instance"))
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Sub extrait()
        Sheets("BD").Range("A1:F10000").AdvancedFilter Action:=xlFilterCopy, _
            CriteriaRange:=Range("K1:K2"), CopyToRange:=Range("A1:F1"), Unique:=False
    End Sub

    Boisgontier
    Fichiers attachés Fichiers attachés

  15. #15
    Membre à l'essai
    Homme Profil pro
    ingénieur en génie civile
    Inscrit en
    Juillet 2015
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : ingénieur en génie civile
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juillet 2015
    Messages : 19
    Points : 14
    Points
    14
    Par défaut
    C'est genial, ça marche trés bien,

    Merci infiniment.

Discussions similaires

  1. [XL-2007] Recherche avec plusieurs critéres résultat dans une seul colonne
    Par guigui69 dans le forum Excel
    Réponses: 3
    Dernier message: 24/09/2014, 13h34
  2. Recherche avec plusieurs critères et mise à jour automatique
    Par emowpya dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 23/02/2013, 17h36
  3. Réponses: 1
    Dernier message: 18/09/2010, 02h40
  4. [XL-2003] obtenir une donnée avec plusieurs critères de choix
    Par spico45 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 15/04/2009, 13h34
  5. VBA-E Comment réaliser une recherche avec plusieurs critères ?
    Par Larsen21 dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 14/12/2006, 13h43

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