Question

Le filtre automatique est de trier les données à la verticale, mais je veux filtrer les lignes horizontalement.Disons que j'ai le tableau suivant:

1 2 2 1 2

B A E F F

B D E F F

C D E F F

Ce que je peux faire est de fixer un filtre automatique et filtre uniquement les lignes contenant "B" dans la première colonne.Ce que je voudrais faire est de filtrer uniquement les lignes qui contiennent "2" (dans ce cas, les lignes sont la deuxième, la troisième et la dernière dans ce cas).

J'ai trouvé quelques informations à ce sujet.Toutes les réponses que j'ai trouvé sont contenant des macros pour faire le travail, mais ils ont été écrits pour MS Excel, et ne sont pas compatibles avec OpenOffice

Par exemple, cette macros doivent obtenir les lignes filtrées, mais ne fonctionne pas dans OpenOffice Calc:

Option Explicit

Sub horizontal_filter()
'Erik Van Geit
'060910

Dim LC As Integer           'Last Column
Dim R As Long
Dim i As Integer
Dim FilterValue As String

Const FilterColumn = 1      '1 is most logical value but you may change this

R = ActiveCell.Row
LC = Cells(R, Columns.Count).End(xlToLeft).Column

FilterValue = Cells(R, FilterColumn)

Application.ScreenUpdating = False

'to filter starting after FilterColumn
For i = FilterColumn + 1 To LC
'to filter all columns even before the filtercolumn
'For i = 1 To LC
    If i <> FilterColumn Then
    Columns(i).Hidden = Cells(R, i) <> FilterValue
    End If
Next i

Application.ScreenUpdating = True

End Sub

Toute aide est grandement appréciée!

Était-ce utile?

La solution

Vous ne pouvez pas, dans l'hypothèse d'une dépense raisonnable.Il est beaucoup plus facile de transformer vos données afin que les lignes d'obtenir des colonnes et vice versa.Donc, je vous recommande fortement de transformer les données en utilisant Paste Special en collaboration avec le Transpose option.Vous pouvez même le faire dynamiquement à l'aide de la TRANSPOSE() fonction.

EDIT:

Maintenant je l'ai eu, vous voulez masquer des colonnes basé sur une certaine valeur.Ceci est possible en utilisant une macro en fait, donc ma première réponse était incorrecte - désolé pour ça!Il y a quelques macros autour de qui va le faire pour vous.Vous pouvez combiner cette solution avec un filtre automatique.Voici un solution par king_026 de l'OpenOffice.org forums (légèrement adapté à la structure de la table - voir ci-dessous):

REM  *****  BASIC  *****
sub hide
   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 get the current column
   nCol = ThisComponent.CurrentSelection.CellAddress.Column

   rem set the properties for moving right
   dim args2(1) as new com.sun.star.beans.PropertyValue
   args2(0).Name = "By"
   args2(0).Value = 1
   args2(1).Name = "Sel"
   args2(1).Value = false

   rem make thecurrent column counter
   dim cCol as integer
   CCol = 0

   rem goto the first column
   dim args1(0) as new com.sun.star.beans.PropertyValue
   args1(0).Name = "ToPoint"
   args1(0).Value = "$A$2"

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

   rem loop until you get back to the selected cell
    Do Until cCol > nCol

    rem hide if the cell value is 1
        if ThisComponent.CurrentSelection.string <> "" and ThisComponent.CurrentSelection.value = 1 then

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

        End if

        rem goto the right nad increment the column counter
        dispatcher.executeDispatch(document, ".uno:GoRight", "", 0, args2())
        cCol = cCol + 1

    Loop

End sub

Ainsi, le tableau suivant:

calc1

ressemblera à ceci après filtre automatique sur Col1 et après la macro a fait son travail:

calc

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top