Rutina SUB para insertar FECHA estática en base a condicionales en una tabla EXCEL
Necesitaría ayuda para crear una rutina sub que logre insertar una fecha estática en una columna de una tabla en base a unos condicionales que afectan a otras columnas de dicha tabla. El objetivo es que cuando un pedido esté cobrado o compensado se inserte la fecha en la columna K (Abonado)
Aquí detallo 2 posibles caminos para afrontar el problema. Cualquiera que lleve a reflejar la fecha de acuerdo a los supuestos me vale…
Opción 1…
Las columnas a las que afectarían los condicionales son…
- Columna K = Abonado (columna donde se debe insertar la fecha)
- Columna Q = Pedido
- Columna V = Resta (OJO… esta columna contiene una fórmula)
- Columna Y = Estado
- Columna J = **
- Columna AE = Modalidad
Los supuestos en los que NO deseo insertar fecha son los siguientes…
- Si importe pedido es = nada Y la resta es = 0… No queremos fecha
- …O Si importe pedido es >0 Y la resta es >0… No queremos fecha
- …O Si importe pedido es <0 Y la resta <0 Y el estado es = nada… No queremos fecha
- …O Si en la columna ** es = “U” Y la modalidad es = “*”… No queremos fecha
Nota… recordar que la columna RESTA presente en los condicionales 1, 2 y 3 contiene una fórmula y por tanto puede resultar un problema
… Para el resto de supuestos no recogidos arriba si debe aparecer la fecha estática teniendo en cuenta que en caso de modificación de cualquiera de las columnas (y siempre que se cumplan los requisitos para que se refleje la fecha) ésta no se modificará, pero si se dejan de cumplir los requisitos dicha fecha dejará de mostrarse hasta que nuevamente se cumplan los requisitos, en cuyo caso la fecha se actualizará al momento de cumplirlos.
En este punto un compañero ha aportado un código que adjunto a continuación y que puede resultar útil como punto de partida y aquí quiero agradecer a Dante Amor su ayuda prestada en este supuesto porque no habría llegado hasta donde he llegado sin su intervención… Por ello GRACIAS
'Pone la fecha en K, si escribe valor en Q, V, Y, J, AE
If Not Intersect(Target, Range("Q:Q,V:V,Y:Y,J:J,AE:AE")) Is Nothing Then
fila = Target.Row
If (Cells(fila, "Q").Value = "" And Cells(fila, "V").Value = 0) Or _
(Cells(fila, "Q").Value > 0 And Cells(fila, "V").Value > 0) Or _
(Cells(fila, "Q").Value < 0 And Cells(fila, "V").Value < 0 And Cells(fila, “Y”).Value = “”) Or _
(Cells(fila, "J").Value = "U" And Cells(fila, "AE").Value = "*") Then
Cells(fila, "K").Value = ""
Else
Cells(fila, "K").Value = Date
End If
End If
Opción 2…
La columna a la que afectaría los condicionales son…
- Columna K = Abonado (columna donde se debe insertar la fecha)
- Columna G = Status (OJO… esta columna contiene una fórmula en la que se pueden dar 5 posibles estados… “Pendiente”, “Factura”, “Liq. Global”, “Liquidada” o nada)
Nota… recordar que la columna STATUS contiene una fórmula y por tanto puede resultar un problema
Los supuestos en los que NO deseo visualizar la fecha son los siguientes…
- Si STATUS = nada
- …O Si STATUS = “Pendiente”
Los supuestos en los que SI deseo insertar fecha son los siguientes…
- Si STATUS = “Factura”
- …O Si STATUS = “Liq. Global”
- …O Si STATUS = “Liquidada”
Es en estos 3 supuestos donde si debe aparecer la fecha estática teniendo en cuenta que aunque el status cambie entre “Factura”, “Liq. Global” o “Liquidada”, la fecha no se modificará dado que los 3 supuestos son válidos, pero si la modificación implicara pasar a nada o “Pendiente”, dicha fecha dejará de mostrarse hasta que nuevamente el status fuera “Factura”, “Liq. Global” o “Liquidada”, en cuyo caso la fecha se actualizará al momento del cambio.
Para esta opción no se ha llegado a desarrollar código alguno y por lo tanto habría que partir de cero.
REPITO… cualquier de las 2 opciones me resultaría válida para el resultado deseado, pero en ambas opciones hay una columna que contiene una fórmula y desconozco cómo puede afectar a nivel código vba.
Espero haber sido claro en la explicación y agradecer de antemano a toda aquella persona que esté dispuesta a prestar ayuda su tiempo y dedicación que es mucho.