Visual Basic - CREAR UN CONTROL DE CUENTAS POR COBRAR

Life is soft - evento anual de software empresarial
 
Vista:

CREAR UN CONTROL DE CUENTAS POR COBRAR

Publicado por Wendy (1 intervención) el 01/02/2019 22:24:43
Hola! tengo una base datos de registro de ventas (facturas). Necesito filtrar las facturas que se encuentran pendientes de cobro (para esto tengo una columna llamada "Estado de factura") y enviarlas a una nueva hoja llamada "Cuentas por Cobrar", pero que solo haya un registro por factura que sume el monto total, ya que en la BD existe un registro por cada producto dentro de la factura. Así mismo quiero actualizar esta lista, pero que solo se agreguen las facturas nuevas que no están en "Cuentas por Cobrar".

Hasta el momento solo he podido filtrar las facturas pendientes.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
Sub transferirDatosOtraHoja11()
    Dim FECHA As Date
    Dim FACTURA As String
    Dim RUC As String
    Dim RAZON As String
    Dim IMPORTE As String
 
    Dim ultimaFila As Long
    Dim ultimaFilaCtas As Long
    Dim cont As Long
    Dim palabraBusqueda As String
 
    palabraBusqueda = Sheets("CUENTASxCobrar").Cells(1, 5)
    palabraBusqueda = "*" & palabraBusqueda & "*"
 
    ultimaFila = Sheets("Ventas2019").Range("A" & Rows.Count).End(xlUp).Row
 
    If ultimaFila < 2 Then
        Exit Sub
    End If
 
    For cont = 4 To ultimaFila
        If Sheets("Ventas2019").Cells(cont, 11) Like palabraBusqueda Then
            FECHA = Sheets("Ventas2019").Cells(cont, 2)
            FACTURA = Sheets("Ventas2019").Cells(cont, 3)
            RUC = Sheets("Ventas2019").Cells(cont, 5)
            RAZON = Sheets("Ventas2019").Cells(cont, 6)
            IMPORTE = Sheets("Ventas2019").Cells(cont, 10)
 
            ultimaFilaCtas = Sheets("CUENTASxCobrar").Range("A" & Rows.Count).End(xlUp).Row
            Sheets("CUENTASxCobrar").Cells(ultimaFilaCtas + 1, 1) = FECHA
            Sheets("CUENTASxCobrar").Cells(ultimaFilaCtas + 1, 2) = FACTURA
            Sheets("CUENTASxCobrar").Cells(ultimaFilaCtas + 1, 3) = RUC
            Sheets("CUENTASxCobrar").Cells(ultimaFilaCtas + 1, 4) = RAZON
            Sheets("CUENTASxCobrar").Cells(ultimaFilaCtas + 1, 5) = IMPORTE
        End If
    Next cont
 
    ultimaFilaCtas = Sheets("CUENTASxCobrar").Range("A" & Rows.Count).End(xlUp).Row
    With Sheets("CUENTASxCobrar").Range("A6:E" & ultimaFilaCtas).Font
        .Name = "Arial"
        .Size = 10
    End With
 
    MsgBox "Proceso terminado", vbInformation, "Resultado"
 
End Sub


Agradecería mucho me pudiesen ayudar :)
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Antoni Masana
Val: 1.094
Bronce
Ha mantenido su posición en Visual Basic (en relación al último mes)
Gráfica de Visual Basic

CREAR UN CONTROL DE CUENTAS POR COBRAR

Publicado por Antoni Masana (391 intervenciones) el 04/02/2019 06:47:10
Hay varios cambios para hacer lo que deseas:

Primero la hoja destino: "CUENTASxCobrar" tienes que limpiarla antes de copiar las nuevas facturas, de lo contrario al ejecutar por segunda vez la macro duplicada los datos.

Necesitas un contador para la segunda hoja que inicialmente vale 2 (si la cabecera es una línea) .

¿por que no he de utilizar esto:?
1
Sheets("CUENTASxCobrar").Range("A" & Rows.Count).End(xlUp).Row

Por que si antes de limpiar tenias 10 lineas con datos, después de borrarlas Excel cree que sigues teniendo 10 líneas con datos.

Una variable que se llame FacturaAnterior Antes del For estara vacia, despues de leer la primera linea de Ventas comparamos con la fatura anterior si es diferente añadimos nueva línea en el destino e igualamos FacturaAnterior = Factura si es igual sumamos Importes en destino.

Bueno con esto ya tienes para estar un rato entretenido.

Saludos.
\\//_
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar