Mensaje de alerta cuando se superpone info en planilla de reserva hotelera

Adjunto imagen de una planilla con la que estoy trabajando el ingreso de reservas de un predio de cabañas de verano.
Estoy buscando una solución para cuando se superponen reservas.
No se si será posible generar un cuadro de mensaje de alerta y que las filas en cuestión se resalten de color, la fila que se debe resaltar es la que tenga la fecha de reserva más nueva, ese dato sería el que está en la columna C.
En la imagen se ve un ejemplo de lo que puede pasar. La reserva se pisa ya que hay dos personas que alquilan la misma habitación y el rango de fechas se superpone.

Me sugirieron usar este código: If fecha>= FechaIni and fecha <= FechaFin Then MsgBox "Ocupada"

Pero sinceramente no se como colocarlo, se que debo usarlo en VBA, pero esto es sólo una línea, no se si es solo esta o alguna más
Agradeceré su ayuda.
Atentamente

2 Respuestas

Respuesta
1

Te anticipo que de Excel no tengo ni idea. Los auténticos maestros son Dante y Elsa. Pero por si te puede dar una idea, en este caso en Access, si tengo el formulario Reservas y en un predio que ya está y escribo una fecha comprendida entre las fecha de otra reserva de ese mismo predio

Puedes ver que el cursor aún está en el control Entrada. Como la fecha que he escrito está comprendida entre otra fecha de entrada y salida del mismo predio, cuando pulse Enter

Al aceptar, el cursor se vuelve al control Entrada para que la modifique.

En caso de que fuera la Salida la que está comprendida entre la entrada y salida de otro registro del mismo predio

Cuando pulsar Enter( o el control Salida perdiera el enfoque)

Por último, vamos a suponer que pongo una fecha de entrada anterior a las reservas que hay y otra fecha de salida mayor a las reservas que hay. En este caso, las fechas intermedias, desde el 10/10/2022 hasta el 16/10/2022 ya estarían cogidas

Cuando escribiera la nueva fecha de salida y pulsara Enter, me aparecería ese mensaje. Al Aceptar el cursor se volvería al control Salida para que cambies las fechas.

En este caso, repito, en este caso yo uso como código

Private Sub Entrada_BeforeUpdate(Cancel As Integer)
If Entrada >= DLookup("entrada", "reservas", "predio='" & Me.Predio & "'") And Entrada <= DLookup("salida", "reservas", "predio='" & Me.Predio & "'") Then
MsgBox "No puede ser, esa fecha de ENTRADA, en el predio " & UCase(Predio) & " ya está cogida", vbOKOnly + vbExclamation, "Tendrá que dormir en la calle"
Cancel = True
End If
End Sub
Private Sub Salida_BeforeUpdate(Cancel As Integer)
If Salida >= DLookup("entrada", "reservas", "predio='" & Me.Predio & "'") And Salida <= DLookup("salida", "reservas", "predio='" & Me.Predio & "'") Then
MsgBox "No puede ser, esa fecha de SALIDA, en el predio " & UCase(Predio) & " ya está cogida", vbOKOnly + vbExclamation, "Que se busque otro hotel"
Cancel = True
End If
If DCount("*", "reservas", "entrada<=#" & Me.Entrada & "# and salida<=#" & Me.Salida.Text & "# and predio='" & Me.Predio & "'") Then
MsgBox "Imposible, hay fechas intermedias ya cogidas", vbOKOnly + vbInformation, "Tendrá que cambiar las fechas"
Cancel = True
End If
End Sub

Dicho todo esto, sigue mi consejo. Pregúntale a Dante o a Elsa.

¡Gracias!

Muchas gracias por su aporte

Voy a sugerir el uso de Access a mis superiores.

Atentamente.

CSI

No he querido decir nada para que no me insulten los expertos de Excel, pero, personalmente opino que cada cosa es para lo que fué diseñada. Tu puedes viajar con tu familia en un coche, pero alguien me dirá, también pueden viajar en la caja de un camión, etc. Excel es una magnífica hoja de cálculo y como tal fué diseñada( exactamente una copia descarada del Lotus1 2 3. lo mismo que Word una copia descarada de Word Perfect) para eso. Para gestión de datos se diseñó Access. Funciona como una biblioteca. Un campo es un libro con lo que tenga escrito. Un registro es una colección de campos(libros) relacionados por algo. La consultas es la señora de la biblioteca a la que preguntas donde puedo encontrar un libro que hable de la inmortalidad del cangrejo. Un formulario es una forma eficiente de colocar esos libros en las estanterías, agruparlos por temas, por índice,... y por último un informe es el trabajo de fin de curso que has hecho consultando esos libros y que tienes que presentar.

Después de todas estas bromas, es cierto, te aconsejaría que te pasases a Access.

Respuesta
2

Pon el siguiente código en los eventos de tu hoja:

Private Sub Worksheet_Change(ByVal Target As Range)
  If Target.Count > 1 Then Exit Sub
  If Target.Value = "" Then Exit Sub
  If Not Intersect(Target, Range("C:C, D:D, M:M")) Is Nothing Then
    Dim j As Long, i As Long
    j = Target.Row
    If Range("C" & j).Value <> "" And Range("D" & j).Value <> "" And Range("M" & j).Value <> "" Then
      For i = 1 To Range("C" & Rows.Count).End(3).Row
        If i <> j Then
          If Range("M" & i).Value = Range("M" & j).Value Then
            If Range("C" & i).Value <= Range("C" & j).Value And _
               Range("D" & i).Value >= Range("C" & j).Value Or _
               Range("C" & i).Value <= Range("D" & j).Value And _
               Range("D" & i).Value >= Range("D" & j).Value Then
              MsgBox "La reserva para la habitación " & Range("M" & j).Value & vbCr & _
                     "ya tiene una reservación con el No: " & Range("A" & i).Value & vbCr & _
                     "Debe corregir", vbCritical, "Tutoriales Excel y Macros"
              Application.EnableEvents = False
              With Range("C" & j)
                .Value = ""
                .Resize(1, 13).Interior.Color = vbYellow
                .Select
              End With
              Application.EnableEvents = True
            End If
          End If
        End If
      Next
    End If
  End If
End Sub

Sigue las Instrucciones para poner la macro en los eventos de worksheet

  1. Abre tu libro de excel
  2. Para abrir Vba-macros y poder pegar la macro, Presiona Alt + F11
  3. Del lado izquierdo dice: VBAProject, abajo dale doble click a worksheet(tu hoja)
  4. En el panel del lado derecho copia la macro

Funciona de la siguiente manera.

Cuando captures las fechas de reserva y el nombre de la habitación, columnas C, D y M respectivamente, la macro se activará y revisará si ya existe una reserva con la fecha de la reserva. Si ya existe, entonces te envía un mensaje de error para que corrijas la fecha.


Te invito a suscribirte a mi canal de youtube, para conocer más sobre excel y macros:

¡Gracias!

Desde ya muy agradecido por el aporte!

Atentamente.

CSI

Dante buenas noches

Una consulta sobre el código anterior

Me he percatado de un error y quisiera saber como resolverlo

Pongo el ejemplo

En este caso NO debería aparecer el mensaje ya que, la reserva 2587 tiene el periodo 01/11 al 10/11 y la 24879 desde 12/11 al 19/11, por lo que no se superponen, entiendo que está tomando la fecha en que se hizo la reserva. Si yo cambio la fecha de la reserva no se muestra el mensaje. Pero va pasar que puedo tener varias reservas en un mismo día para el mismo complejo, misma habitación pero distinto rango, entonces no debería mostrarse el mensaje.

El mensaje debería salir cuando las fechas del IN y del OUT cuando el rango de fechas se repite en el mismo predio y habitación o coinciden fechas intermedias por ej:

reserva 2587: in1/11 - out 10/11

reserva 8799: in 5/11 - out 12/11

Desde ya muchas gracias

Atte

CSI

La petición es para validar las fechas de la reserva, columnas C y D.

Buen día Dante

Tal vez se interpreto mal la imagen inicial, pero lo que se debe validar es las columnas del in y del out teniendo en cuenta la fecha de la reserva.

Igualmente gracias por responder

Atentamente

Esto está en tu pregunta inicial:

No se si será posible generar un cuadro de mensaje de alerta y que las filas en cuestión se resalten de color, la fila que se debe resaltar es la que tenga la fecha de reserva más nueva, ese dato sería el que está en la columna C.

Cambia en la macro donde encuentres "C" y "D" por las columnas correctas, en tu imagen no se ven las columnas ni las filas, es difícil saber en dónde están las columnas correctas.

Prueba y me comentas.

¡Gracias! Dante

Entiendo que una vez que se detecta la reserva superpuesta se borra el contenido de la celda que determine como referencia, en la macro que usted me facilitó los datos que se borraban eran los de la celda B. He modificado el código según su respuesta anterior.

Como sería la modificación a realizar si necesito que se borre el rango desde la columna I a la M de la fila en que se detecte la superposición.

Slds

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas