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 :

Problème filtres avancés


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Problème filtres avancés
    Ce message n'a pas pu être affiché car il comporte des erreurs.

  2. #2
    Rédacteur

    Bonjour,
    J'ai lu le Tuto de Philippe Tulliez
    mais je coince
    Cela fait toujours plaisir d'avoir des lecteurs et merci de le signaler

    En revanche, je ne référence jamais les plages de cellules de la façon dont vous le faites (entre crochet) et à fortiori dans ce tutoriel.
    C'est une très mauvaise pratique utilisée qui n'a que des désavantages. Vous venez d'ailleurs d'en faire les frais
    Je vous invite à lire le billet de Pierre Fauconnier sur ce sujet VBA-Excel: Notation raccourcie d'une plage, une fausse bonne idée!

    Revenons maintenant à votre code

    Pour votre deuxième ligne de code dercel = Range("M65000").End(xlUp).Address(RowAbsolute:=False, ColumnAbsolute:=False)


    Partir de la ligne 65000 alors que depuis la version 2007 (plus de 15 ans) la feuille d'un classeur excel normal (suffixé xlsx, xlsm, xlsb, etc.) possède 1.048.576 lignes ce n'est pas sérieux.
    Je ne comprends pas la raison pour laquelle vous écrivez à la cellule M1 le texte Grade alors qu'en même temps vous cherchez la dernière ligne remplie de cette colonne

    Il serait intéressant de savoir ce que vous cherchez à faire.
    Soit faire une filtre sur place avec une zone des critères déjà définie et alors il suffit de la nommer et utiliser ce nom dans le programme soit les critères sont construits dynamiquement par le programme et alors on dit travailler autrement (par exemple avec la propriété CurrentRegion)

    Pour définir la zone des données, j'utilise toujours la propriété CurrentRegion ou dans 99% des cas comme j'utilise des tableaux structurés, je travaille avec l'objet Range de l'objet ListObject

    Exemple avec la première hypothèse (la zone est fixée et nommée areaCriteria) et la plage traitée est une plage qui n'est pas un tableau structuré

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub tata()
      Dim rngData As Range
      Set rngData = ThisWorkbook.Worksheets("Prestation").Range("A1").CurrentRegion
      rngData.AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:=Range("areaCriteria")
      Set rngData = Nothing
    End Sub
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Quelques contributions : USERFORM - Créer, Consulter, Modifier et Supprimer des enregistrements à l'aide d'un formulaire - Géolocalisation d'une adresse avec Excel et Google sans VBA

  3. #3
    Membre du Club
    Citation Envoyé par Philippe Tulliez Voir le message
    Bonjour,


    Il serait intéressant de savoir ce que vous cherchez à faire.
    Soit faire une filtre sur place avec une zone des critères déjà définie et alors il suffit de la nommer et utiliser ce nom dans le programme soit les critères sont construits dynamiquement par le programme et alors on dit travailler autrement (par exemple avec la propriété CurrentRegion)

    Pour définir la zone des données, j'utilise toujours la propriété CurrentRegion ou dans 99% des cas comme j'utilise des tableaux structurés, je travaille avec l'objet Range de l'objet ListObject

    Exemple avec la première hypothèse (la zone est fixée et nommée areaCriteria) et la plage traitée est une plage qui n'est pas un tableau structuré

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub tata()
      Dim rngData As Range
      Set rngData = ThisWorkbook.Worksheets("Prestation").Range("A1").CurrentRegion
      rngData.AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:=Range("areaCriteria")
      Set rngData = Nothing
    End Sub
    Bonjour

    Merci pour ces conseils.

    Exemple avec la première hypothèse (la zone est fixée et nommée areaCriteria) et la plage traitée est une plage qui n'est pas un tableau structuré

    Si je comprends bien, j'ai fixée et nommée la zone, ici la zone de critères se situe sur une feuille"Parametres" Cellule B20:B25. je l'ai nommée ZoneFilt1 elle contient les valeurs MED1,MED2,INF1,INF2

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    Set rngData = ThisWorkbook.Worksheets("GARD1CHU").Range("A1").CurrentRegion
      rngData.AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:=Range("ZoneFilt1")


    Hélas rien ne se passe ou plutôt ça vide tout.

    je mets le bout de code qui fonctionne.

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    With Sheets("GARD1CHU")
       'conserve uniquement AS1, AS2 et AH 
      [triGard1].Copy Destination:=Sheets("GARD1CHU").Range("M2")'copie les valeurs de la plage "triGard1" vers les cellules M2,M3,M4 etc ...(plage variable)
      Dim dercel As String
      dercel = Range("M65000").End(xlUp).Address(RowAbsolute:=False, ColumnAbsolute:=False)'définit la dernière valeur de la plage M1:Mx
      Range("M1") = "Grade" 'Peut-être inutile ?
      [A1:H1000].AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:=[M1:M9]'effectue le filtre élaboré . c'est ici que je souhaiterais le nom de la plage nommée
      On Error Resume Next
      Range("_FilterDataBase").Offset(1, 0).Resize(Range("_FilterDataBase"). _
          Rows.Count - 1).SpecialCells(xlCellTypeVisible).Delete Shift:=xlUp 'supprime les valeurs
        ActiveSheet.ShowAllData 'affiche les valeurs restantes


    Voilà je ne sais pas si c'est plus clair.

    Merci
    @+
    Cordialement

  4. #4
    Rédacteur

    Bonjour,
    je mets le bout de code qui fonctionne.
    Et bien si le code que vous avez publié fonctionne comme vous le dites, tout va bien.
    Vous n'avez donc plus besoin d'aide et vous pouvez donc mettre le statut comme résolu
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Quelques contributions : USERFORM - Créer, Consulter, Modifier et Supprimer des enregistrements à l'aide d'un formulaire - Géolocalisation d'une adresse avec Excel et Google sans VBA

  5. #5
    Responsable
    Office & Excel

    Salut.

    Il faudrait préciser votre version d'Excel. Depuis 2010, Power Query remplace avantageusement les filtres avancés en VBA. Il est plus que temps à mon sens que cet outil soit connu et utilisé.
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    Vous avez apprécié la réponse? =>
    ---------------

  6. #6
    Membre du Club
    Citation Envoyé par Pierre Fauconnier Voir le message
    Salut.

    Il faudrait préciser votre version d'Excel. Depuis 2010, Power Query remplace avantageusement les filtres avancés en VBA. Il est plus que temps à mon sens que cet outil soit connu et utilisé.
    Bonsoir
    La version est 2016 et 2019

  7. #7
    Responsable
    Office & Excel

    Salut.

    Comme le dit Philippe (Hello ), remonter à partir de la ligne 65000 témoigne d'un vieux code qui valait jusqu'à la version 2003, donc en gros jusqu'en 2007.

    Depuis, les tableaux structurés ont fait leur apparition, et je ne conçois pas avoir besoin des filtres avancés sur une plage classique alors que cela fait 13 ans que les tableaux structurés ou tables de données existent.

    Avec 2016 et 2019, il faut à mon sens utiliser POWER QUERY pour remplacer les filtres avancés qui ont (mal) vieilli et sont à mon sens obsolètes, à de très rares exceptions près. Une recherche "Power Query" sur le forum va te donner une foultitude d'idées et d'exemples...

    Bonne découverte et bon travail avec cet outil incontournable d'Excel
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    Vous avez apprécié la réponse? =>
    ---------------

  8. #8
    Membre du Club
    Citation Envoyé par Pierre Fauconnier Voir le message
    Salut.

    Comme le dit Philippe (Hello ), remonter à partir de la ligne 65000 témoigne d'un vieux code qui valait jusqu'à la version 2003, donc en gros jusqu'en 2007.

    Depuis, les tableaux structurés ont fait leur apparition, et je ne conçois pas avoir besoin des filtres avancés sur une plage classique alors que cela fait 13 ans que les tableaux structurés ou tables de données existent.

    Avec 2016 et 2019, il faut à mon sens utiliser POWER QUERY pour remplacer les filtres avancés qui ont (mal) vieilli et sont à mon sens obsolètes, à de très rares exceptions près. Une recherche "Power Query" sur le forum va te donner une foultitude d'idées et d'exemples...

    Bonne découverte et bon travail avec cet outil incontournable d'Excel

    Merci pour ces excellents conseils.
    J'ai pris le chemin de Power Query et effectivement quelle avancée dans les recherches croisées, extractions etc !
    merci encore.
    Bien cordialement.

  9. #9
    Responsable
    Office & Excel

    Salut.

    J'ai écrit un billet de blog sur les différentes jointures possibles en Power Query...


    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    Vous avez apprécié la réponse? =>
    ---------------

###raw>template_hook.ano_emploi###