Gestión de los empleados
Cálculo de duración y horario: descripción del ejemplo
Descripción general del ejemplo
El objetivo de este ejemplo es llevar a cabo la planificación del proyecto informático del portal de clientes de la empresa BolEni con los recursos humanos a su disposición. Se debe completar un conjunto de tareas para entregar el proyecto.
Recursos humanos
Cada recurso tiene un puesto: manager, diseñador, desarrollador o evaluador.
Cada recurso ha indicado su disponibilidad durante el período comprendido entre el 01/04/2022 y el 30/06/2022.
Tareas
Cada tarea se considera completada cuando se ha consumido el número de días por recurso. Comienzan cuando se han realizado las tareas anteriores y terminan cuando se han asignado los recursos necesarios.
Objetivo
El objetivo es determinar la fecha más temprana para terminar el proyecto en función de la disponibilidad de los recursos humanos. También se solicitará tener una representación gráfica de esta fecha de finalización.
Descripción general del archivo
El archivo Enunciado_5-ABC.xlsm consta de dos hojas: Planning y Tareas.
Hoja Planning
-
La hoja Planning contiene la lista de recursos humanos (columna A) que participan en el proyecto.
-
Cada recurso tiene su propia posición (columna B).
-
Cada recurso indica su disponibilidad para cada día marcando con una equis (X) la celda correspondiente...
Cálculo de la duración y del planning: conceptos del curso
Fórmulas de fecha
Las fórmulas de fecha permiten realizar operaciones con fechas: sumar/contar días, encontrar el final del mes...
Calcular el número de días laborables entre dos fechas
La función DIAS.LAB permite calcular el número de días laborables entre dos fechas.
La sintaxis es la siguiente:
=DIAS.LAB(fecha_inicial; fecha_final; [vacaciones])
-
Fecha_inicial: corresponde a la fecha de inicio de la serie.
-
Fecha_final: corresponde a la fecha de finalización de la serie.
-
Vacaciones: corresponde a un número de días festivos o a un rango que contiene días festivos. El argumento es opcional.
Ejemplo:
Cálculo del número de días laborables entre el 15 de diciembre de 2021 y el 31 de diciembre de 2021. El argumento es el día festivo del 25 de diciembre de 2021.
Resultado: el número de días laborables es 13.
Agregar un número de días laborables a una fecha
La función DIA.LAB devuelve un número que representa una fecha que corresponde a una fecha (fecha de inicio) a partir de la cual se suma o resta el número especificado de días laborables.
La sintaxis es la siguiente:
=DIA.LAB(fecha_inicial; días; [vacaciones])
-
Fecha_inicial: es la fecha base para el cálculo.
-
Días: el número de días que se van a agregar a la fecha base.
-
Vacaciones: corresponde a un número de días...
Cálculo de la duración y del planning: realización del ejemplo
Abra el archivo Enunciado_5-ABC.xlsm.
Cálculo de la duración de cada tarea
Fecha de inicio y fecha de finalización
En la hoja Tareas, la duración de cada tarea se calculará en la columna H; en cualquier caso, ya es posible definir la estructura del diagrama de Gantt.
-
Columna G: la fecha de inicio mínima es la fecha de finalización de la tarea anterior + 1.
-
Columna I: La fecha de finalización es la fecha de inicio a la que se añade la duración.
Para la columna G, no hay una fórmula particular; debe tratar cada fila individualmente:
-
Para la fecha de inicio de las tareas 2 y 3, tome la fecha de finalización de la tarea 1 y agregue 1.
-
La fecha de inicio de la tarea 4 corresponde a la fecha de finalización de la tarea 3 más 1 día.
-
La fecha de inicio de las tareas 5 y 6 corresponde a la fecha de finalización de la tarea 4 más 1 día.
-
La fecha de inicio de la tarea 7 corresponde a la fecha de finalización más alejada entre las tareas 5 y 6.
-
Finalmente, la fecha de inicio de la tarea 8 corresponde a la fecha de finalización de la tarea 7 más 1 día.
Introduzca las fórmulas siguientes:
Para la fecha de finalización, agregue la duración a la fecha de inicio y use la fórmula DIA.LAB:
Seleccione el rango I4:I11.
Pulse la tecla F2 para editar la fórmula de la celda I4.
Introduzca en la celda =DÍA.LAB(G4;H4;Festivos) y pulse las teclas CtrlIntro al mismo tiempo para aplicar la fórmula a todo el rango.
Calcular el tiempo necesario
En primer lugar, es necesario recuperar el número de recursos disponibles por negocio y por día. Con la fórmula CONTAR.SI.CONJUNTO podremos contar el número de recursos que han indicado su disponibilidad por puesto.
En la hoja Planning, introduzca los diferentes elementos debajo de la tabla (rango B27:B30):
Seleccione todo el rango C27:CO30.
La fórmula va a ser un CONTAR.SI.CONJUNTO con dos criterios: que el elemento del recurso en B4:B26 sea igual al elemento en el rango B27:B30 y que la celda del rango sea igual a X: =CONTAR.SI.CONJUNTO($B$4:$B$26;$B27;C$4:C$26;"X")
Pulse las teclas CtrlIntro simultáneamente para aplicar la fórmula a todo el rango.
Distribución de los recursos por tareas
Con objeto de contar el tiempo necesario para completar una tarea, debe crear un procedimiento que recorra cada una de las tareas del proyecto:
-
Que cuente el número de recursos necesarios por puesto.
-
Recorra todos los días desde la fecha de inicio de la tarea para determinar a partir de qué momento es posible completar la tarea.
-
Incluya la duración en la columna H de la hoja Tareas.
Cree el procedimiento:
Abra VBA.
Al principio de cada módulo, aquí Módulo1, verá la instrucción Option Explicit para no olvidar declarar una variable, y así controlarlas todas.
En Módulo1, cree un procedimiento nuevo CalcularDuracion.
Sub CalcularDuracion
End sub
El procedimiento se aplicará en ambas hojas, por lo que debe crear dos variables de objeto para cada una de ellas. Esto facilitará la navegación entre las hojas...
Gestión de asistencia. Herramienta de administración: presentación del ejemplo
Presentación del ejemplo
El objetivo de esta segunda parte es retomar el archivo de disponibilidad de los recursos humanos y añadir algunas funcionalidades para facilitar su uso.
Tal y como está, cualquier usuario del archivo puede cambiar la presencia/ausencia de todos los recursos humanos. El resto de este ejemplo le permitirá restringir, mediante una contraseña, la modificación de la disponibilidad.
El otro propósito de este ejemplo es calcular el coste de cada tarea y del total del proyecto. El coste de una tarea corresponde al coste de cada recurso requerido para una tarea. También se solicita optimizar el coste de cada tarea tomando el recurso menos costoso para ella.
Además, hay que tener en cuenta una limitación muy importante: el calendario no es fijo y puede extenderse mucho más allá de junio. El archivo debe tener la capacidad de adaptarse a esta posibilidad y generar tantos meses como sea necesario en el calendario.
Presentación del archivo
El archivo Enunciado_5-DEF.xlsm se basa en la primera parte de este capítulo; tiene la misma estructura, con las hojas Planning y Tareas. La hoja Planning contiene los datos de los recursos, mientras que la hoja Tareas contiene la planificación de cada tarea.
En comparación con el archivo Corrección_5-ABC.xlsm, el nuevo archivo de enunciado incorpora información adicional en la hoja Planning:
-
Identificador (columna B): se trata de un código único y secreto que identifica a los usuarios. Solo ellos conocen, cada uno, su código, que se utilizará para permitirles identificarse en la aplicación.
-
Coste (columna D): el coste corresponde a la cantidad diaria...
Gestión de asistencia. Herramienta de administración: conceptos del curso
Creación dinámica de controles
¿Qué es?
Agregar controles dinámicamente significa que se crean controles nuevos en el formulario en tiempo de ejecución.
La adición del control se desencadena mediante un procedimiento, ya sea automáticamente o por acción del usuario.
La adición de un control se realiza en un control contenedor, es decir, capaz de contener otros controles: Form, Frame, Page...
¿Cómo funciona?
Hay que crear un objeto de tipo Control y, a continuación, agregarlo a un control contenedor.
Dim MiControl As Control 'instanciación de una variable de tipo Control
Para agregar el control a un control contenedor:
Set MiControl =
Form.ControlContenedor.Controls.Add("forms.Textbox.1")
'adición de un control Textbox nuevo al control contenedor.
Para los otros controles, esta es la sintaxis que se debe usar:
Control |
Sintaxis |
ComboBox (cuadro de lista modificable) |
Forms.ComboBox.1 |
CommandButton (botón de comando) |
Forms.CommandButton.1 |
Frame (marco) |
Forms.Frame.1 |
Imagen |
Forms.Image.1 |
Label (etiqueta) |
Forms.Label.1 |
ListBox (cuadro de lista) |
Forms.ListBox.1 |
MultiPage |
Forms.MultiPage.1 |
OptionButton (botón de opción) |
Forms.OptionButton.1 |
ScrollBar (barra de desplazamiento) |
Forms.ScrollBar.1 |
SpinButton (arriba) |
Forms.SpinButton.1 |
TabStrip (tira de pestañas) |
Forms.TabStrip.1 |
TextBox (cuadro de texto) |
Forms.TextBox.1 |
ToggleButton (alternar) |
Forms.ToggleButton.1 |
Una vez creado el control, es más fácil cambiar sus propiedades.
MiControl.Name = "NombreDelControl"
MiControl.Left = 0 'Posicionamiento en el eje de las abscisas
MiControl.Top...
Gestión de asistencia - Herramienta de administración: realización del ejemplo
Abra el archivo Enunciado_5-DEF.xlsm.
Inicialización del formulario
El recurso que desee realizar un cambio en su disponibilidad abrirá el archivo y se colocará en la hoja Tareas. Luego hará clic en el botón Editar disponibilidad por persona para identificarse.
La identificación pasará por una ventana de tipo InputBox que le pedirá su identificador como paso previo para acceder al formulario.
Conexión para un recurso
Todo este código debe escribirse dentro del procedimiento MostrarFormularioPersona, porque cuando la persona hace clic en el botón se llama a este formulario. Este procedimiento está en el Módulo2.
Al principio del Módulo2, escriba la instrucción Option Explicit.
Aquí puede ver las operaciones que hay que realizar:
Primero, cree las variables:
-
Una variable de tipo cadena de caracteres para almacenar el identificador introducido por la persona.
-
Una variable de tipo número entero para recorrer las filas de la tabla que contienen los recursos humanos.
-
Una variable pública que contiene la fila del recurso encontrado. Esta debe definirse antes del procedimiento inicializarse en 0. La ventaja de tener una variable pública es conocer en todo momento, durante la ejecución, la fila donde se encuentra el recurso en la hoja Planning. Esto será especialmente útil al realizar copias de seguridad.
-
Más adelante, se crearán otras variables en el código.
Escriba el código siguiente:
Option Explicit
Public FilaRecurso As Integer
Sub MostrarFormularioPersona()
Dim Identificador As String
Dim Fila As Integer
FilaRecurso = 0
A continuación, cree un cuadro de diálogo de tipo InputBox asociado a la variable Identificador.
El cuadro de diálogo Inputbox se describe con el método Inputbox (encabezado, [título], [valor_por_defecto]...) y devuelve un valor de tipo String correspondiente al texto introducido por el usuario.
En este caso, solo utilizará los argumentos de encabezado (obligatorio) y título (opcional), y asignará el resultado del cuadro de diálogo Inputbox a la variable identificador:
Identificador = InputBox("Introduzca su identificador", "Identificador")
No se lleva a cabo ningún control sobre la entrada, solo va a recorrer la lista de identificadores para verificar si encuentra el introducido.
Para ello, creará un bucle de tipo While... Wend que recorre la tabla de la columna B de la hoja Planning a partir de la fila 4 hasta que encuentre una columna vacía. Como se ha visto anteriormente, la variable Fila se incrementará con cada iteración del bucle.
Si se encuentra una coincidencia, es decir, si el valor de la celda de la columna B y el número de fila contenido en la variable Fila corresponde al identificador introducido en el cuadro de diálogo InputBox, la variable FilaRecurso toma el valor de la fila. Si el valor de la variable FilaRecurso es distinto de 0, también se considera una condición de salida del bucle While... Wend.
Introduzca el siguiente código:
Fila = 4
'la primera fila recorrida es la 4
Sheets("Planning").Activate...