Filtre avancé résultat autre page

Bonjour,

Avant toute chose, je voudrais juste dire que j'ai cherché une solution sur Google ou même sur le forum mais je n'ai pas trouvé mon bonheur.

Je débute dans les macros su excel et je suis confronté à un problème, il s'agit de pouvoir effectuer un filtre avancé et d'obtenir les résultats de ce filtre sur un page différente du tableau de critières.

Pour le moment la seule solution que j'ai trouvé est un copier/coller qui ralentit considérablement l'exécution de la macro (presque instantannée sans ce copier coller)

Voici donc la macro :

Sub filtre_avance() 
    Sheets("page_data").Range("A2:ZZ999999").AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=Range("A8:N" & nbr_ligne), CopyToRange:=Range("BB1:BX1"), Unique:=False

    'Copier/Coller
    Range("BB2:BX999999").Select
    Selection.Copy
    Sheets("resultat").Select
    Range("A2").Select
    ActiveSheet.Paste

    Range("A1").Select
    Sheets("resultat").Range("A1").Select

    Sheets("acceuil").Range("BB2:BX999999").ClearContents
End Sub

Pour expliquer le code :

  • "page_data" est la page qui contient les données à filtrer
  • Le bouon de la macro est situé dans la page ou est située le tableau de filtres (à savoi la page "acceuil")
  • La page "resultat" est la page dans laquelle je voudrais que mes résultats du filtre soien affichés

Voilà, si vous avez des questions ou des demandes de précisions n'hésitez pas.

Merci d'avance pour votre aide.

PS: le code est bien foncionnel, il ne s'agit que d'optimisation, ou de trouver une alternative moins "lourde" à ce copier coller

Bon en fait j'ai compris ce qui ne marchait pas dans mon copier/coller, je prennais 999999 (n'ayant pas de limite de ligne précise) et je pensais que les cases blanches n'influenceraient pas le temps de chargement. Du coup j'ai fais avec la dernière cellule non vide et ça marche bien.

    
    'Dernière cellule non-vide tableau trié n°1 accueil
    drn_cellule = Application.WorksheetFunction.CountA(Range("$BB:$BB"))

    'Copier/Coller
    Range("BB2:BX" & drn_cellule).Select
    Selection.Copy
    Sheets("resultat").Select
    Range("A2").Select
    ActiveSheet.Paste

Problème résolu du coup.

Bonjour

Tu peux encore simplifier :

    'Dernière cellule non-vide tableau trié n°1 accueil
    drn_cellule = Application.WorksheetFunction.CountA(Range("$BB:$BB"))

    'Copier/Coller
    Range("BB2:BX" & drn_cellule).Copy
    Sheets("resultat").Range("A2").PasteSpecial xlPasteAll

Bonjour

Si mes souvenirs sont exacts avec le filtre élaboré tu peux obtenir directement le résultat du filtre dans une autre page

Testes

Sub filtre_avance()
Dim NbLg As Long

  With Sheets("page_data")
    NbLg = .Range("A" & Rows.Count).End(xlUp).Row
    .Range("A2:ZZ" & NbLg).AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=Range("A8:N" & nbr_ligne), _
          CopyToRange:=Sheets("resultat").Range("BB1:BX1"), Unique:=False
  End With
End Sub

Attention : Les entêtes de la zone réception doivent être identiques aux entêtes de la zone filtrée

Tu filtres 702 colonnes (de A à ZZ)

Et le résultat sera sur 23 colonnes (De BB à BX)

Alors les entêtes des 23 colonnes doivent correspondre à 23 entêtes de la zone filtrée

La sélection est donc inutile, c'est noté.

Et qu'apporte le PasteSpecial de plus que le Paste ?

Je vais tester les deux codes proposés je vous redis.

EDIT : J'ai donc réussi à afficher le tableau final dans une autre page sans passer par le Copier/Coller, merci à vous deux !

Pour ce qui est des colonnes, je prend une valeur large (ZZ) puisque le tableau qui contient les données à filtrer ("page_data") ne contiendra jamais le même nombre de colonne.

Je pensais donc qu'en prenant une valeur large, je me mettais à l'abri et que cela ne gènerait pas le bon déroulement du filtre.

Rechercher des sujets similaires à "filtre avance resultat page"