It's not that the browser doesn't navigate. It's that your blocking the thread with your wait loop so it never shows the page. The msgbox doesn't have anything to do with anything. It just frees the thread to complete its task. If you're going to use a readystate loop at least allow the program to carry out its tasks ...

Form1.WebBrowser1.Navigate("www.yahoo.com")
While Form1.WebBrowser1.ReadyState <> WebBrowserReadyState.Complete
Me.Text = "Waiting"
Application.DoEvents()
End While