Put this in a standard module and see
You'll hjave to check that the date formats are the way you want, since I had to change some to test
Option Explicit
Sub Masquer_jour()
Dim MonYr As Date
Dim iMon As String, iYr As Long
Dim ws As Worksheet
Set ws = Worksheets("Trainees planning")
iMon = ws.Range("B1").Value
iYr = 2017 + ws.Range("B2").Value
'make date and get last day of month (handles leap years)
If iMon = 12 Then
MonYr = DateSerial(iYr + 1, 1, 0)
Else
MonYr = DateSerial(iYr, iMon + 1, 0)
End If
ws.Range("G2").Value = DateSerial(Year(MonYr), Month(MonYr), 1)
ws.Range("H2").Value = MonYr
Application.ScreenUpdating = False
ws.Columns("AH:AJ").Hidden = False
Select Case Day(MonYr)
Case 28
ws.Columns("AH:AJ").Hidden = True
Case 29
ws.Columns("AI:AJ").Hidden = True
Case 30
ws.Columns("AJ:AJ").Hidden = True
End Select
Application.ScreenUpdating = True
End Sub