Indépendamment de ce qui est dit plus haut, je remarque que dans votre code :
Sub ValidateEventDates(ws As Worksheet, startDateColumn As String, endDateColumn As String, sheetName As String, ByRef report As String)
Dim lastRow As Long, i As Long
Dim startDate As Date, endDate As Date
' Find the last row of data
lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
' Loop through the rows to validate start and end dates
For i = 2 To lastRow
On Error Resume Next
startDate = CDate(ws.Cells(i, ws.Columns(startDateColumn).Column).value)
endDate = CDate(ws.Cells(i, ws.Columns(endDateColumn).Column).value)
startDateColumn est défini en string or vous l'utilisez en argument de colonne pour Cells ce qui ne peut convenir
Une syntaxe du type
startDate = CDate(ws.Cells(i, startDateColumn).value
serait déjà plus crédible. Toutefois je vous recommande celle précisé plus haut (Déclaration en Long et Value2
A+