[Résolu][Calc] Savoir si un filtre est actif ou pas

Discussions et questions sur tout ce qui concerne la programmation tous langages et tous modules confondus.

Modérateur : Vilains modOOs

Règles du forum
:alerte: Balisage obligatoire dans cette section !
Aidez-nous à vous aider au mieux en balisant correctement votre question : reportez-vous sur les règles de cette section avant de poster !
Avatar de l’utilisateur
martinbrait
InconditiOOnnel
InconditiOOnnel
Messages : 753
Inscription : 09 avr. 2013 07:15
Localisation : T'as pas dit bonjour, merci et à bientot !

[Résolu][Calc] Savoir si un filtre est actif ou pas

Message par martinbrait »

Bonjour,

Syntaxe, priez pour nous !
Comment faire pour détecter si un filtre est actif ou inactif,
sur une feuille, afin de le désactiver sans erreur, à tous les coups ???


Je débute par quelque chose...
un morceau de code, sorti d'un autre contexte.

Code : Tout sélectionner


Sub Monfiltrespecial

Dim monDocument As Object, lesFeuilles As Object, maFeuille As Object
Dim maZone As Object, criteres As Object
Dim monFiltre As Object
Dim pointResu As Object
   
monDocument = ThisComponent
lesFeuilles = monDocument.Sheets
maFeuille = lesFeuilles.getByName("Données")

   maZone = maFeuille.getCellRangeByName("A4:N14")
   'maZone.Cellbackcolor = RGB(255,0,0)         'la zone se colorise donc elle existe bien
   criteres = mafeuille.getCellRangeByName("A1:N2")
   'Criteres.Cellbackcolor = RGB(0,255,125)      'la zone se colorise donc elle existe bien
   'xray mazone      'createFilterDescriptorByObject existe bien dans les méthodes   
   
   monFiltre = criteres.createFilterDescriptorByObject(maZone)
   'xray monfiltre    'renvoie données vides
   
   With monFiltre
    .CopyOutputData = True
    .ContainsHeader = True
    .Orientation = com.sun.star.table.TableOrientation.COLUMNS
    pointResu = mafeuille.getCellRangeByName("A20")
    .OutputPosition = pointResu.CellAddress
   End With
   maZone.filter(monFiltre)
End Sub
Merci beaucoup, et à bientôt !
Dernière modification par micmac le 26 nov. 2016 19:19, modifié 4 fois.
Raison : Ajout de la coche
LibreOffice version 5.4.7.2.M6 (x64)
Windows 10
+
LibreOffice version 5.4.7.2.M6 (x64)
Windows 7

#HSQL Database Engine 1.8.0
version=1.8.0

Locale : fr-FR (fr_FR)

Obligation de version


Bonjour, merci et à bientôt !
Avatar de l’utilisateur
micmac
RespOOnsable forum
RespOOnsable forum
Messages : 9228
Inscription : 28 août 2010 08:45

Re: [Calc] Savoir si un filtre est actif ou pas

Message par micmac »

Bonjour,
[b][color=#404080]martinbrait[/color][/b] a écrit :un morceau de code, sorti d'un autre contexte
Il vous a été demandé un nombre incalculable de fois de citer vos sources.

Après 411 messages, on ne devrait plus avoir à faire ce genre de rappels.
Touche Ctrl de Windows = touche cmd⌘ sur Mac
Outils > Options sur Windows = OpenOffice > Préférences sur Mac
zeguedon
ManitOOu
ManitOOu
Messages : 3031
Inscription : 02 juil. 2014 17:25

Re: [Calc] Savoir si un filtre est actif ou pas

Message par zeguedon »

Bonjour,
Par quel miracle penses -tu que ton filtre puisse être actif.

Ton filtre est exécuté à l'appel de ton code.

Si ta zone critères ne contient pas des entêtes de colonnes identiques aux entêtes de la plage à filtrer et que les critères ne sont pas définis sous les entêtes de ta zone critères, rien ne se passe.
(critères sur la même ligne = opérateur ET)
(critères sur des lignes différentes = opérateur OU)

Lorsque ton filtre est exécuté, le résultat du filtrage apparaît au pointResu


A+
Comment baliser [Résolu] ?
AOO
LibreOffice
Sous Linux
Jeff
GourOOu
GourOOu
Messages : 9608
Inscription : 18 sept. 2006 09:40
Localisation : France

Re: [Calc] Savoir si un filtre est actif ou pas

Message par Jeff »

Bonjour,

En restant purement tableur, je sais si un filtre est enclenché grâce au résultat retourné par la fonction SOUS.TOTAL.

En restant dans le domaine des macros, on peut utiliser une fonction par macro via formula.

A +
zeguedon
ManitOOu
ManitOOu
Messages : 3031
Inscription : 02 juil. 2014 17:25

Re: [Calc] Savoir si un filtre est actif ou pas

Message par zeguedon »

Bonjour,
Jeff a écrit :En restant purement tableur, je sais si un filtre est enclenché grâce au résultat retourné par la fonction SOUS.TOTAL.
Certes, lorsqu'il ne s'agit pas du filtre spécial avec l'option copier le résulta vers ce qui n'est pas le cas ici:

Code : Tout sélectionner

.CopyOutputData = True
cellule de destination :

Code : Tout sélectionner

pointResu = mafeuille.getCellRangeByName("A20")
A+
Comment baliser [Résolu] ?
AOO
LibreOffice
Sous Linux
Avatar de l’utilisateur
martinbrait
InconditiOOnnel
InconditiOOnnel
Messages : 753
Inscription : 09 avr. 2013 07:15
Localisation : T'as pas dit bonjour, merci et à bientot !

Re: [Calc] Savoir si un filtre est actif ou pas

Message par martinbrait »

Merci pour ces conseils,

Jusqu'ici, voici ce qui approche le plus possible de ce que je cherche :
Une destruction de filtre sous calc.
(extrait de https://wiki.openoffice.org/wiki/Docume ... de/Filters)

Code : Tout sélectionner

'When a filter is applied to a sheet, it replaces any existing filter for the sheet. Setting an empty filter in a sheet will therefore remove all filters for that sheet (see Listing 6).
'Listing 6. Remove the current sheet filter.

Sub RemoveSheetFilter()
  Dim oSheet          ' Sheet to filter.
  Dim oFilterDesc     ' Filter descriptor.
 
  oSheet = ThisComponent.getSheets().getByIndex(0)
  oFilterDesc = oSheet.createFilterDescriptor(True)
  oSheet.filter(oFilterDesc)
End Sub
Mais, comment conditionner la destruction à un test d'existence de filtre ???
Malheureusement, je ne sais pas vraiment comment faire un test d'existence de filtre.
Du coup, l'action RemoveSheetFilter() passe parfois à côté de l'objectif.
LibreOffice version 5.4.7.2.M6 (x64)
Windows 10
+
LibreOffice version 5.4.7.2.M6 (x64)
Windows 7

#HSQL Database Engine 1.8.0
version=1.8.0

Locale : fr-FR (fr_FR)

Obligation de version


Bonjour, merci et à bientôt !
Piaf
GourOOu
GourOOu
Messages : 5622
Inscription : 25 nov. 2011 18:07
Localisation : Guyane

Re: [Calc] Savoir si un filtre est actif ou pas

Message par Piaf »

Bonjour
Toujours pareil avec tes copies de code met plutôt un fichier en ligne.
Si l'on se réfère au premier code posté, dès que tu as des données à partir de la cellule A20 c'est qu'un filtre a été appliqué.
zeguedon a écrit :Ton filtre est exécuté à l'appel de ton code.
Comment déclenches-tu le code ?
Si c'est à partir d'un bouton, il suffit de marqué sur le bouton que le filtre à été appliqué
FiltreApplique.png
et de prévoir du code pour le supprimer.
filtreSupprime.png
Et l'exécution de

Code : Tout sélectionner

descrFiltre = maZone.createFilterDescriptor(True)
maZone.filter(descrFiltre)
ne génère pas d'erreur même si aucun filtre n'a été appliqué.
A+
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Libre Office Version: 6.1.6 et Apache OpenOffice 4.1.6 Sur Xubuntu 18.04 AMD64
Avatar de l’utilisateur
ThierryT
Membre enthOOusiaste
Membre enthOOusiaste
Messages : 467
Inscription : 10 nov. 2012 17:05

Re: [Calc] Savoir si un filtre est actif ou pas

Message par ThierryT »

Pour la gestion du filtrage, il faut passer par les DatabaseRanges du classeur considéré.

Voici une approche pour connaître si un filtrage est en cours ou non : voir fonction IsFiltered dans le fichier joint.

Elle reste perfectible du fait que si le filtre est actif au départ et que la Database "Plage" n'est pas encore crée dans le classeur, le résultat n'est pas correct.
Il faut dans ce cas, défiltrer la plage avant de la créer.
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
LibreOffice 6.1.3.2 x64 / AOO 4.1.5 (x86) sous Windows 8.1 (x64)
Java 8.x (x64 et x86), Firefox, Thunderbird,....

“Celui qui aime à apprendre est bien près du savoir.” (Confusius)
Comment baliser Résolu
Avatar de l’utilisateur
martinbrait
InconditiOOnnel
InconditiOOnnel
Messages : 753
Inscription : 09 avr. 2013 07:15
Localisation : T'as pas dit bonjour, merci et à bientot !

Re: [Calc] Savoir si un filtre est actif ou pas

Message par martinbrait »

Merci beaucoup pour toutes vos réponses qui m'aident à appréhender,
avec des logiques différentes, l'activation et désactivation
d'un autofiltre par programme depuis une exportation de base.

Cela m'aidera à éditer automatiquement par macro,
des tableaux de données.

Et de leur adjoindre un autofiltre activé ou désactivé, sur un champ,
à la ligne de mon choix.
LibreOffice version 5.4.7.2.M6 (x64)
Windows 10
+
LibreOffice version 5.4.7.2.M6 (x64)
Windows 7

#HSQL Database Engine 1.8.0
version=1.8.0

Locale : fr-FR (fr_FR)

Obligation de version


Bonjour, merci et à bientôt !
Avatar de l’utilisateur
ThierryT
Membre enthOOusiaste
Membre enthOOusiaste
Messages : 467
Inscription : 10 nov. 2012 17:05

Re: [Résolu][Calc] Savoir si un filtre est actif ou pas

Message par ThierryT »

ATTENTION :tesfou: : un autofiltre ne peut se positionner que sur des colonnes pas des lignes. :tesfou:
LibreOffice 6.1.3.2 x64 / AOO 4.1.5 (x86) sous Windows 8.1 (x64)
Java 8.x (x64 et x86), Firefox, Thunderbird,....

“Celui qui aime à apprendre est bien près du savoir.” (Confusius)
Comment baliser Résolu