Macro que copie y pegue en otra hoja, las filas que cumplan con dos condiciones: fecha y grupo de cliente.

Estoy enredada intentando crear una macro que me pida la fecha que deseo filtrar, y que de esas filas (correspondientes a la fecha seleccionada-columna A-) copie y pegue en la primer fila vacía de la otra hoja (hoja Ohn) SOLO las que sean del grupo Ohn (columna AD)

Muchísimas gracias de antemano!

Este es el código que intento usar:

'Userform preguntando fecha para filtrar, (no es necesario un Userform, pero fue lo unico que se me ocurrio).Sub Ohn()    UserForm1.Show vbModelessEnd Sub-----------------------------------------------'Al hacer click en el boton "OK" se ejecuta la siguiente macro:Private Sub CommandButton1_Click()  Application.ScreenUpdating = False    UserForm1.Hide    Dim ws As Worksheet    Dim aCell As Range    'Columns("A").Find(TextBox1.Value , Cells(Rows.Count, "A")).Select              If    Set aCell = .Columns(3).Find(What:=TextBox1.Value                         And .Columns(30).Find(What:="Ohn"), LookIn:=xlValues                      , _                    LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection                    :=xlNext, _                    MatchCase:=False, SearchFormat:=False)    ActiveRow.Copy                ActiveSheet.Next.Select                Worksheets("Ohn").Range("A65536").End(xlUp).Offset(1, 0).S                elect                Selection.PasteSpecial Paste:=xlPasteValues, Transpose:=Fa                lse            Else     MsgBox "No Ohn trades found for this date", , "Error"     End If  Application.ScreenUpdating = TrueEnd Sub

1 respuesta

Respuesta
1

No se si te pueda servir, utilice filtro avanzado, buscando un rango que define el filtro "C1:C2" que es el nombre de la columna en base de datos y la fecha a filtrar, la hoja "destino" seria la hoja donde deseas copiar la información filtrada, no fui capaz con ese ActiveSheet.next me genera error, por lo que definí el nombre de la hoja, puedes darle un nombre al criterio y llamarlo, bueno ya tu puedes mejorarlo

Sub Ohn()
Application.ScreenUpdating = False
Range("A1:A65536").AdvancedFilter Action:=xlFilterCopy, CriteriaRange:= _
ActiveSheet.Range("C1:C2"), CopyToRange:=Sheets("destino").Range("A1"), Unique:=False
End Sub

Link: https://www.dropbox.com/s/k24u8xitiyyu4hl/Ejercicio_Macro.xlsm?dl=0 

Hola Julián,

Muchas gracias por tu pronta respuesta. 

El filtro funciona excelente, pero necesito que al filtrar, copie y pegue en la hoja "destino" SÓLO las filas que cumplan con una cierta fecha y un cierto grupo de clientes: "Ohn", como modificarías tu código para que esto suceda?

Gracias otra vez,

Marcela.

Entiendo es decir, ¿qué filtre la fecha y en criterio ("Ohn") que esta en la columna AD? Bueno utiliza el mismo código solo que cambia el rango del filtro, incluso puedes poner varias fechas, o varios criterios de filtros, o incluso rangos de fecha

Sub Ohn()

ScreenUpdating = False

Range("A1:B65500").AdvancedFilter Action:=xlFilterCopy, CriteriaRange:= _

Range("C1:D2"), CopyToRange:=Sheets("destino").Range("A1"), Unique:=False

End Sub

Link: https://www.dropbox.com/s/k24u8xitiyyu4hl/Ejercicio_Macro.xlsm?dl=0 

No se si es eso lo que requieres, de todas formas quedo atento

Se me fue una parte mal en la macro anterior, se agrego la columna B para el filtro, ten en cuenta que la columna debe de llevar el mismo nombre en Base de datos o en la tabla de datos que tengas.

Sub Ohn()
Application.ScreenUpdating = False
Range("A1:B65500").AdvancedFilter Action:=xlFilterCopy, CriteriaRange:= _
ActiveSheet.Range("C1:D2"), CopyToRange:=Sheets("destino").Range("A1"), Unique:=False
End Sub

Gracias de nuevo Julián!

Tu macro me sirve, pero el código sigue siendo muy simple para lo que necesito hacer. Te adjunto un archivo ejemplo(sin macro) para que pruebes el código que escribí al principio de mi pregunta. Necesito que pegue las filas completas en la primer fila vacía de la hoja destino.

Mil gracias!

Marcela.

No pude ver el archivo, dice que lo moviste o eliminaste.

Tenes razon Julian, no me di cuenta. Disculpame, aca va de nuevo.  https://www.dropbox.com/s/2u8c8mmf1knjm64/SinMacro.xlsx?dl=0

Revisa si es lo que necesitas, no es el código más limpio, pero funciona bien, tampoco tiene muchas líneas

https://www.dropbox.com/s/0wrmy0pms3p8sf0/ConMacro.xlsm?dl=0 

Wow Julian! Funciona perfecto, muchisimas gracias!!

Una ultima pregunta, en tu código hay una hoja llamada "filtro", es necesario que el archivo donde voy a usar la macro (más grande que el que te adjunte), ¿tenga una hoja llamada filtro también? ¿O es solo en el código? no se si me explique :s 

Gracias de nuevo y disculpa tanta molestia. Me salvaste el día!

Sub filtroavanzado()Dim Fila As IntegerSheets("Ohn").Activate 'activamos la hoja para obtener la filaFila = Sheets("Ohn").Range("A" & Rows.Count).End(xlUp).Row + 1 'Buscando la última fila en blancoSheets("CF").Select 'seleccionamos para generar filtro avanzadoRange("A1:AG65500").AdvancedFilter Action:=xlFilterCopy, CriteriaRange:= _Sheets("filtro").Range("A1:B2"), CopyToRange:=Sheets("Ohn").Range("A" & Fila), Unique:=FalseSheets("Ohn").Select 'seleccionamos Ohn para eliminar rotulo de columna del filtroRange("A" & Fila).SelectSelection.EntireRow.DeleteSheets("CF").SelectEnd Sub

Si, como utilizamos un filtro avanzado, debe de existir en algún sitio el criterio del filtro, pero puede ser en la misma hoja donde tienes la base de datos mas grande, cree una hoja adicional con ese nombre para colocar los datos, pero ya tu puedes cambiarlo según tus necesidades, recuerda que si lo cambias, debes cambiar el sitio donde vayas a guardar los datos del formulario y también donde vaya a buscar los datos el filtro avanzado.

Me alegra que te haya servido.

Recuerda cerrar la pregunta.

Hola Julián,

Tuve un problema con el archivo en intente descargarlo otra vez pero dice que ha sido eliminado,¿podrías por favor subirlo otra vez? Muchas gracias y disculpa la molestia.

¡Gracias Julián! Te debo una.

Hola Julián,

Después de pasar el código al archivo donde lo voy a usar y modificar los nombres de las hojas y el rango del filtro avanzado, cuando corro la macro, me pide la fecha y el grupo, me dice "agregado exitosamente" pero no hay nada en la hoja Ohn.

Ya revisamos con otras dos personas, y el código es exactamente igual, solo con otro nombre de hoja y un rango un poco más aplio. ¿Tienes alguna sugerencia de por que pueda estar sucediendo esto?

Gracias de nuevo!

Pueden ser varios los motivos, ¿crees qué puedes enviarme una copia? Mi correo personal es [email protected], si quieres envíame solo uno o dos registros lo reviso y te lo reenvió nuevamente

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas