Toda esta introducción viene a cuento de que una de las rutinas que tuve que desarrollar para el nuevo modelo, que estaré publicando en breve, se basa en filtrar las filas de la base de datos y copiarlas a otra hoja (lo hoja que contiene la copia de la factura).
En esta nota mostraré dos métodos eficientes para hacerlo. Como ejemplo utilizaremos los datos de ventas de la base de datos Northwind
Dado que los métodos de Excel, como Autofiltro, suelen ser más eficientes que el código que podamos escribir, podemos grabar las acciones y luego mejorar el código reemplazando, por ejemplo, las referencias a rangos por variables.
Supongamos que queremos copiar a otra hoja todas las ventas a la Argentina. Después de aplicar Autofiltro, grabamos las acciones para el copiado obteniendo este código
Sub Macro1()
'
Range("A1").Select
Range(Selection, Selection.End(xlToRight)).Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
Sheets("Hoja2").Select
ActiveSheet.Paste
End Sub
Hacemos dos mejoras a este código
- usamos la propiedad CurrentRegion de Range en lugar de Selection.End(xlToRight) y Selection.End(xlDown),
- eliminamos los Select abreviando el código
Sub Macro2()
'
Selection.CurrentRegion.Copy
Sheets("Hoja2").Paste
End Sub
Pero existe una posibildad más sencillla usando AutoFilter.Range
Sub Macro3()
ActiveSheet.AutoFilter.Range.Copy
Sheets("Hoja2").Paste
End Sub
La ventaja de usar AutoFilter.Range es que funciona aún si la celda activa no pertenece a la tabla filtrada.
Será que me servirá para copiar la factura a otra hoja?, es decir;
ResponderBorrarRelleno la factura en determinadas celdas, digamos que en la celda
C7 el RIF/CI del cliente
C8 El nombre Cliente
C9 Dirección
C11 Telf.
E11 Fecha
C14 hasta C23 Descripción Producto
E14 Hasta E23 cantidad Precio
F14 hasta F23 Valor Total por cantidad de producto
F26 IVA y
F27 Total
Esto lineal, digamos que en una línea un producto, mas líneas si se trata del mismo cliente pero con productos diferentes en la misma fecha.
Para nueva factura sea dl mismo cliente sea de otro, dejar una línea en blanco
Será posible?
Así como esstá planteado tu ejemplo la respuesta es no. Tendrías que tener una base de datos/tabla, donde tenés una fila para cada producto en la factura. Si tenés un poco de papciencia, en los próximos días estaré publicando un modelo de factura que maneja una base de datos, donde uso esta técnica.
ResponderBorrar