Heat the oil in a large pot over medium heat. Add celery, onion, carrot, garlic and seasonings and cook until the onion is tender, about 5 minutes.
Add potatoes, chicken broth, broccoli stems and parsley. Simmer until potatoes are tender, about 15 minutes.
Combine milk, cream and flour in a small container. Whisk until flour is mixed in. Add milk mixture, broccoli and ham to the pot and simmer about 10 minutes, stirring occasionally until broccoli is tender.
Remove from heat and using a potato masher, mash mixture slightly to thicken. Stir in cheeses and pepper to taste.