Hi,
First the shipping methods are loaded with restrictions that can be applied through SQL:
- access level
- published or not
If no method is found the generic "no shipping method is found" message is displayed.
Then, the restriction on the zone, as well as the zip code restrictions, is applied on all the shipping methods left.
If no method is left after that, the "no shipping method found for your zone" message is displayed.
Then, for each shipping method left, the different restrictions (weight, volume, price, etc) are applied at the same time. Each time a shipping method is discarded at that point the reason for which it was discarded is stored. And if no shipping method is left and there is at least one reason stored, the first reason is displayed (as to not display several different error messages to the customer which would make it quite confusing).