What you did was "nearly perfect", just a minor tweak:
Sub gdate()
Dim i As Long, r As Range, coltoSearch As String
coltoSearch = "A"
For i = 1 To Range(coltoSearch & Rows.Count).End(xlUp).Row
Set r = Range(coltoSearch & i)
If Len(r.Value) = 0 Then
MsgBox "No Value, in " & r.Address
Else
r.Offset(0, 1) = Date
End If
Next i
End Sub
EDIT#1:
Here is a function that returns the current date/time in a specific format as a String
Function getdate() As String
getdate = Format(Now, "dd/mm/yyyy hh:mm")
End Function
an alternative is to have the function just return Now as a true Excel date/time and apply the formatting to the cell externally
EDIT#2:
This version protects a previously entered date/time:
Sub gdate()
Dim i As Long, r As Range, coltoSearch As String
coltoSearch = "A"
For i = 1 To Range(coltoSearch & Rows.Count).End(xlUp).Row
Set r = Range(coltoSearch & i)
If Len(r.Value) = 0 Then
MsgBox "No Value, in " & r.Address
Else
If r.Offset(0, 1) = "" Then
r.Offset(0, 1) = Date
End If
End If
Next i
End Sub