¿como puedo FILTRAR EN FORMA HORIZONTAL?

24/09/2007 - 19:46 por xavi | Informe spam
tengo el formato ya definido y por diversas razones no se puede modificar por
lo que no me vale transponer los datos
 

Leer las respuestas

#1 Héctor Miguel
24/09/2007 - 22:53 | Informe spam
hola, xavi !

tengo el formato ya definido y por diversas razones no se puede modificar
por lo que no me vale transponer los datos



esta solicitud de *filtrar por filas* esta teniendo una cierta *recurrencia*
si no te incomoda el uso de macros y un control incrustado en *esa* hoja...

1) inserta un combo [se asume el nombre de *ComboBox1*] de la barra de herramientas *cuadro de controles*
2) copia/pega las instrucciones/macros/... al final de este mensaje en el modulo de codigo de *esa* hoja
3) [en *esa* hoja] cuando quieras filtrar, haz un clic-secundario sobre alguna celda EN la fila de los *crieterios* y...

nota: tiene algunas *inconsistencias* todavia, y no es tan *funcional* como el dialogo integrado para filtrar por columnas
pero... con los dato que [NO] aportas y un poco de *hecho a la carrera*... -?- [creo que es un buen punto de partida]

si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.

Dim cLeft As Single, cTop As Single, cWidth As Single, cHeight As Single, _
Col As Byte, Cargando As Boolean, Cumple As Boolean
Private Sub Worksheet_Activate(): ComboBox1.Visible = False: End Sub
Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
If ActiveCell.CurrentRegion.Columns.Count = 1 Then Exit Sub Else Cancel = True
If ComboBox1.Visible Then ComboBox1.Visible = False: Exit Sub
Dim cCont As String, cData As New Collection
With ActiveCell.CurrentRegion.Cells(ActiveCell.Row, 1)
cLeft = .Left: cTop = .Top: cWidth = .Width + 15: cHeight = .Height + 5
End With: On Error Resume Next
With ActiveCell.CurrentRegion
For Col = 2 To .Columns.Count
cCont = .Cells(ActiveCell.Row, Col)
cData.Add cCont, CStr(cCont)
Next: End With
With ComboBox1: Cargando = True: .Clear: .AddItem "(Todas)"
For Col = 1 To cData.Count: .AddItem cData(Col): Next
.Left = cLeft: .Top = cTop: .Height = cHeight: .Width = cWidth: .Visible = True: .DropDown
End With: Cargando = False
End Sub
Private Sub ComboBox1_Change(): If Cargando Then Exit Sub
Application.ScreenUpdating = False: ActiveCell.Activate
With ActiveCell.CurrentRegion
If ComboBox1.ListIndex = 0 Then .Columns.EntireColumn.Hidden = False: Exit Sub
For Col = 2 To .Columns.Count
Cumple = .Cells(ActiveCell.Row, Col) = ComboBox1.Text
.Cells(ActiveCell.Row, Col).EntireColumn.Hidden = Not Cumple
Next: End With
End Sub

Preguntas similares