Como se puede hacer para que salga un mensaje al cumplir una condición

Tengo varios grupos de personas en una hoja que trabajan en diferentes departamentos y en cada uno se puede ir un cierto numero de personas. Se puede crear una macro para que cuando yo grabe las ausencias y supere ese numero me salga un mensaje diciendo ... “existe exceso de cupo”.?

1 respuesta

Respuesta
1

Reviso mañana el archivo y te envío una respuesta

Primero debes tener homologada la información para poder utilizar una macro

Prueba las macro para visualizar los grupos.

Ahora comprueba que tienes todos los nombres únicos en ambas hojas.

Que todos los nombres de la hoja unica están en hoja nombres

Que los grupos de cada nombre coincidan en ambas hojas.

sal u dos

Te anexo la macro

'
Private Sub CommandButton1_Click()
'Por.Dante Amor
    Dim fec1 As Date, fec2 As Date
    '
    Set h4 = Sheets("TEMP")
    h4.Cells.Clear
    h3.Rows(3).Copy h4.Rows(1)
    '
    If ListBox1.ListIndex = -1 Then
        MsgBox "Selecciona un nombre"
        Exit Sub
    End If
    If ComboBox2 = "" Then
        MsgBox "Selecciona un tipo de descanso"
        ComboBox2.SetFocus
        Exit Sub
    End If
    'validar fechas
    fec1 = TextBox2 & "/" & Label7.Caption
    fec2 = TextBox3 & "/" & Label8.Caption
    If Not IsDate(fec1) Then
        MsgBox "Captura una fecha desde"
        TextBox2.SetFocus
        Exit Sub
    End If
    If Not IsDate(fec2) Then
        MsgBox "Captura una fecha Hasta"
        TextBox3.SetFocus
        Exit Sub
    End If
    If fec2 < fec1 Then
        MsgBox "La fecha Hasta tiene que ser mayor o igual a la fecha Desde"
        TextBox3.SetFocus
        Exit Sub
    End If
    '
    nombre = ListBox1.List(ListBox1.ListIndex, 0)
    grupo = ListBox1.List(ListBox1.ListIndex, 1)
    Set g = h2.Columns("A").Find(grupo, lookat:=xlWhole)
    If Not g Is Nothing Then
        wmax = h2.Cells(g.Row, "B")
    Else
        MsgBox "El grupo no se encontró en la hoja NOMBRES : " & grupo
        Exit Sub
    End If
    '
    Application.ScreenUpdating = False
    'VALIDA MAXIMO
    cuenta = 0
    j = 2
    For i = 2 To h2.Range("B" & Rows.Count).End(xlUp).Row
        'busca todos los nombres que pertenecen al grupo
        If h2.Cells(i, "B") = grupo Then
            n_nombre = h2.Cells(i, "A")
            'busca el nombre en hoja unica
            Set b = h3.Columns("A").Find(n_nombre, lookat:=xlWhole)
            If Not b Is Nothing Then
                fila = b.Row
                h3.Rows(fila).Copy
                h4.Rows(j).PasteSpecial xlValues
                j = j + 1
            End If
        End If
    Next
    '
    u4 = h4.Range("A" & Rows.Count).End(xlUp).Row
    With h4.Range(h4.Cells(j, "B"), h4.Cells(j, "NA"))
        .FormulaR1C1 = "=COUNTA(R2C:R[-1]C)"
    End With
    '
    For fecha = fec1 To fec2
        Set b = h4.Rows(1).Find(fecha, lookat:=xlWhole)
        If Not b Is Nothing Then
            col = b.Column
            If h4.Cells(j, col) + 1 >= wmax Then
                MsgBox "Se alcanzó el número máximo de personas en la fecha : " & fecha
                Exit Sub
            End If
        Else
            MsgBox "Fecha no encontrada : " & fecha
            Exit Sub
        End If
    Next
    '
    'si no se alcanzó el número máximo se guardan las fechas
    Set c = h3.Columns("A").Find(nombre, lookat:=xlWhole)
    If Not c Is Nothing Then
        fila = c.Row
        For fecha = fec1 To fec2
            Set b = h3.Rows(3).Find(fecha, lookat:=xlWhole)
            If Not b Is Nothing Then
                col = b.Column
                h3.Cells(fila, col) = ComboBox2.List(ComboBox2.ListIndex, 1)
            Else
                MsgBox "Fecha no encontrada : " & fecha
                Exit Sub
            End If
        Next
    Else
        MsgBox "nombre no existe"
        Exit Sub
    End If
    Application.ScreenUpdating = True
    MsgBox "Periodo guardado"
End Sub

sal u dos

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas