Bonjour Chris,
Effectivement j'avais le même message d'erreur lors de mes tests (#NOM?) ce qui est normal comme message d'erreur mais curieux pour le résultat positif qu'il engendre. A creuser.
Bonjour Chris,
Effectivement j'avais le même message d'erreur lors de mes tests (#NOM?) ce qui est normal comme message d'erreur mais curieux pour le résultat positif qu'il engendre. A creuser.
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 suret 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
Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier
Bravo et merci pour ce tutoriel qui m'a permis de découvrir cette fonctionnalité de façon rapide et claire
![]()
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 suret 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
Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier
Merci beaucoup pour ce tutoriel ! Autant le filtre de "base" est connu autant ce genre de filtre élaboré est assez bluffant en terme de possibilités !
Merci Philippe pour ce tutoriel.
Une fonctionnalité d'Excel que je ne connaissais pas et qui m'a l'air fort pratique.
Je teste tout ça de suite.
Suite du message: Je viens de finir le tutoriel, c'est super clair, merci encore et félicitations!
En somme c'est un équivalent du SELECT FROM WHERE Sql sur une table de données => super pratique.
Par contre en termes de performance, ça donne quoi sur des grosses tables avec filtres complexes?
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 suret 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
Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier
Bonjour Zeco,
Merci aussi pour ton gentil commentaire qui donne envie de continuer à partager ses connaissances.
Pour ce qui est des performances, je viens à l'instant de faire un test sur une liste de données de 65000 lignes et 4 colonnes ($A$1:$D$65001) avec un filtre portant sur une zone de critères de 2 lignes et 3 colonnes ($G$1:$I$3).
Sexe|Crit |Véhicule
...F...|FAUX|
.......|........|Opel
Le critère calculé est =ANNEE(C2)=1966
Test effectué à l'aide de la fonction qui est présente dans le classeur qui accompagne le tutoriel.
Dans cet exemple 10 038 lignes sont exportées avec création de la feuille qui reçoit les lignes exportées. Temps 2 secondes 32
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 suret 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
Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier
Merci pour la réponse,
Si j'ai un peu de temps je ferais des comparatifs de performances vs l'utilisation de tableaux en VBA.
Et merci encore de partager (de ton temps et tes connaissances) et de contribuer à enrichir la bibliothèque des tutoriels.
Bonjour issoram;
Au niveau du contexte, via Excel, on passe en langage natif, les similitudes entre ll’organisation d'une feuille et les variables tableaux, plus le fait qu'on puisse dans les deux sens injecter l'un dans l'autre direct, laisse à penser que c'est, en partie, le mode de fonctionnement d'Excel.
Donc si on pilote Excel sur des fonctions natives via VBA, on doit gagner par rapport à monter une plage dans un tableau, exécuter du code et redescendre.
mes test pour ce fil vont dans le même sens que Philippe :
cordialement,Sinon, dès que les données sont nombreuses tu as intérêt à éviter les boucles quel quelles soient car elles sont chronophages.
Dans un cas comme le tien passer par un filtre auto ou avancé, à un stade donné, pour récupérer les données voulues serait surement bien plus rapide.
Pour exemple, sur un fichier de données de villes de 146 727 lignes et 2 346 687 cellules, je récupère une table de 2329 lignes et 37 249 cellules en l'espace de moins d'une seconde avec une extraction vers autre emplacement d'un filtre avancé...
Didier
Bonjour,
Cette discussion sur le forum m'a inspiré un nouvel exemple dans l'utilisation des filtres avancés.
Dans un classeur Excel nous avons une liste de données ayant en colonne A le nom de différents services d'une entreprise et dans les autres colonnes d'autres données.
L'idée est d'envoyer un classeur contenant une feuille à chacun des services concernés avec les données qui lui sont propres.
Les zones :
de données en feuille [db] avec en colonne A le nom des services,
de critères cellules $C$1:$C$2 dans la feuille [Param]
La feuille [Param] contiendra également la liste des services qui aura été exportée sans les doublons par la même méthode advancedFilter
La procédure
Elle se déroulera en deux étapes dont la deuxième est subdivisée en trois parties.
Etape 1 : Création d'une liste unique basée sur la colonne 1 (Services).
Etape 2 : Dans une boucle
2.1 Création nouvelle feuille
2.2 Exportation vers nouvelle feuille
2.3 Déplacement de cette nouvelle feuille vers un nouveau classeur
Le code de la procédure
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
27
28
29
30 Sub ExportDataByAdvancedFilter() ' Déclaration + Initialisation des variables Dim rngList As Range, rngData As Range, rngCriteria As Range, r As Long Set rngData = shtData.Range("A1").CurrentRegion With shtParam Set rngList = .Range("A1"): Set rngCriteria = .Range("C1:C2") End With ' Etape 1 - Création d'une liste unique basée sur la colonne 1 With rngData .Resize(, 1).AdvancedFilter Action:=xlFilterCopy, CopyToRange:=rngList, Unique:=True End With ' Etape 2 - Boucle sur la liste avec placement du critère ' Création nouvelle feuille ' Exportation vers nouvelle feuille ' Déplacement de cette nouvelle feuille vers un nouveau classeur For r = 1 To rngList.CurrentRegion.Rows.Count - 1 rngCriteria.Cells(2, 1) = rngList.Offset(r) ' Insère le critère ' 2.1 - Création d'une feuille Sheets.Add before:=Sheets(1): Sheets(1).Name = rngList.Offset(r) ' 2.2 - Exportation vers nlle feuille suivant critère With rngData .AdvancedFilter xlFilterCopy, rngCriteria, Sheets(1).Range("A1") End With ' 2.3 - Déplacement de la feuille cers un nouveau classeur Sheets(1).Move ' ' Ici code pour sauver classeur, Envoyer par email etc... ' Next 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 suret 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
Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier
J'ai pas bien été rapide sur ce coup mais voila:
il suffit de rajouter:
et
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 ' Déclaration + Initialisation des variables Dim rngList As Range, rngData As Range, rngCriteria As Range, r As Long, Fichier As String, Chemin As String
pour qu'automatiquement mes classeurs s'enregistrent
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 ' Ici code pour sauver classeur, Envoyer par email etc... ' Fichier = rngList.Offset(r) Chemin = "C:\Users\moncompte\Documents\dossier\juin 2013\" ActiveWorkbook.SaveAs Chemin & Fichier ActiveWorkbook.Close SaveChanges:=True
je gagne un temps précieux.
ce qu'il me reste a faire c'est comprendre comment copier aussi une feuille supplémentaire et que les cacluls qu'elle contient fonctionnent![]()
Merci de votre aide pour le boulot deja fourni !
Bonjour,
je remonte ce fil car j'achoppe toujours si la possibilité de rajouter une feuille contenant des calculs ayant pour source l'extraction de données.
si quelqu'un avait une idée cela serai fort aimable !!
Merci![]()
Bonjour,
Je crois qu'il serait bon que tu ouvres un nouveau sujet de discussion et que tu expliques clairement ce que tu souhaites faire car sur cette discussion ouverte à la base pour présenter un tutoriel, tu déposes une partie de réponse qui correspond à une autre discussion Ventiler des lignes dans des classeurs séparés où manifestement le filtre élaboré t'apporte une partie de réponse.
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 suret 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
Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier
Salut,
Excellent tutoriel que je viens de découvrir. Il me sera d'une grande utilité dans mon travail.
Merci Philippe.![]()
Vous avez envie de contribuer au sein du Club Developpez.com ? Contactez-nous maintenant !
Vous êtes passionné, vous souhaitez partager vos connaissances en informatique, vous souhaitez faire partie de la rédaction.
Il suffit de vous porter volontaire et de nous faire part de vos envies de contributions :
Rédaction d'articles/cours/tutoriels, Traduction, Contribution dans la FAQ, Rédaction de news, interviews et témoignages, Organisation de défis, de débats et de sondages, Relecture technique, Modération, Correction orthographique, etc.
Vous avez d'autres propositions de contributions à nous faire ? Vous souhaitez en savoir davantage ? N'hésitez pas à nous approcher.
Bonjour Malick,
Le Filtre avancé d'excel est en effet un outil qui quand on en a compris les possibilités offre des possibilités extraordinaire et l'exploiter en VBA permet de gagner de nombreuses lignes de codes.
Merci d'en avoir apprécié la lecture.
Philippe
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 suret 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
Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier
Mais il est génial ce truc![]()
Comme la plupart qui l'ont remarqué, il est vrai que l'on passe souvent les données sous Access pour pouvoir effectuer ce genre de requêtes.
Ces filtres élaborés, inconnus pour moi, sont une mise d'information très précieuses.
Je l'ai lu un peu en diagonale, mais si ce genre de problème ressurgit, nul doute que je ferai bon usage de ton tuto![]()
- Avant de poster,
et http://www.developpez.com/sources/
- Lors du post, n'oubliez pas, si besoin les balises CODE => voir ici pour l'utilisation
- N'oubliez pas le
![]()
- N'oubliez pas le
si la réponse vous a été utile !
Bonjour Olivier,
En effet Le filtre élaboré d'excel fait partie de ces outils d'excel comme la consolidation, table de données, etc. sous-exploités par l'utilisateur qui souvent apprend d'une façon empirique ce logiciel.
Tous ces outils regorgent pourtant de possibilités insoupçonnées et surtout quand on utilise en VBA la méthode qui leur est associée. Cela évite au programmeur des dizaines voir plus de lignes inutiles (voir petit exemple pour le filtre avancé dans cette discussion)
Merci de ton appréciation pour la lecture de ce tutoriel et d'avoir pris le temps d'en rendre compte, cela fait plaisir.
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 suret 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
Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier
Bonjour Philippe,
Dire que je n'avais toujours pas lu cet excellent tutoriel, j'aurai loupé quelque chose, encore bravo. Je le garde sous le coude.
Bonne continuation et merci pour tes contributions.
Cordialement,
Dom
_____________________________________________
Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
pensez à cliquer sur :resolu: si votre problème l'est
Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)
"Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
---------------
Mes billets de blog sur DVP
Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
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...
---------------
Bonjour,
Oui, c'est toujours le problème mis en lumière lors des formations, ne vaut-il pas mieux investir dans la découverte ou l’approfondissement de l'outil que l'on possède que d'acquérir le dernier né en pensant que "ça ira" mieux
C'est sûr que le retour sur investissement au niveau de la lecture de tutos de ce genre devrait enthousiasmer plus d'un dirigeant de société...
cordialement,
Didier
Partager