Combine the onion, celery, potatoes, ham and water in a large stockpot. Bring to a boil, then cook over medium heat until potatoes are tender, about 10 to 15 minutes. Stir in the chicken bouillon.
Meanwhile, in a separate saucepan, melt butter over medium-low heat. Whisk in flour and cook for one minute, whisking constantly. Slowly stir in milk and whisk to combine. Continue stirring over medium-low heat until thick, 2-3 minutes.
Stir the milk mixture into the stockpot, and cook soup until heated through. Serve immediately.