Cambiar macro con aviso de vencimientos

Tengo una macro que me avisa si la fecha de la columna 'I' es igual o menor al día de hoy, pero quisiera cambiarle unas cositas.

Primero que nada que mire la columna 'K' y si dice "SI" que no haga nada (que no evalúe si la fecha es menor mayor ni nada). Y lo segundo seria si se puede hacer que si ninguna fecha es menor o igual (o si lo es, pero en la columna K dice "SI") que arroje igual un mensaje pero diciendo "no hay vencimientos" o algo por el estilo.

¿Es esto posible?

Les agradezco de antemano! Acá dejo la macro:

Respuesta
1

Hombre no esta difícil, pero cuando comencé a hacer la macro me di cuenta de que no tiene mucho sentido. En primer lugar tienes una incongruencia en tu pregunta al decir:

Si dice "SI" que no haga nada.

Pero luego mas abajo dices:

Si dice "SI" que arroje un mensaje.

¿A qué te refieres entonces con que no haga nada? Lanzar un mensaje es hacer algo.

Puedes elaborar de nuevo la idea

Otra cosa, si en el caso de que hubieran varios registros con "SI" el mensaje "Sin vencimientos" se mostraría por cada uno, estarías dando click al botón aceptar por un buen rato si tuvieras muchos registros. No parece muy practico. De todas formas no sé como esta estructurada tu hoja, pero me vino a la mente esa idea.

No tengo el Excel a mano, pero la columna QUE dice "cancela plazo?" y tiene una validación de datos donde puede poner: SI, NO, o que quede vacío.

La idea sería que ignore esas filas por completo y luego si no hay fechas vencidas largue 1 solo cartel.

La columna "K" (le di aceptar a corregir los errores ortográficos y no vi eso) 

Hmmm fíjate si es algo así lo que deseas hacer:

VIDEO DEMO

Si te gusta esa forma, este seria el código:

Sub Test()
Dim Vencidos As Integer, i As Integer
Dim VenList() As Integer
Dim uF As Long
Dim rCell As Range, rRng As Range
uF = Range("I" & Rows.Count).End(xlUp).Row
Set rRng = Range("I3:I" & uF)
Dim DisplayArr As String
Dim FndMsg As String
For Each rCell In rRng.Cells
    If rCell.Offset(0, 2).Value <> "SI" Then
        If rCell.Value <= Date Then
            ReDim Preserve VenList(Vencidos)
            VenList(Vencidos) = rCell.Row
            Vencidos = Vencidos + 1
        End If
    End If
Next rCell
If Vencidos > 0 Then
    For i = LBound(VenList) To UBound(VenList)
        DisplayArr = DisplayArr & "  " & VenList(i)
    Next i
    FndMsg = "Se encontraron " & Vencidos & " registros vencidos en las filas:"
    MsgBox FndMsg & DisplayArr, vbExclamation, "Vencimiento encontrado"
Else
    MsgBox "No se encontró ningun registro vencido.", vbInformation, "Sin vencimientos"
End If
End Sub

Me dejas saber si es eso lo que necesitas.

Hola, lo de la columna K no estaría funcionando, porque me dice que hay vencimientos y tengo toda la columna con "si" 

Igualmente te paso la macro que tenia a ver si se entiende un poco mejor lo que quiero:

Private Sub Workbook_Open()
Worksheets("Carga Datos").Select
fila = 3
Do While Not IsEmpty(Cells(fila, "I"))
If Cells(fila, "K").Value <> "SI" Then
    If Cells(fila, "I") <= Date Then
    x = MsgBox("acá sale un cartel que no puedo subir porque me da error")
    End If
End If
fila = fila + 1
Loop
End Sub

Me sale un cartel por cada vencimiento, pero si se cancelo el plazo sigue igual. 

Ya, lo que pasa es que tienes escrito "si" y en realidad "si" no es lo mismo que "SI". Fue mi error al usar el tipo de comparación en la línea:

If rCell.Offset(0, 2).Value <> "SI" Then

Para arreglarlos, substituye esa linea con esta:

If StrComp(rCell.Offset(0, 2).Value, "si", 1) <> 0 Then

Esa comparación ignora mayúsculas y minúsculas.

Andy

¡Gracias! Funciona perfecto, pero estoy buscando que salga un cartel por cada vencimiento encontrado. Te pego una imagen del código del 

MsgBox =

ya que no lo puedo subir a la pagina porque me da error. 

Cada vez que encuentra un vencimiento sale un cartel que informa sobre la dirección, localidad, matriculado a cargo y el teléfono. Le das aceptar y sale el siguiente cartel con el siguiente vencimiento y así. 

Necesitaría adaptar eso a la macro que me pasaste y no me esta saliendo :(

El código es mas corto entonces. Seria así:

Sub Test()
Dim Vencidos As Integer, uF As Long
Dim rCell As Range, rRng As Range
uF = Range("I" & Rows.Count).End(xlUp).Row
Set rRng = Range("I3:I" & uF)
For Each rCell In rRng.Cells
    If StrComp(rCell.Offset(0, 2).Value, "si", 1) <> 0 Then
        If rCell.Value <= Date Then
            MsgBox "Aquí coloca tu MsgBox"
            Vencidos = Vencidos + 1
        End If
    End If
Next rCell
If Vencidos = 0 Then
    MsgBox "No se encontró ningun registro vencido.", vbInformation, "Sin vencimientos"
End If
End Sub

Andy

Estaba intentando darte unos consejos pero da error. Parece que este foro detecta palabras que no le gusta pero no te avisa cual es. De todas formas aqui esta en modo de imagen.

Andy

¡Gracias! perdón por tantas idas y vueltas! eso de que el foro no me dejaba subir los caracteres que no le gustaban fue peor. 

Ahora quedo funcionando tal como lo quería. Gracias de nuevo! 

Saludos!

1 respuesta más de otro experto

Respuesta
1

Perdón, pero tengo que dejarla así porque no me deja subir la pregunta sino (no se porque):

Private Sub Workbook_Open()

Worksheets("Carga Datos").Select

fila = 3

Do While Not IsEmpty(Cells(fila, "I"))

If Cells(fila, "I") <= Date Then

x = MsgBox("Hoy balblaba")

End If

fila = fila + 1

Loop

End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas