No puedo simplificar esta macro, me da error

Esta macro, me descuenta del dinero de caja lo que saco para pagar.
Tengo esta macro que me va perfecta:

Sheets("Estadistica Venta").Unprotect Password:="1"
Sheets("Estadistica Venta").Range("F72") = Sheets("Estadistica Venta"). Range("F72") - Range("P5")
Sheets("Estadistica Venta").Range("F72") = Sheets("Estadistica Venta"). Range("F72") - Range("P6")
Sheets("Estadistica Venta").Range("F72") = Sheets("Estadistica Venta"). Range("F72") - Range("P7")
Sheets("Estadistica Venta").Range("F72") = Sheets("Estadistica Venta"). Range("F72") - Range("P8")
Sheets("Estadistica Venta").Range("F72") = Sheets("Estadistica Venta"). Range("F72") - Range("P9")
Sheets("Estadistica Venta").Range("F72") = Sheets("Estadistica Venta"). Range("F72") - Range("P10")
Sheets("Estadistica Venta").Range("F72") = Sheets("Estadistica Venta"). Range("F72") - Range("P11")
Sheets("Estadistica Venta").Range("F72") = Sheets("Estadistica Venta"). Range("F72") - Range("P12")
Sheets("Estadistica Venta").Range("F72") = Sheets("Estadistica Venta"). Range("F72") - Range("P13")
Sheets("Estadistica Venta").Range("F72") = Sheets("Estadistica Venta"). Range("F72") - Range("P14")
Sheets("Estadistica Venta").Range("F72") = Sheets("Estadistica Venta"). Range("F72") - Range("P15")
Sheets("Estadistica Venta").Range("F72") = Sheets("Estadistica Venta"). Range("F72") - Range("P16")

Y necesiaria simplificarla por esta, pero me da error :

Sheets("Estadistica Venta").Unprotect Password:="1"
Sheets("Estadistica Venta").Range("F72") = Sheets("Estadistica Venta"). Range("F72") - Range("P5:P16")

A lo mejor no se puede

1 Respuesta

Respuesta
1

Si se puede. Para empezar utilicé la expresión :

With Sheets("Estadistica Venta")    para no tener que repetir tantas veces el nombre de la hoja.... luego se la reemplaza con el pto.

With Sheets("Estadistica Venta")
    sumita = Application.WorksheetFunction.Sum(.[P5:P16])
    .[F72] = .[F72] - sumita
End With

La idea es sumar primero en una variable el rango P5:P16 y luego restarlo de F72.

Hoy me he dado cuenta, que la había hecho mal

Porque necesito que del rango [P5:P16], solamente quiero que me agregue la cantidad de la celda que vario, no de las estáticas,

Lo había probado con una celda y me iba de fabula, pero al haber facturado hoy me he dado cuenta que coge todas las celdas y me interesaría solamente la celda que ejecuto.

Un saludo Elsa

¿Y cómo o cuándo se ejecutan esas instrucciones? ¿En qué macro se encuentran?

Gracias por contestar tan rápido

Esta así :


Private Sub Worksheet_Change(ByVal Target As Range)
'Por.Dante Amor
' RESTAR EN CAJA LO PAGADO
Sheets("Estadistica Venta").Unprotect Password:="1"
Sheets("Estadistica Venta").Range("F72") = Sheets("Estadistica Venta").Range("F72") - Range("P5")
Sheets("Estadistica Venta").Range("F72") = Sheets("Estadistica Venta").Range("F72") - Range("P6")
Sheets("Estadistica Venta").Range("F72") = Sheets("Estadistica Venta").Range("F72") - Range("P7")
Sheets("Estadistica Venta").Range("F72") = Sheets("Estadistica Venta").Range("F72") - Range("P8")
Sheets("Estadistica Venta").Range("F72") = Sheets("Estadistica Venta").Range("F72") - Range("P9")
Sheets("Estadistica Venta").Range("F72") = Sheets("Estadistica Venta").Range("F72") - Range("P10")
Sheets("Estadistica Venta").Range("F72") = Sheets("Estadistica Venta").Range("F72") - Range("P11")
Sheets("Estadistica Venta").Range("F72") = Sheets("Estadistica Venta").Range("F72") - Range("P12")
Sheets("Estadistica Venta").Range("F72") = Sheets("Estadistica Venta").Range("F72") - Range("P13")
Sheets("Estadistica Venta").Range("F72") = Sheets("Estadistica Venta").Range("F72") - Range("P14")
Sheets("Estadistica Venta").Range("F72") = Sheets("Estadistica Venta").Range("F72") - Range("P15")
Sheets("Estadistica Venta").Range("F72") = Sheets("Estadistica Venta").Range("F72") - Range("P16")
' FALCATA
If Not Intersect(Target, [C5:C36]) Is Nothing Then ' AGREGAR FECHA EN UNA COLUMNA DE COMPRA
If Target.Column = 3 Then
If Cells(Target.Row, "B") = "" Then
Cells(Target.Row, "B") = Date - 1
End If
End If
If Not Intersect(Target, [D5:D36]) Is Nothing Then ' AGREGAR FECHA EN UNA COLUMNA DE PAGO
If Target.Column = 4 Then
If Cells(Target.Row, "B") = "" Then
Cells(Target.Row, "B") = Date
End If
End If
End If
If Not Intersect(Target, [C5:C36]) Is Nothing Then ' AGREGAR CANTIDAD DE UNIDADES
Set h = Sheets("ControlVentaArticulo")
h.Select
u = h.Cells(88, Columns.Count).End(xlToLeft).Column + 1
f = 88
If u < Columns("E").Column Then
u = Columns("E").Column
End If
If u > Columns("V").Column Then
u = h.Cells(89, Columns.Count).End(xlToLeft).Column + 1
If u < Columns("E").Column Then
u = Columns("E").Column
End If
f = 89
End If
h.Cells(f, u).Select
End If
End If
' RIZZOLO
If Not Intersect(Target, [G5:G36]) Is Nothing Then ' AGREGAR FECHA EN UNA COLUMNA DE COMPRA
If Target.Column = 7 Then
If Cells(Target.Row, "F") = "" Then
Cells(Target.Row, "F") = Date - 1
End If
End If
If Not Intersect(Target, [H5:H36]) Is Nothing Then ' AGREGAR FECHA EN UNA COLUMNA DE PAGO
If Target.Column = 8 Then
If Cells(Target.Row, "F") = "" Then
Cells(Target.Row, "F") = Date
End If
End If
End If
Sheets("ControlVentaArticulo").Select
u = Sheets("ControlVentaArticulo").Cells(98, Columns.Count).End(xlToLeft).Column + 1
f = 98
If u < Columns("E").Column Then
u = Columns("E").Column
End If
Sheets("ControlVentaArticulo").Cells(f, u).Select
End If
' CRIS
If Not Intersect(Target, [K5:K36]) Is Nothing Then ' AGREGAR FECHA EN UNA COLUMNA DE COMPRA
If Target.Column = 11 Then
If Cells(Target.Row, "J") = "" Then
Cells(Target.Row, "J") = Date - 1
End If
End If
If Not Intersect(Target, [L5:L36]) Is Nothing Then ' AGREGAR FECHA EN UNA COLUMNA DE PAGO
If Target.Column = 12 Then
If Cells(Target.Row, "J") = "" Then
Cells(Target.Row, "J") = Date
End If
End If
End If
If Not Intersect(Target, [K5:K36]) Is Nothing Then ' AGREGAR CANTIDAD DE UNIDADES
Set h = Sheets("ControlVentaArticulo")
h.Select
u = h.Cells(83, Columns.Count).End(xlToLeft).Column + 1
f = 83
If u < Columns("E").Column Then
u = Columns("E").Column
End If
If u > Columns("V").Column Then
u = h.Cells(84, Columns.Count).End(xlToLeft).Column + 1
If u < Columns("E").Column Then
u = Columns("E").Column
End If
f = 84
End If
h.Cells(f, u).Select
End If
End If
' CARAMBA
If Not Intersect(Target, [O25:O36]) Is Nothing Then ' AGREGAR FECHA EN UNA COLUMNA
If Target.Column = 15 Then
If Cells(Target.Row, "N") = "" Then
Cells(Target.Row, "N") = Date - 1
End If
End If
If Not Intersect(Target, [L5:L36]) Is Nothing Then ' AGREGAR FECHA EN UNA COLUMNA DE PAGO
If Target.Column = 15 Then
If Cells(Target.Row, "N") = "" Then
Cells(Target.Row, "N") = Date
End If
End If
End If
If Not Intersect(Target, [L5:L36]) Is Nothing Then ' AGREGAR FECHA EN UNA COLUMNA DE PAGO
If Target.Column = 15 Then
If Cells(Target.Row, "N") = "" Then
Cells(Target.Row, "N") = Date
End If
End If
End If
Sheets("ControlVentaArticulo").Select
u = Sheets("ControlVentaArticulo").Cells(102, Columns.Count).End(xlToLeft).Column + 1
f = 102
If u < Columns("E").Column Then
u = Columns("E").Column
End If
Sheets("ControlVentaArticulo").Cells(f, u).Select
End If
End Sub

Otro saludo fuerte Elsa

Upsss, veo varias líneas innecesarias.

Dejo la parte de código par el caso Falcata con anotaciones EM. Luego debieras hacer lo mismo para Rizzolo y todos los casos que siguen. Las líneas que dicen 'no hace falta debes eliminarlas directamente junto con su End If.

Cuando la tengas arreglada envíamela nuevamente para ajustar el tema de la suma.

Private Sub Worksheet_Change(ByVal Target As Range)
'arreglada x Elsamatilde
' RESTAR EN CAJA LO PAGADO
With Sheets("Estadistica Venta")   'EM:para evitar escribir la hoja
    sumita = Application.WorksheetFunction.Sum(.[P5:P16])
    .[F72] = .[F72] - sumita
End With
' FALCATA
If Not Intersect(Target, [C5:C36]) Is Nothing Then ' AGREGAR FECHA EN UNA COLUMNA DE COMPRA
    'If Target.Column = 3 Then    'EM: no hace falta, siempre es 3 si el rango es C5:C36
    If Cells(Target.Row, "B") = "" Then
        Cells(Target.Row, "B") = Date - 1
    End If
    'End If
End If     'EM: estábamos analizando col C, ahora seguimos con D
If Not Intersect(Target, [D5:D36]) Is Nothing Then ' AGREGAR FECHA EN UNA COLUMNA DE PAGO
    'If Target.Column = 4 Then   'EM: no hace falta, siempre es 4 si el rango es D
    If Cells(Target.Row, "B") = "" Then
        Cells(Target.Row, "B") = Date
    End If
    'End If
End If
'EM: otra vez analizamos rango C5:C36 ???
If Not Intersect(Target, [C5:C36]) Is Nothing Then ' AGREGAR CANTIDAD DE UNIDADES
    Set h = Sheets("ControlVentaArticulo")
    h.Select
    u = h.Cells(88, Columns.Count).End(xlToLeft).Column + 1
    f = 88
    If u < Columns("E").Column Then
        u = Columns("E").Column
    End If
    If u > Columns("V").Column Then
        u = h.Cells(89, Columns.Count).End(xlToLeft).Column + 1
        If u < Columns("E").Column Then
            u = Columns("E").Column
        End If
        f = 89
    End If
    h.Cells(f, u).Select
End If

Veo que la col P no se actualiza con ingreso manual sino por fórmula, entonces dejame también escrita la fórmula aquí.

Sdos!

Pero Elsa no te entiendo.

Yo solo querria arreglar :

Sheets("Estadistica Venta").Unprotect Password:="1"
Sheets("Estadistica Venta").Range("F72") = Sheets("Estadistica Venta").Range("F72") - Range("P5")
Sheets("Estadistica Venta").Range("F72") = Sheets("Estadistica Venta").Range("F72") - Range("P6")
Sheets("Estadistica Venta").Range("F72") = Sheets("Estadistica Venta").Range("F72") - Range("P7")
Sheets("Estadistica Venta").Range("F72") = Sheets("Estadistica Venta").Range("F72") - Range("P8")
Sheets("Estadistica Venta").Range("F72") = Sheets("Estadistica Venta").Range("F72") - Range("P9")
Sheets("Estadistica Venta").Range("F72") = Sheets("Estadistica Venta").Range("F72") - Range("P10")
Sheets("Estadistica Venta").Range("F72") = Sheets("Estadistica Venta").Range("F72") - Range("P11")
Sheets("Estadistica Venta").Range("F72") = Sheets("Estadistica Venta").Range("F72") - Range("P12")
Sheets("Estadistica Venta").Range("F72") = Sheets("Estadistica Venta").Range("F72") - Range("P13")
Sheets("Estadistica Venta").Range("F72") = Sheets("Estadistica Venta").Range("F72") - Range("P14")
Sheets("Estadistica Venta").Range("F72") = Sheets("Estadistica Venta").Range("F72") - Range("P15")
Sheets("Estadistica Venta").Range("F72") = Sheets("Estadistica Venta").Range("F72") - Range("P16")

Que no me sumara o restara todas las celdas, sino solamente la que cambiara al escribir.

Lo demas de la macro me va de fabula.

Un saludo

Pensé que querías además simplificar la macro.

Pásame la fórmula de col P

Sdos!

Mira, te mando la foto de esta macro y veras que en la celda P12, no tengo nada y así en todas las celdas del rango, [P5:P16].
Solamente voy agregando la cantidad que voy entregando al proveedor y esta es una cantidad al mes.
Por eso quiero que me rebaje la cantidad que voy sacando de la caja, para que esta me cuadre el dinero.
Pero al poner esta fórmula, me coge todas las cantidades :

Sheets("Estadistica Venta").Unprotect Password:="1"
Sheets("Estadistica Venta").Range("F72") = Sheets("Estadistica Venta").Range("F72") - Range("P5")
Sheets("Estadistica Venta").Range("F72") = Sheets("Estadistica Venta").Range("F72") - Range("P6")
Sheets("Estadistica Venta").Range("F72") = Sheets("Estadistica Venta").Range("F72") - Range("P7")
Sheets("Estadistica Venta").Range("F72") = Sheets("Estadistica Venta").Range("F72") - Range("P8")
Sheets("Estadistica Venta").Range("F72") = Sheets("Estadistica Venta").Range("F72") - Range("P9")
Sheets("Estadistica Venta").Range("F72") = Sheets("Estadistica Venta").Range("F72") - Range("P10")
Sheets("Estadistica Venta").Range("F72") = Sheets("Estadistica Venta").Range("F72") - Range("P11")
Sheets("Estadistica Venta").Range("F72") = Sheets("Estadistica Venta").Range("F72") - Range("P12")
Sheets("Estadistica Venta").Range("F72") = Sheets("Estadistica Venta").Range("F72") - Range("P13")
Sheets("Estadistica Venta").Range("F72") = Sheets("Estadistica Venta").Range("F72") - Range("P14")
Sheets("Estadistica Venta").Range("F72") = Sheets("Estadistica Venta").Range("F72") - Range("P15")
Sheets("Estadistica Venta").Range("F72") = Sheets("Estadistica Venta").Range("F72") - Range("P16")

Por eso necesito, que en ese rango de celda, [P5:P16], me ponga solamente la cantidad que voy entregando mes a mes.
Un saludo Elsa

Se me olvido Mandarte la foto

Bien, si el pago es manual se controla como el resto de los rangos:

Private Sub Worksheet_Change(ByVal Target As Range)
'Por.Dante Amor
'----- EM: RESTAR EN CAJA LO PAGADO
If Not Intersect(Target, [P5:P36]) Is Nothing Then ' COL PAGO
    With Sheets("Estadistica Venta")
    .Unprotect Password:="1"
    .Range("F72") = .Range("F72") - Target.Value
    End With
End If
'-----Fin de pago----EM
' FALCATA
'aquí sigue el resto de tu código

No sé si faltaría quizás volver a proteger la hoja. Si es correcto antes del End With coloca:

       .Protect Password:="1"

Sdos!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas