Agregar variable para filtrar por una u otra hoja

Buenas:

Para Dam

Hola disculpa tantas preguntas .. Pero sabes que estoy topando en una cosa..

Resulta que tengo el siguiente código que me facilitastes hace unos días que filtra una hoja en este caso la hoja1 y copia los datos en la hoja3 ya filtrados

La pregunta es como hacer o crear una solución para que :

Primero elijo una fecha del combobox2 y luego otra fecha en el combobox3 en el combobox4 elijo una opción todo esto lo extrae de la hoja1 ..

Mi idea es la siguiente ya una vez elegidas la fechas y la opción del combobox4 quisiera pinchar en uno de dos optionbutton ej pincho en el optionbutton1 busque en la hoja1 y si elijo el optionbutton2 busque en la hoja los rangos de ambas hojas son las mismas...


Aquí donde dice hoja1 en el código me gustaría que tomara la opción del optionbutton1 o el 2 para buscar en la hoja que deseo

For Each celda In Hoja1.Range("A6:A" & Hoja1.Range("A65536").End(xlUp).Row)

Sub Filtro()
'Mod.Por.DAM
    Dim dStartDate  As Date
    Dim dEndDate    As Date
    Dim i           As Long
    Dim rango       As Range
    Dim celda       As Range
    Dim hj          As Object
    Application.EnableEvents = False
    Set hj = Hoja3
    hj.Range("B4:E" & hj.Range("B" & Rows.Count).End(xlUp).Row).ClearContents
    With Hoja3
        dStartDate = CDate(UserForm1.ComboBox2.Value)
        dEndDate = CDate(UserForm1.ComboBox3.Value)
        i = 4
        Hoja3.Range("C1") = ComboBox4.List(ComboBox4.ListIndex, 0)
   For Each celda In Hoja1.Range("A6:A" & Hoja1.Range("A65536").End(xlUp).Row)
        If celda >= dStartDate And celda <= dEndDate Then
                Hoja3.Range("B" & i) = celda.Value
                Hoja3.Range("C" & i) = Cells(celda.Row, ComboBox4.List(ComboBox4.ListIndex, 1))
                If ComboBox4.List(ComboBox4.ListIndex, 2) = "" Then
                    Hoja3.Range("D" & i) = ""
                Else
                    Hoja3.Range("D" & i) = Cells(celda.Row, ComboBox4.List(ComboBox4.ListIndex, 2))
                End If
                If ComboBox4.List(ComboBox4.ListIndex, 3) = "" Then
                    Hoja3.Range("E" & i) = ""
                Else
                    Hoja3.Range("E" & i) = Cells(celda.Row, ComboBox4.List(ComboBox4.ListIndex, 3))
                End If
                i = i + 1
            End If
        Next celda
    End With
    Set rango = Nothing
     'MsgBox ("Proceso finalizado")
End Sub

Por favor Muchas gracias

1 Respuesta

Respuesta
1

No entendí bien esta parte: "y si elijo el optionbutton2 busque en la hoja los rangos de ambas hojas son las mismas..."

¿Qué busquen el la hoja? ¿Cuál hoja?

¿Los rangos de ambas hojas? ¿De cuáles hojas?

Hola.. Dam

Me refiero a que con el optionbutton1 busque en la hoja1 y con el optionbutton2 busque en la hoja2...

Me refería que en las dos hojas a buscar son iguales el formato ...

Lo que me interesa es eso de los optionbutton.. Como darle la opción en el código para buscar en la hoja1 con el optionbutton1 o e la hoja2 con el optionbutton2...

Lo he intentado con variable pero no me resulta ..

Gracias

Te anexo los cambios a la macro, no lo puedo probar porque no tengo el archivo con todas las hojas y todos los controles del formulario, pero la idea es poner en una variable la hoja que vas a ocupar.

Sub Filtro()
'Mod.Por.DAM
    Dim dStartDate  As Date
    Dim dEndDate    As Date
    Dim i           As Long
    Dim rango       As Range
    Dim celda       As Range
    Dim hj          As Object
    Application.EnableEvents = False
    Set hj = Hoja3
    hj.Range("B4:E" & hj.Range("B" & Rows.Count).End(xlUp).Row).ClearContents
    If OptionButton1 Then
        Set lahoja = Hoja1
    Else
        Set lahoja = Hoja2
    End If
    With Hoja3
        dStartDate = CDate(UserForm1.ComboBox2.Value)
        dEndDate = CDate(UserForm1.ComboBox3.Value)
        i = 4
        Hoja3.Range("C1") = ComboBox4.List(ComboBox4.ListIndex, 0)
        For Each celda In lahoja.Range("A6:A" & Hoja1.Range("A65536").End(xlUp).Row)
            If celda >= dStartDate And celda <= dEndDate Then
                Hoja3.Range("B" & i) = celda.Value
                Hoja3.Range("C" & i) = Cells(celda.Row, ComboBox4.List(ComboBox4.ListIndex, 1))
                If ComboBox4.List(ComboBox4.ListIndex, 2) = "" Then
                    Hoja3.Range("D" & i) = ""
                Else
                    Hoja3.Range("D" & i) = Cells(celda.Row, ComboBox4.List(ComboBox4.ListIndex, 2))
                End If
                If ComboBox4.List(ComboBox4.ListIndex, 3) = "" Then
                    Hoja3.Range("E" & i) = ""
                Else
                    Hoja3.Range("E" & i) = Cells(celda.Row, ComboBox4.List(ComboBox4.ListIndex, 3))
                End If
                i = i + 1
            End If
        Next celda
    End With
    Set rango = Nothing
     'MsgBox ("Proceso finalizado")
End Sub

Prueba y me comentas

hoja

If OptionButton1.Value = True Then
       Hoja1.Select
        Set lahoja = Hoja1
        End If
        If OptionButton2.Value = True Then
       Hoja2.Select
        Set lahoja = Hoja2
        End If

y en esta linea de codigo le faltaba la variable lahoja y se la cambie..

For Each celda In lahoja.Range("A6:A" & Hoja1.Range("A65536").End(xlUp).Row)

el problema que tengo es que si estoy en la hoja1 y abro el userform y filtro con el el optionbutton2 que seria la hoja2 al cerrar el formulario me aparece la hoja2 y no la hoja1 en donde abri el userform y viceversa..

Que solucion le puedo dar a eso?

Hola Dam

Sabes que lo deje asi el codigo para seleccionar la hoja

If OptionButton1.Value = True Then
       Hoja1.Select
        Set lahoja = Hoja1
        End If
        If OptionButton2.Value = True Then
       Hoja2.Select
        Set lahoja = Hoja2
        End If

y en esta linea de codigo le faltaba la variable lahoja y se la cambie..

For Each celda In lahoja.Range("A6:A" & Hoja1.Range("A65536").End(xlUp).Row)

el problema que tengo es que si estoy en la hoja1 y abro el userform y filtro con el el optionbutton2 que seria la hoja2 al cerrar el formulario me aparece la hoja2 y no la hoja1 en donde abri el userform y viceversa..

Que solucion le puedo dar a eso?

Primero el código que te envié es este:

If OptionButton1 Then
    Set lahoja = Hoja1
Else
    Set lahoja = Hoja2
End If

Y agregaste esto: 

If OptionButton1.Value = True Then
    Hoja1.Select
    Set lahoja = Hoja1
End If
If OptionButton2.Value = True Then
    Hoja2.Select
    Set lahoja = Hoja2
End If

Cuando estás en la hoja1 y seleccionas el option2 le estás diciendo que se cambie a la hoja2 con esto Hoja2.Select.

También en la macro que te envié puse esto:

For Each celda In lahoja.Range("A6:A" & Hoja1.Range("A65536").End(xlUp).Row)

Y comentas que faltaba la variable, pero sí la puse lahoja.range(....

Entonces, cuando estables esto por ejemplo:

Set lahoja = Hoja1

No es necesario que actives la hoja1, puedes hacer uso de la hoja1, sin necesidad de cambiar a la hoja.

Ahora, como tienes 2 hojas, en donde sí hace falta poner lahoja es en las siguientes líneas, te anexo la macro completa:

Sub Filtro()
'Mod.Por.DAM
    Dim dStartDate  As Date
    Dim dEndDate    As Date
    Dim i           As Long
    Dim rango       As Range
    Dim celda       As Range
    Dim hj          As Object
    Application.EnableEvents = False
    Set hj = Hoja3
    hj.Range("B4:E" & hj.Range("B" & Rows.Count).End(xlUp).Row).ClearContents
    If OptionButton1 Then
        Set lahoja = Hoja1
    Else
        Set lahoja = Hoja2
    End If
    With Hoja3
        dStartDate = CDate(UserForm1.ComboBox2.Value)
        dEndDate = CDate(UserForm1.ComboBox3.Value)
        i = 4
        Hoja3.Range("C1") = ComboBox4.List(ComboBox4.ListIndex, 0)
        For Each celda In lahoja.Range("A6:A" & Hoja1.Range("A65536").End(xlUp).Row)
            If celda >= dStartDate And celda <= dEndDate Then
                Hoja3.Range("B" & i) = celda.Value
                Hoja3.Range("C" & i) = lahoja.Cells(celda.Row, ComboBox4.List(ComboBox4.ListIndex, 1))
                If ComboBox4.List(ComboBox4.ListIndex, 2) = "" Then
                    Hoja3.Range("D" & i) = ""
                Else
                    Hoja3.Range("D" & i) = lahoja.Cells(celda.Row, ComboBox4.List(ComboBox4.ListIndex, 2))
                End If
                If ComboBox4.List(ComboBox4.ListIndex, 3) = "" Then
                    Hoja3.Range("E" & i) = ""
                Else
                    Hoja3.Range("E" & i) = lahoja.Cells(celda.Row, ComboBox4.List(ComboBox4.ListIndex, 3))
                End If
                i = i + 1
            End If
        Next celda
    End With
    Set rango = Nothing
     'MsgBox ("Proceso finalizado")
End Sub

Estoy agregando lahoja en esta línea, por ejemplo:

Lahoja. Cells(celda. Row, ComboBox4. List(ComboBox4. ListIndex, 1))

Prueba y dime si tienes algún problema.

Muchas gracias Dam tenias razon !!

Ahora funciona bien

Disculpa las molestias ...

Nevamente gracias

Saludos

No es ninguna molestia.

Podrías valorar la respuesta.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas