| # | Fecha base | Celebración | Nombre festividad | Tipo |
| 01 | 01-ene | Fecha fija | Año nuevo | Cívica y Religiosa |
| 02 | 06-ene | Siguiente lunes | Epifanía | Religiosa |
| 03 | 19-mar | Siguiente lunes | San José | Religiosa |
| 04 | Pascua | -7 días | Domingo de Ramos | Religiosa |
| 05 | Pascua | -3 días | Jueves Santo | Religiosa |
| 06 | Pascua | -2 días | Viernes Santo | Religiosa |
| 07 | Pascua | El día de Pascua | Domingo de Pascua | Religiosa |
| 08 | 01-may | Fecha fija | Día del Trabajo | Cívica |
| 09 | Pascua | +43 días | Ascención de Jesús | Religiosa |
| 10 | Pascua | +64 dias | Corpus Christi | Religiosa |
| 11 | Pascua | +71 días | Sagrado Corazón de Jesús | Religiosa |
| 12 | 29-jun | Siguiente lunes | San Pedro y San Pablo | Religiosa |
| 13 | 20-jul | Fecha fija | Grito de Independencia | Cívica |
| 14 | 07-ago | Fecha fija | Batalla de Boyacá | Cívica |
| 15 | 15-ago | Siguiente lunes | Asunción de la Virgen | Religiosa |
| 16 | 12-oct | Siguiente lunes | Día de la Raza | Cívica |
| 17 | 01-nov | Siguiente lunes | Todos los Santos | Religiosa |
| 18 | 11-nov | Siguiente lunes | Independencia de Cartagena | Religiosa |
| 19 | 08-dic | Fecha fija | Inmaculada Concepción | Religiosa |
| 20 | 25-dic | Fecha fija | Navidad | Religiosa |
Como se puede apreciar en la tabla, con relación a la celebración hay tres tipos de festividades:
- Las de Fecha fija: Las cuales se celebran todos los años en la fecha base de la festividad.
- Las de Siguiente lunes: Las cuales se celebran el siguiente lunes con respecto a la fecha base de la festividad.
- Las relacionadas con la Pascua: Las cuales se celebran un cierto número de días con relación a la Pascua.
Para Colombia, en Microsof Project es posible automatizar esta tarea utilizando un código en Visual Basic que puede ser encontrado a continuación:
Sub FestivosColombia()
' Macro para colocar los festivos de Colombia
' Macro creada el 22/12/2012 por Jairo Bernal.
Dim i As Integer, dia As Date, d As Integer, calendario As Calendar, dias As Integer
Dim diasTexto As String, fechaFinEstimada As Date, fechaInicio As Date
NewTasksStartOn
OptionsViewEx ProjectSummary:=True
OptionsViewEx DisplayOutlineNumber:=True
ActiveProject.BaseCalendars(1).WeekDays(1).Default
fechaInicio = ActiveProject.ProjectStart
For i = 2 To 6
ActiveProject.BaseCalendars(1).WeekDays(i).Shift1.Start = "08:00"
ActiveProject.BaseCalendars(1).WeekDays(i).Shift1.Finish = "12:00"
ActiveProject.BaseCalendars(1).WeekDays(i).Shift2.Start = "13:00"
ActiveProject.BaseCalendars(1).WeekDays(i).Shift2.Finish = "17:00"
ActiveProject.BaseCalendars(1).WeekDays(i).Shift3.Clear
ActiveProject.BaseCalendars(1).WeekDays(i).Shift4.Clear
ActiveProject.BaseCalendars(1).WeekDays(i).Shift5.Clear
Next i
ActiveProject.BaseCalendars(1).WeekDays(7).Default
dias = 0
Do While dias = 0
On Error Resume Next
dias = 0 + InputBox("Ingrese el estimado en días para su Proyecto", "Días del Proyecto", 0)
On Error GoTo 0
Loop
fechaFinEstimada = DateAdd("d", dias, fechaInicio)
For Each calendario In ActiveProject.BaseCalendars
i = Year(fechaInicio)
On Error Resume Next
For i = i To Year(fechaFinEstimada) + 1
' Año Nuevo
calendario.Exceptions.Add 1, DateSerial(i, 1, 1), DateSerial(i, 1, 1), 1, "Año Nuevo " & i
' Epifanía
dia = DateSerial(i, 1, 6)
d = (9 - Weekday(dia)) Mod 7
dia = DateAdd("d", d, dia)
calendario.Exceptions.Add 1, dia, dia, 1, "Epifanía " & i
' San José
dia = DateSerial(i, 3, 19)
d = (9 - Weekday(dia)) Mod 7
dia = DateAdd("d", d, dia)
calendario.Exceptions.Add 1, dia, dia, 1, "San José " & i
' Jueves y Viernes Santos
calendario.Exceptions.Add 1, FestivoComputus(i, -3), FestivoComputus(i, -2), 1, "Jueves y Viernes Santos " & i
' Día del Trabajo
calendario.Exceptions.Add 1, DateSerial(i, 5, 1), DateSerial(i, 5, 1), 1, "Día del Trabajo " & i
' Ascención del Señor
calendario.Exceptions.Add 1, FestivoComputus(i, 43), FestivoComputus(i, 43), 1, "Ascención del Señor " & i
' Corpus Christie
calendario.Exceptions.Add 1, FestivoComputus(i, 64), FestivoComputus(i, 64), 1, "Corpus Christie " & i
' Sagrado Corazón
calendario.Exceptions.Add 1, FestivoComputus(i, 71), FestivoComputus(i, 71), 1, "Sagrado Corazón " & i
' San Pedro y San Pablo
dia = DateSerial(i, 6, 29)
d = (9 - Weekday(dia)) Mod 7
dia = DateAdd("d", d, dia)
calendario.Exceptions.Add 1, dia, dia, 1, "San Pedro y San Pablo " & i
' Grito de Independencia
calendario.Exceptions.Add 1, DateSerial(i, 7, 20), DateSerial(i, 7, 20), 1, "Grito de Independencia " & i
' Batalla de Boyacá
calendario.Exceptions.Add 1, DateSerial(i, 8, 7), DateSerial(i, 8, 7), 1, "Batalla de Boyacá " & i
' Asunción de la Virgen
dia = DateSerial(i, 8, 15)
d = (9 - Weekday(dia)) Mod 7
dia = DateAdd("d", d, dia)
calendario.Exceptions.Add 1, dia, dia, 1, "Asunción de la Virgen " & i
' Día de la Raza
dia = DateSerial(i, 10, 12)
d = (9 - Weekday(dia)) Mod 7
dia = DateAdd("d", d, dia)
calendario.Exceptions.Add 1, dia, dia, 1, "Día de la Raza " & i
' Todos los Santos
dia = DateSerial(i, 11, 1)
d = (9 - Weekday(dia)) Mod 7
dia = DateAdd("d", d, dia)
calendario.Exceptions.Add 1, dia, dia, 1, "Todos los Santos " & i
' Independencia de Cartagena
dia = DateSerial(i, 11, 11)
d = (9 - Weekday(dia)) Mod 7
dia = DateAdd("d", d, dia)
calendario.Exceptions.Add 1, dia, dia, 1, "Independencia de Cartagena " & i
' Inmaculada Concepcion
calendario.Exceptions.Add 1, DateSerial(i, 12, 8), DateSerial(i, 12, 8), 1, "Inmaculada Concepcion " & i
' Navidad
calendario.Exceptions.Add 1, DateSerial(i, 12, 25), DateSerial(i, 12, 25), 1, "Navidad " & i
Next i
On Error GoTo 0
Next
End Sub
Public Function DomingoPascua(Anio As Integer) As Date
Dim a As Integer, b As Integer, c As Integer, d As Integer, e As Integer
Dim f As Integer, g As Integer, h As Integer, i As Integer
Dim k As Integer, l As Integer, m As Integer, n As Integer
Dim mes As Integer, día As Integer
a = Anio Mod 19
b = Int(Anio / 100)
c = Anio Mod 100
d = Int(b / 4)
e = b Mod 4
f = Int((b + 8) / 25)
g = Int((b - f + 1) / 3)
h = (19 * a + b - d - g + 15) Mod 30
i = Int(c / 4)
k = c Mod 4
l = (32 + 2 * e + 2 * i - h - k) Mod 7
m = Int((a + 11 * h + 22 * l) / 451)
n = h + l - 7 * m + 114
mes = Int(n / 31)
día = 1 + n Mod 31
DomingoPascua = DateSerial(Anio, mes, día)
End Function
Public Function FestivoComputus(Anio As Integer, Optional ss As Integer) As Date
FestivoComputus = DateAdd("d", ss, DomingoPascua(Anio))
End Function
Excelente macro!
ResponderEliminarGracias!
ResponderEliminarEste código es para todos los años? o solo para el 2012?
ResponderEliminarpara todos los años
Eliminargracias
ResponderEliminar