Factura en Excel Parte 2 – Macro VBA para guardar detalle de facturas y consecutivo

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.

Usando una macro VBA guardamos el detalle de cada factura en otra hoja.

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].

. Fórmula matricial para detectar la última celda con valores que es la última factura guardada.

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.

Tenemos el consecutivo de la factura siempre actualizado.

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.

Insertamos un rectángulo y le asignamos la macro GuardarFactura.

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

Descargar el 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.

FACTURA EN EXCEL PARTE 3

You may also like...