Vencimiento por fechas automatizar celda de al lado

Seguro que para vosotros es muy sencillo, pero para los que estamos empezando a hacer nuestros primeros macros es algo complicado.

Yo tengo en un libro en cada una de las hojas el macro:

[code]

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim rCell As Range
    Dim rChange As Range
    Set rChange = Intersect(Target, Range("F1:F55"))
    If Not rChange Is Nothing Then
    For Each rCell In rChange
    If rCell > "" Or rCell < "" Then
    Application.EnableEvents = False
       Target.Offset(, 1) = Date
    Application.EnableEvents = True
       With rCell.Offset(, 1)
       End With
        Else
        rCell.Offset(, 1).Clear
        End If
        Next
    End If
End Sub

[/code]
En el cual en la columna F entre el rango F1 y F55 cuando yo ponga cualquier cantidad,, en la columna de al lado "ó sea la G" se pondrá automáticamente la fecha "Date". Lo hace perfecto, pero si en cualquier celda de la columna F pongo la formula siguiente "=SI('Gastos FIJOS'!A1 >=FECHA(2015;2;2);-100;"")", quiere decirse que cuando llegue esa fecha que esta representada en la hoja"Gastos FIJOS" en la celda A1, osea (2015;2;2), automáticamente en la celda que puse la formula pondrá "-100", sin embargo en la columna G que corresponde no pone nada, ó sea no pone "Date", el dato de la fecha.
Que debería poner mas en el macro para que cuando llegue esa fecha en la columna G ponga el dato de la fecha.

Por otro lado el preguntaros si este mismo macro donde se podría poner para que hiciera todo esto en todo el libro, porque ahora lo tengo puesto en cada una de las hojas.

Respuesta
1

El tema es que tu macro está en un evento que se activa cuando cambia el valor de la celda (que está bien), pero la fórmula que tenés no está cambiando, sino que lo que puede llegar a cambiar es el resultado de la evaluación. Lo que deberías hacer es agregar una consulta similar a la que haces de consulta de fecha y poner la fecha que querés, solo que tendrías que definir exactamente en que celda se va a evaluar. Te dejo una posible solución de modificación del evento que pusiste más arriba:

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim rCell As Range
    Dim rChange As Range
'Acá está lo específico de la celda, yo voy a asumir que esa validación será en la celda F1 y el resultado quedará en G1
If Target.Address = "$F$1" Then
 If Range("A1") >= #2/2/2015# Then
     Range("G1").Value = Date
 End If
End IF
'y acá sigue tu código...
    Set rChange = Intersect(Target, Range("F1:F55"))
    If Not rChange Is Nothing Then
    For Each rCell In rChange
    If rCell <> "" Then
    Application.EnableEvents = False
       Target.Offset(, 1) = Date
    Application.EnableEvents = True
       With rCell.Offset(, 1)
       End With
        Else
        rCell.Offset(, 1).Clear
        End If
        Next
    End If
End Sub

Por otro lado, si querés ejecutar exactamente lo mismo en todo el libro, entonces usa el siguiente evento (que debes poner en el objeto "ThisWorkBook")

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
'Acá va tu código, pero tendrás que tener cuidado y donde ponías fórmulas, vas a tener que hacer referencia también a la hoja del archivo, con el objeto Sh, 

...

End Sub

En concreoto, si antes decías

Range("A1").Value = 1

Ahora deberías decir

Sh.Range("A1").Value = 1

Saludos y espero te ayude a resolver el problema

¡Gracias! Lo Probaremos.

Saludos

Se me ocurre otra forma pero no se si podría ser:

Por ejemplo en F7 ponemos la formula:"=SI(A1 >=FECHA(2015;2;2);-100;"")" ,y en esta misma formula con un doble valor verdadero poner en la celda G7 el Date,.No se si podría ser pero no se ponerla para probar

Gracias

Un Saludo

El tema con "tu" solución es que todos los días se va a estar recalculando la celda G7

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas