As I said, that gets messy. In any case, this should get you closer.
Private Sub Worksheet_Change(ByVal Target As Range)
Dim r As Range
Set r = Intersect(Target, Range("C3,C5:C11,C13:C19"))
If r Is Nothing Then Exit Sub
On Error GoTo EndNow
Application.EnableEvents = False
Select Case True
Case Target.Value = "yes" And Target.Address(False, False) = "C3"
Range("C5:C11,C13:C19").Validation.Delete
Range("C5:C11,C13:C19").Value2 = "please select"
Range("C24:C30,C43:C49,C32:C38,C51:C57").Value2 = ""
Case Target.Value = "no" And Target.Address(False, False) = "C3"
Range("C5:C11,C13:C19").Value2 = ""
End Select
EndNow:
Application.EnableEvents = True
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim r As Range, c As Range, i As Integer
Set r = Intersect(Target, Range("C5:C11,C13:C19"))
If r Is Nothing Then Exit Sub
On Error GoTo EndNow
Application.EnableEvents = False
For Each c In r
If IsNumeric(c.Value) Then GoTo AddVals
With c.Validation
'Add Validation back in.
c.Value = ""
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
xlBetween, Formula1:="5,6,7"
.IgnoreBlank = True
.InCellDropdown = True
.InputTitle = ""
.ErrorTitle = ""
.InputMessage = ""
.ErrorMessage = ""
.ShowInput = True
.ShowError = True
.InCellDropdown = True
SendKeys "%{Down}", True
AddVals:
With c
i = .Row
If (i >= 5 And i <= 11) Or (i >= 13 And i <= 19) Then _
Range("C" & i + 19 & ",C" & i + 38).Value = .Value
End With
End With
Next c
EndNow:
Application.EnableEvents = True
End Sub