El código adjunto evalúa cada col ... si en la primera encuentra un faltante ya avisa y se detiene... así con el resto. A continuación seguirá el resto de tus instrucciones.
Sub boton34()
'x Elsamatilde
'control de contenidos
'cual será la última fila ???
dire = Range("C11").CurrentRegion.Address
'busco el último nro que indicará la última fila ocupada
For I = Len(dire) To 1 Step -1
If Mid(dire, I, 1) = "$" Then
ubica = I
Exit For
End If
Next I
filx = Right(dire, Len(dire) - I)
'controla si hay vacíos entre filas 12 y filx, col C, U, Y
Range("C12").Select
For I = 12 To filx
If Range("C" & I) = "" Then
MsgBox "Faltan datos en col C", , "ERROR"
Exit Sub
Exit For
End If
Next I
Range("U12").Select
For I = 12 To filx
If Range("U" & I) = "" Then
MsgBox "Faltan datos en col U", , "ERROR"
Exit Sub
Exit For
End If
Next I
Range("Y12").Select
For I = 12 To filx
If Range("Y" & I) = "" Then
MsgBox "Faltan datos en col Y", , "ERROR"
Exit Sub
Exit For
End If
Next I
'aquí sigue el proceso con datos correctos
MsgBox "Todo OK"
End Sub
Si en cambio te resulta más apropiado que revise las 3 col y luego te envíe un solo mensaje utilizá este otro código:
Sub boton34()
'x Elsamatilde
'control de contenidos
'cual será la última fila ???
dire = Range("C11").CurrentRegion.Address
'busco el último nro que indicará la última fila ocupada en la tabla
For I = Len(dire) To 1 Step -1
If Mid(dire, I, 1) = "$" Then
ubica = I
Exit For
End If
Next I
filx = Right(dire, Len(dire) - I)
'controla si hay vacíos entre filas 12 y filx, col C, U, Y
colx = ""
Range("C12").Select
For I = 12 To filx
If Range("C" & I) = "" Then
colx = "C ": Exit For
End If
Next I
Range("U12").Select
For I = 12 To filx
If Range("U" & I) = "" Then
colx = colx & "U ": Exit For
End If
Next I
Range("Y12").Select
For I = 12 To filx
If Range("Y" & I) = "" Then
colx = colx & "Y ": Exit For
End If
Next I
'se controlan las variables
If colx <> "" Then
MsgBox "Faltan datos en col " & colx
Exit Sub
End If
'aquí sigue el proceso con datos correctos
MsgBox "Todo OK"
End Sub