Change your command to this:
nc -zv 192.168.1.1 1-100 2>&1 | grep succeeded
2>&1 causes stderr output of a program to be written to the same file descriptor as stdout. The messages on the terminal are actually mix of error and normal outputs. Without redirecting nc writes to stderr by default, pipe will only get stdout hence grep will miss somethe data.
See section 3.5 here for more info All about redirection.