[Calc] Filtre spécial : procédure pas à pas jusqu'à la macro

Venez découvrir tous les tutoriels, modèles et autres foires aux questions afin de maîtriser rapidement votre suite bureautique favorite.

Modérateur : Vilains modOOs

Règles du forum
Aucune question dans cette section !
Cette section est faite pour présenter les tutoriels. Si vous avez une question sur l'installation, le fonctionnement ou l'utilisation, vous devez poster dans la section du module où se produit le problème.

Ce tutoriel vous a-t-il aidé ou répondu à votre problème ?

Oui
8
73%
Non
0
Aucun vote
En partie
3
27%
 
Nombre total de votes : 11

zeguedon
ManitOOu
ManitOOu
Messages : 3031
Inscription : 02 juil. 2014 19:25

[Calc] Filtre spécial : procédure pas à pas jusqu'à la macro

Message par zeguedon »

Bonjour,

Filtre spécial – une procédure pas à pas –
  • Sous licence GNU GPL ce document a pour objectif de vous présenter une procédure détaillée de l'utilisation du filtre spécial. Vous êtes libres de le reproduire, l'améliorer, le modifier, le distribuer à condition de lui attribuer les mêmes libertés et de citer son origine : ForumOpenOffice.org
Présentation et particularités
  • Le filtre spécial est un filtre particulier en ce sens qu'il est créé par l'utilisateur, sous forme de petit tableau à part, directement sur la feuille de calcul. Il permet d'y définir tous les critères de filtrage. Actuellement, en 2015, le nombre de conditions qu'il est possible de fixer est limité à huit.
    L'autre principale particularité de ce filtre est que ce petit tableau doit impérativement commencer par la copie conforme de la ligne d'en-tête du tableau à filtrer comme vous pouvez le voir sur les deux copies d'écran ci-dessous :
Tableau à filtrer
  • FiltreSpecial1.png
    Ce tableau fictif est volontairement limité en hauteur pour réduire l'espace occupé sur ce document, mais cela n'enlève rien à la compréhension de la méthode.
Tableau des critères 
  • FiltreSpecial2.png
    FiltreSpecial2.png (7.49 Kio) Consulté 12636 fois
    Le tableau qui va contenir les critères de filtrage (le filtre) peut être positionné où bon vous semble dans le classeur mais doit impérativement reprendre par copie conforme la première ligne d'en-tête du tableau à filtrer ci-dessus.
zeguedon
ManitOOu
ManitOOu
Messages : 3031
Inscription : 02 juil. 2014 19:25

Message par zeguedon »

Les règles de filtrage obéissent aux lois des opérateurs ET et OU
  • Il est important de préciser, avant d'aller plus loin dans la procédure, que les critères doivent être saisis d'une certaine façon pour obéir à ces règles ; lorsqu'ils sont saisis les uns à cotés des autres, et/ou les uns sous les autres, le résultat obtenu est différent.
    • 1. Les critères sont saisis sur la même ligne :
      • FiltreSpecial3.png
        FiltreSpecial3.png (8.78 Kio) Consulté 12635 fois
        Lorsque les critères sont saisis les uns à coté des autres, ils sont soumis aux règles de l'opérateur ET. Cela veut dire que seules les lignes qui contiennent 2004 ET Pakistan seront affichées. En d'autres termes, les lignes contenant Pakistan mais pas 2004, ou contenant 2004 mais pas Pakistan ne seront pas affichées.
      2. Les critères sont saisis sur des lignes différentes :
      • FiltreSpecial4.png
        FiltreSpecial4.png (9.3 Kio) Consulté 12635 fois
        Lorsque les critères sont saisis les uns sous les autres, ils sont soumis aux règles de l'opérateur OU. Cela veut dire que seules les lignes qui contiennent 2004 OU Pakistan seront affichées. En d'autres termes, les lignes contenant Pakistan et 2036, ou celles contenant 2004 et Afrique du sud seront affichées.
zeguedon
ManitOOu
ManitOOu
Messages : 3031
Inscription : 02 juil. 2014 19:25

Message par zeguedon »

Les différents cas de figure

À vous de choisir la procédure la mieux adaptée à votre situation
  • 1. Premier cas de figure, votre besoin se limite à un seul filtrage pour récupérer des informations ciblées, puis vous en aurez fini avec ce tableau.
    • 1.1. Vous créez votre filtre comme nous venons de le voir sur les deux précédentes captures
      1.2. Vous sélectionnez à la souris le tableau à filtrer en incluant les entêtes de colonnes
      1.3. Par le menu Données>Filtre>Filtre spécial vous obtenez cette fenêtre :
      FiltreSpecial5.png
    • 1.4. En cliquant sur la petite flèche verte en regard de la zone vide apparente sur la capture ci-dessus, vous obtenez la possibilité de sélectionner à la souris votre filtre comme sur la capture suivante. Ses références s'afficheront alors dans la zone réservée :
      FiltreSpecial6.png
    • 1.5. Lorsque votre filtre est sélectionné, vous cliquez encore sur la petite flèche verte apparente sur la capture ci-dessus pour revenir à la fenêtre de dialogue du filtre, capture suivante :
      FiltreSpecial7.png
    • 1.6. à ce stade vous pouvez directement cliquer sur OK si vous souhaitez que le tableau initial soit replié.
      1.7. Si vous souhaitez copier le résultat obtenu ailleurs dans le document, il vous suffit de le préciser dans en cliquant sur le bouton Options pour développer l'affichage des différentes options . Ensuite vous cochez la case à cocher - Copier le résultat vers – puis comme précédemment indiqué vous cliquez sur la petite flèche verte pour sélectionner la cellule de destination.
      1.8. Comme vous le voyez sur la capture précédente, vous pouvez choisir d'autres options selon vos besoins.
      1.9. Vous terminez en cliquant sur OK.
zeguedon
ManitOOu
ManitOOu
Messages : 3031
Inscription : 02 juil. 2014 19:25

Message par zeguedon »

  • 2. Deuxième cas de figure, le tableau à filtrer va évoluer et être filtré régulièrement, toujours sur le(s) même(s) critère(s)
    • 2.1. Vous réservez dans ce cas un endroit particulier du classeur pour y stocker votre filtre que vous nommez (Filtre1 par exemple) par le menu Insertion>Nom>Définir après l'avoir sélectionné. Il faudra cocher l'option Filtre dans les options du dialogue concerné :
      FiltreSpecial9.png
      La validation se fait en cliquant sur ajouter.

      2.2. L'avantage de cette démarche est que lorsque vous appellerez le dialogue de filtrage, vous n'aurez qu'à sélectionner directement le nom de votre filtre comme sur la capture suivante :
      FiltreSpecial10.png
      2.3. Le reste de la procédure est identique à celle décrite au point 1.5 de ce chapitre
    3. Troisième cas de figure, votre tableau va évoluer et être filtré régulièrement mais tantôt sur certains critères tantôt sur d'autres
    • 3.1. Vous devez dans ce cas créer autant de filtres que de combinaisons de critères différents, que vous nommerez individuellement dans une zone technique du classeur réservée à cet effet comme décrit au point 2.1 de ce chapitre
      3.2. Vous nommerez de la même façon les éventuelles zones de destinations si vous souhaitez copier les résultats obtenus à des endroits particuliers du classeur. Cette façon de procéder vous procure l'avantage de n'avoir qu'à sélectionner le nom de la destination avant de valider le filtrage.
Comment baliser [Résolu] ?
AOO
LibreOffice
Sous Linux
zeguedon
ManitOOu
ManitOOu
Messages : 3031
Inscription : 02 juil. 2014 19:25

Filtre spécial : exécuté par macro

Message par zeguedon »

Outil complémentaire

Certains souhaiterons automatiser la procédure de filtrage lorsque les filtres seront multiples et régulièrement utilisés sur un tableau en permanente évolution ou sur de nombreux tableaux de même structure mais toujours différents. Le code qui suit permet cette automatisation en respectant quelques règles élémentaires.
Notez que ce document n'a pas vocation à décrire la procédure d'utilisation des macros. Ce qui suit est donc réservé aux plus avertis, mais la section macro du forum est là pour accueillir vos éventuelles questions sur le sujet. Merci d'en respecter les règles si vous vous y rendez pour poster.

L'utilisation du code qui suit requière le respect de quelques règles
  • 1. Une feuille à filtrer nommée "LISTING" pour l'exemple. Si vous modifiez ce nom il faudra adapter dans le code la ligne décrite au point 4 de ce chapitre
    2. Une feuille avec les critères de filtrage définis dans des zones nommées sur le principe du filtre spécial décrit plus haut
    Dans le code qui suit le nombre de filtres est de trois. Il faudra adapter en modifiant dans le code la valeur de la ligne suivante :

    Code : Tout sélectionner

    nbFiltres = 3 'remplacez 3 par le nombre réel de filtres que vous utilisez
    3. Pour chaque nouveau filtre, il faudra sélectionner la zone des critères puis la nommer en commençant par "Filtre1" puis en poursuivant par Filtre2, Filtre3 etc. La macro se chargera de créer pour chaque filtre une nouvelle feuille du même nom pour accueillir le résultat du filtrage.
    4. La zone à filtrer se définit dans le code sur la ligne suivante en remplaçant A1:B30 par les bonnes références et le cas échéant "LISTING" par le nom de votre feuille:

    Code : Tout sélectionner

    zone_a_filtrer = lesFeuilles.getByName("LISTING").getCellRangeByName("A1:B30")'définir ici le nom de la feuille et les références de la zone à filtrer
Le code en question

Code : Tout sélectionner

Option Explicit

Sub fitreSpecial()
Dim monDocument As Object, lesFeuilles As Object, maFeuille As Object
Dim zone_a_filtrer as object, ma_zone_criteres As Object, ma_zone_destination As Object
Dim monFiltre As Object
Dim nbFiltres As integer 
Dim index As Integer, i As integer

monDocument = ThisComponent
lesFeuilles = monDocument.Sheets
nbFiltres = 3 'définir ici le nombre de filtres

For i = 1 To nbFiltres 
index = lesFeuilles.Count
lesFeuilles.insertNewByName("Filtre" & index-1, index)'crée une nouvelle feuille
ma_zone_destination = lesFeuilles.getByName("Filtre" & index-1).getCellRangeByName("A1")'destination du filtrage
ma_zone_criteres = lesFeuilles.getByName("Critères").getCellRangeByName("Filtre" & index-1) 'lit les paramètres du filtre
zone_a_filtrer = lesFeuilles.getByName("LISTING").getCellRangeByName("A1:B30")'définr ici la zone à filtrer
monFiltre = ma_zone_criteres.createFilterDescriptorByObject(zone_a_filtrer)
With monFiltre
  .CopyOutputData = True 
  .ContainsHeader = True
  .Orientation = com.sun.star.table.TableOrientation.COLUMNS
  .OutputPosition = ma_zone_destination.CellAddress
  .SkipDuplicates = True ' True pour ne pas afficher les doublons False pour les afficher.
End With
zone_a_filtrer.filter(monFiltre)
Next i
End Sub
Pour commencer un nouveau traitement il ne faut conserver que les deux premières feuilles du classeur.
Ce code peut être amélioré pour conserver dans le classeur un historique des précédents filtrages sans être obligé de le vider à chaque fois. Je m'y attellerai lorsque j'aurai l'envie et le temps libre pour le faire si quelque ne s'en charge pas avant.

Documents annexes :
Filtre_Special_Automatisé.ods
Code modifié et commenté pour afficher ou non les doublons.
(37.37 Kio) Téléchargé 1015 fois
Filtre_Special_Une_Procedure_pas_a_pas.odt
(231.31 Kio) Téléchargé 854 fois

La modération vous a écrit: Aucune question dans ce fil : veuillez utiliser la section Macro !

Répondre