2 messages in org.openoffice.fr.progRe: [prog] AutoFilter ?
FromSent OnAttachments
AladdinFeb 8, 2007 9:34 am 
AladdinFeb 12, 2007 9:57 am 
Actions with this message:
Paste this link in email or IM:
Paste this link in email or IM:
Atom feed for this thread
Paste this URL into your reader:
Subject:Re: [prog] AutoFilter ?Actions...
From:Aladdin (alad@altern.org)
Date:Feb 12, 2007 9:57:12 am
List:org.openoffice.fr.prog

Bonjour à vous,

J'aimerai savoir s'il est possible de créer son propre AutoFilter ? J'ai vu qu'on pouvait créer un filtre avec un TableFilterField :

Dim FiltreDesc as Object Dim FiltreProp(0) as new com.sun.star.sheet.TableFilterField

FiltreDesc = MaFeuille.createFilterDescriptor(true) 'création du "descripteur" de filtre

FiltreProp(0).Field = 2 FiltreProp(0).IsNumeric = false FiltreProp(0).Operator = com.sun.star.sheet.FilterOperator.EQUAL FiltreProp(0).StringValue = "test"

Mais je n'ai pas réussi à faire le lien avec un AutoFilter.

Dans la liste de l'AutoFilter il y a : tout, Standard, Top 10 ..., l'idée serait d'avoir dans cette liste son "propre" filtre ou bien de pouvoir modifier directement le Standard avec ses propres options.

J'ai essayé de voir avec le dispatcher en passant par un TableFilterField au DataFilterAutoFilter sans succès non plus.

sub TestAutofiltre rem ---------------------------------------------------------------------- rem define variables dim document as object dim dispatcher as object rem ---------------------------------------------------------------------- rem get access to the document document = ThisComponent.CurrentController.Frame dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

rem ---------------------------------------------------------------------- dim args1(0) as new com.sun.star.beans.PropertyValue args1(0).Name = "ToPoint" args1(0).Value = "$A$1"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args1())

rem ---------------------------------------------------------------------- dim args2(0) as new com.sun.star.beans.PropertyValue args2(0).Name = "ToPoint" args2(0).Value = "$A$1:$A$7"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args2())

rem ---------------------------------------------------------------------- dispatcher.executeDispatch(document, ".uno:DataFilterAutoFilter", "", 0, Array())

rem ---------------------------------------------------------------------- rem dispatcher.executeDispatch(document, ".uno:DataFilterStandardFilter", "", 0, Array())

rem ---------------------------------------------------------------------- dispatcher.executeDispatch(document, ".uno:FilterExecute", "", 0, Array())

On peut s'en sortir comme cela :

Sub monFiltre Dim rangeAddress As new com.sun.star.table.CellRangeAddress Dim Filtre As Object Dim FiltreProp(0) as new com.sun.star.sheet.TableFilterField ' propriétés du filtre

'Zone de filtrage rangeAddress.Sheet = thisComponent.CurrentController.ActiveSheet.RangeAddress.Sheet rangeAddress.StartColumn = 0 rangeAddress.StartRow = 0 rangeAddress.EndColumn = 3 rangeAddress.EndRow = 3

If Not thisComponent.DatabaseRanges.HasByName("maZone") Then MsgBox "Create maZone" ThisComponent.DatabaseRanges.addNewByName( "maZone", rangeAddress ) End If

'Récupére le filtre Filtre = ThisComponent.DatabaseRanges.getByName("maZone").FilterDescriptor

FiltreProp(0).Field = 1 FiltreProp(0).IsNumeric = false FiltreProp(0).Operator = com.sun.star.sheet.FilterOperator.EQUAL 'valeur égale FiltreProp(0).StringValue = "test" 'Critère de filtrage

Filtre.setFilterFields(FiltreProp()) ' applique les propriétés du filtre Filtre.ContainsHeader = True ' Contient les headers

'Filtre thisComponent.CurrentController.ActiveSheet.getCellRangeByName("maZone").filter(Filtre)

'Active l'AutoFiltre thisComponent.DatabaseRanges.getByName("maZone").AutoFilter=true

End Sub