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 SubPour 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.PasteProblè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 xlPasteAllBonjour
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 SubAttention : 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.