Factura en Excel Parte 2 – Macro VBA para guardar detalle de facturas y consecutivo
PREVIO: FACTURA EN EXCEL PARTE 1
En esta segunda entrega de nuestro Proyecto de Factura en Excel haremos uso de una macro VBA que nos servirá para guardar los datos de la factura en la hoja llamada Detalle de facturas. Asimismo tendremos una fórmula que nos devolverá el último número de factura registrado el cual nos servirá para tener un consecutivo de facturas.
Hoja Detalle de facturas
En la hoja llamada Detalle de facturas vamos a guardar los datos de cada factura, los cuales se guardará con la macro que desarrollamos. Los datos que se guardarán son:
-
Fecha. Fecha de la factura.
-
Consecutivo. El número de la factura.
-
Factura a. El cliente al cual se generará la factura.
-
Código. Código del producto.
-
Descripción. La descripción del producto.
-
Cantidad. El número de unidades vendidas.
-
Importe. La multiplicación de la cantidad de unidades vendidas por el precio unitario del producto.
Figura 1. Usando una macro VBA guardamos el detalle de cada factura en otra hoja.
Es importante considerar que en la hoja Detalle de facturas guardaremos tantas líneas como productos facturados. Por ejemplo, si de la factura 2 se vendieron dos productos, entonces se guardarán dos líneas con la misma factura, pero cada línea será un producto. De esa manera será más fácil realizar Reportes y Tablas dinámicas donde analicemos ventas por Fecha, Cliente, Producto, etc..
Ver video Factura en Excel Parte 2
Suscríbete al canal de EXCELeINFO en YouTube para aprender más de Excel y macros.
Consecutivo
Al momento de guardar los datos de una factura, en la hoja Detalle de facturas, en la celda I1 tendremos una fórmula que nos detecta la última factura guardada en la columna CONSECUTIVO. La fórmula es:
=DESREF(B1,CONTARA(A:A)-1,0,CONTARA(A:A),1)
La fórmula anterior es matricial por lo que debes usar la combinación de teclas [Control] + [Shift] + [Enter].
Figura 2. Fórmula matricial para detectar la última celda con valores que es la última factura guardada.
En la hoja Factura, en la celda E4 tendremos una fórmula que simplemente realiza una suma de la última factura guardada más 1, y así siempre tendremos un consecutivo de factura automático.
Figura 3. Tenemos el consecutivo de la factura siempre actualizado.
Botón Guardar
Para mandar llamar a la macro insertaremos un objeto de tipo rectángulo que tendrá la etiqueta Guardar:
-
Nos dirigimos a la pestaña Insertar > Ilustraciones > Formas > Rectángulo.
-
Damos clic derecho al rectángulo y elegimos Modificar texto. Ingresamos Guardar.
-
Damos clic derecho y elegimos Asignar macro.
-
Elegimos la macro GuardarFactura.
-
Aceptar.
Figura 4. Insertamos un rectángulo y le asignamos la macro GuardarFactura.
Código VBA de la macro
La macro se llamará GuardarFactura y debe estar almacenada en un Módulo normal.
Option Explicit 'EXCELeINFO 'MVP Sergio Alejandro Campos 'http://www.exceleinfo.com 'https://www.youtube.com/user/sergioacamposh 'http://blogs.itpro.es/exceleinfo Sub GuardarFactura() Dim NombreHoja As String Dim HojaDestino As Range Dim NuevaFila As Integer Dim FilasFactura As Integer Dim i As Integer Dim j As Integer Dim NumFactura As Integer NombreHoja = "Detalle de facturas" FilasFactura = Application.WorksheetFunction.CountA(Range("Factura[CÓDIGO]")) NumFactura = ThisWorkbook.Sheets("Factura").Range("E4").Value With ThisWorkbook.Sheets(NombreHoja) For i = 1 To FilasFactura Set HojaDestino = ThisWorkbook.Sheets(NombreHoja).Range("A1").CurrentRegion NuevaFila = HojaDestino.Rows.Count + 1 .Cells(NuevaFila, 1).Value = Date .Cells(NuevaFila, 2).Value = NumFactura .Cells(NuevaFila, 3).Value = Range("valCliente").Value For j = 1 To 4 .Cells(NuevaFila, j + 3).Value = ThisWorkbook.Sheets("Factura").Cells(12 + i, 1 + j) Next j Next i End With MsgBox "Alta exitosa", vbInformation, "EXCELeINFO" End Sub
Descarga el archivo de ejemplo
Factura en Excel Parte 2 – Guardar detalle de facturas – EXCELeINFO.zip
Si te gustó este tutorial por favor regístrate en nuestra Lista de correo y Suscríbete a nuestro canal de YouTube para que estés siempre enterado de lo nuevo que publicamos.