Macro Excel para copiar datos de una hoja a otra con una condición

Tengo una hoja llamada PanelPrincipal, y en la celda "C12" tengo un dato, por ejemplo "162608".

Luego tengo otra hoja llamada DatosFacturas. Quiero que mediante un botón en la hoja PanelPrincipal me copie la hoja DatosFacturas en otra hoja llamada FacturaCalcular teniendo en cuenta que solo debe copiar los registros que en la columna "F" de DatosFacturas coincidan con la celda "C12" de la hoja PanelPrincipal.

Copiar y pegar una hoja se hacerlo pero sin condiciones. Se me ocurre hacer un bucle For Next que recorra toda la hoja pero creo que sería muy lento ya que hay muchas filas a revisar.

¿Sería posible?

1

1 respuesta

Respuesta
1

Para hacerlo más rápido puede ser con el código de un filtro avanzado, para ello necesito saber si en la hoja "DatosFacturas" tienes encabezado y en qué fila están. También necesito saber en qué fila de "FacturaCalcular" quieres pegar los datos.

Mejor envíame tu archivo con datos de ejemplo.

Mi correo [email protected]

En el asunto del correo escribe tu nombre de usuario “Moises Llaveria Cuelliga

¡Gracias! Te lo he enviado.

Moisés. 

Hola Dante.

He estado buscando información e intentado adaptar a mi programa códigos y al final con este código me funciona. No se si se puede acortar o ya lo ves bien así. 

Private Sub CalcularOTSolred_Click()
Application.ScreenUpdating = False
Dim facturafiltro
Set x1 = Sheets("PanelSOLRED")
Set x2 = Sheets("Solred_1281")
Set x3 = Sheets("CalculoOTSolred")
x1.Select
facturafiltro = x1.ListFacturasSOLRED 'el valor a filtar lo cogemos del listbox de facturas
x3.Select
s1 = x3.Range("A65536").End(xlUp).Row
x3.Range("A1:AA" & s1).Select
Selection.ClearContents
'filtramos segun el valor del listbox de facturas
x2.Select
x2.Range("F1").Select
Selection.AutoFilter
Selection.AutoFilter Field:=6, Criteria1:=facturafiltro, Operator:=xlAnd
'ahora pegamos el rango filtrado en la hoja CalculoOTSolred
x2.Range(x2.Range("a1"), x2.Range("a1").End(xlDown)).Select
x2.Range(Selection, Selection.Offset(, 16)).Select
Selection.Copy Destination:=Worksheets("CalculoOTSolred").Cells(1, 1)
'desactivamos todos los filtros del autofiltro
x2.Select
If ActiveSheet.FilterMode Then ActiveSheet.ShowAllData
If ActiveSheet.AutoFilterMode Then ActiveSheet.AutoFilterMode = 0
x1.Select 'volvemos a la hoja PanelSOLRED
End Sub

¿que tal te parece?

Moisés.

Lo importante es que te funcione y el tiempo no sea mucho.

Podría acortarse así:

Private Sub CalcularOTSolred_Click()
    Application.ScreenUpdating = False
    Set x1 = Sheets("PanelSOLRED")
    Set x2 = Sheets("Solred_1281")
    Set x3 = Sheets("CalculoOTSolred")
    x3.Cells.ClearContents
    x2.Range("F1").AutoFilter Field:=6, Criteria1:=x1.ListFacturasSOLRED            'filtra según el valor del listbox
    x2.Range("A1:Q" & x2.Range("F" & Rows.Count).End(xlUp).Row).Copy x3.Cells(1, 1) 'copiar el rango filtrado y lo pega en CalculoOTSolred
    If x2.AutoFilterMode Then x2.AutoFilterMode = 0                                 'desactivamos todos los filtros del autofiltro
End Sub

sal u dos

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas