Yes, of course. Multiple grok is possible (discuss).
In your case, as the columns are the same for the 9 first ones, you can make one simple grok and adding a conditional statement :
^(?[^;]);(?[^;]);(?[^;]);(?[^;]);(?[^;]);(?[^;]);(?[^;]);(?[^;]);(?[^;])(;(?[^;]);(?[^;]*))?
Adding ()? allows you to say that the part between () isn't always available.