Excellent tuto, sur lequel je suis tombé en cherchant comment faire l'équivalent de requêtes SQL sur des variables tableaux, en VBA.
Marre de faire des boucles avec IF imbriqués :-)
Merci Philippe !
Nicolas
Bonjour Nicolas,
Merci de ton appréciation pour ce tutoriel traitant d'un outil fantastique d'excel qui permet de réaliser énormément de tâches et surtout lors de son utilisation en VBA avec la méthode AdvancedFilter.
J'ajouterai que l'intérêt du filtre avancé en VBA par rapport à des boucles et des si imbriqués, c'est qu'il permet la modification des critères sans modification de code. Il suffit de modifier les données dans la zone de critères et l'on obtient directement les bons résultats (comme Philippe l'explique à la fin de son tutoriel). C'est un gain de temps et une fiabilité accrue dans l'extraction des données par rapport à du VBA où l'on doit réinventer la roue à chaque fois.
Bonjour Pierre,
Je ne peux qu'abonder dans ton sensJ'ajouterai que l'intérêt du filtre avancé en VBA par rapport à des boucles et des si imbriqués, c'est qu'il permet la modification des critères sans modification de code. Il suffit de modifier les données dans la zone de critères et l'on obtient directement les bons résultats (comme Philippe l'explique à la fin de son tutoriel). C'est un gain de temps et une fiabilité accrue dans l'extraction des données par rapport à du VBA où l'on doit réinventer la roue à chaque fois.
La méthode AdvancedFilter de l'objet Range est la méthode la plus simple et la plus rapide à mettre en place pour exporter des données ou en supprimer
Pourquoi cette assertion ?
Sa syntaxe est simple, ses possibilités infinies
Une fois la procédure écrite, la seule difficulté pour le programmeur réside dans l'écriture de la formule à placer dans la zone des critères qui doit renvoyer VRAI ou FAUX
Ce sera le thème d'un prochain tutoriel prévu pour fin janvier
En utilisant la méthode AdvancedFilter de l'objet Range on peut faire une simple copie avec ou sans toutes les colonnes de la source, on peut copier avec critères, on peut splitter sur plusieurs feuilles avec comme nom un élément contenu dans une ou plusieurs colonnes avec ou sans critères, on peut supprimer les lignes d'une liste suivant des critères.
Philippe Tulliez
La semaine passée j'étais face à un problème et grâce à ton tutoriel et en particulier la méthode AdvancedFilter de l'objet Range, j'ai suis arrivé à mettre en place un outil très pratique dans le cadre de mon travail.
J'étais certain que j'allais m'en servir, comme annoncé dans mon précédent post sur ce fil.
C'est la raison pour laquelle j'ai décidé d'écrire à nouveau pour te remercier encore, car cela m'évite plusieurs lignes de code.
Cordialement,
Malick
Bonjour Malick,
Merci pour tes remerciements qui me touchent beaucoup et ravi que tu aies pu concrétiser ta lecture en utilisant cette méthode AdvancedFilter qui est tellement riche en possibilités.
Cordialement
Philippe
Simplement quelques mots pour vous remercier et vous encourager à en faire d'autres; celui-ci est simple, clair, précis, bref : idéal !
Bonne journée à vous
Henri
Bonjour
merci pour le tutoriel
par contre je rencontre un problème, la macro ne filtre que ligne des entêtes de colonnes...
y a t'il un problème avec excel 2016
a priori le problème vient de cette ligne car quand je mets manuellement les filtre depuis le menu données
il les enlève à cette ligne
merci de vos réponses ou pistes pour m'éclairer
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 With rngData .Resize(, 1).AdvancedFilter Action:=xlFilterCopy, CopyToRange:=rngList, Unique:=True End With
david
Bonjour David,
Où avez-vous trouvé ce code ?
C'est difficile de répondre avec un code incomplet.
RngData est la plage de données mais avec l'utilisation de la propriété Resize(, 1) cela signifie que l'on prend une colonne de cette plage (sans doute la première) et du fait que la valeur de l'argument Unique est à True il s'agit d'une exportation de cette colonne sans les doublons.
D'ailleurs le nom de la variable objet rngList me laisse sous-entendre qu'il s'agit bien d'une liste.
Ce code provient vraisemblablement d'une procédure qui splitte les données dans des feuilles séparées suivant les valeurs contenues dans une colonne.
Bonjour Henri,
Avecun peu de retard, merci pour votre message congratulant.Simplement quelques mots pour vous remercier et vous encourager à en faire d'autres; celui-ci est simple, clair, précis, bref : idéal !
Bonjour ,
Je comprend votre macro mais j'aimerais cependant avoir des informations en plus,
premièrement l'onglet paramètre est t'il obligatoire?
deuxièmement comment faire pour faire un filtre sur la création de la liste? par exemple si je souhaite avoir les services seulement pour les quelles la variables janv 13 est inférieur à 60?
Merci pour votre réponse
Bonjour Philippe,
Merci pour ce tuto qui éclaire beaucoup de choses sur les filtres avancés (élaborés) de XL.
J'ai juste modifié une ligne de code pour bien identifier la feuille additionnelle car c'est plus pratique pour moi:
où "crit" est le critère choisi (on peut bien sûr ajouter d'autres descriptifs, mais cela me suffit pour le moment). Encore merci d'avoir éclairé la lanterne de plusieurs "forum'eurs(es)"
Code : Sélectionner tout - Visualiser dans une fenêtre à part With Worksheets(1): ActiveCell = .Range("A1"): .Name = .Name & "_" & crit: .Tab.Color = vbRed: End With
Bonjour Philippe,
Félicitations pour ce beau travail.
Une petite précision à apporter aux débutants VBA...
Lorsque, par VBA, on filtre une plage en fonction d'un critère décimal (cf ton troisième exemple), il convient, dans la cellule, de remplacer la virgule par un point.
Ainsi, uniquement si l'on filtre par VBA, dans ton exemple, >7,5 doit être remplacé par >7.5
Merci encore pour ce tutoriel.
Amicalement,
Franck
Bonjour,
Superbe tuto. Rarement lu un article aussi bien documenté.
Merci à toi pour tous les lecteurs qui vont forcément explorer de nouveaux horizons.
Cdt. Bruno
Bonjour Philippe, bonjour à tous,
Trés bon tuto, je souhaitais juste apporter une précision, que je n'ai pas vue dans le tuto (ou bien l'ai-je manquée ?)
Le résultat du filtre, lorsque copié ailleurs, ne contient plus de formule, et ce même si la liste originale en contenait
ça peut avoir son importance dans certains cas
Bravo pour vos tutos trés clairs et merci
Bonjour tototiti2008,
Merci pour ton message congratulant qui fait toujours plaisir.
En ce qui concerne
C'est exact et si je ne l'ai pas précisé, c'est que cela me semblait évident qu'une exportation ne pouvait contenir que des constantes mais tu as raison que ce qui semble évident pour moi, peut ne pas l'être pour tous les lecteurs.Le résultat du filtre, lorsque copié ailleurs, ne contient plus de formule, et ce même si la liste originale en contenait
ça peut avoir son importance dans certains cas
C'est d'ailleurs la même chose pour le résultat d'une transformation des données avec PowerQuery.
Bonjour,
En lisant le dernier message, je me suis rendu compte que je n'avais pas répondu aux messages précédents.
Donc avec beaucoup de retard, je remercie Zekraoui_Jakani, Franck (pijaku) et Bruno (ZX12R) pour leur message qui est très encourageant pour continuer partager mon expérience.
Pour Franck
Si l'on filtre avec VBA, je ne vois pas de problème avec l'exemple que tu as cité.Une petite précision à apporter aux débutants VBA...
Lorsque, par VBA, on filtre une plage en fonction d'un critère décimal (cf ton troisième exemple), il convient, dans la cellule, de remplacer la virgule par un point.
Ainsi, uniquement si l'on filtre par VBA, dans ton exemple, >7,5 doit être remplacé par >7.5
Avant de répondre, j'ai évidemment vérifié et le code ci-dessous qui utilise des plages nommées filtre bien les données. Il est évident que les critères dans ce cas sont tapés manuellement et pas générés par du code.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 Sub t() Range("areaData").AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:=Range("areaCriteria") End Sub
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager