Dans ton premier cas, VB crée avec chacun de tes chiffres une variable temporaire la plus petite selon le plus petit de tes chiffre pour les contenir, donc Long = Byte + Byte.
Un Byte aillant un max de 255, ça plante.
Dans le second cas, puisque 'y' est un entier, ça force à Calculer Long = Integer + Byte et la variable temporaire n'est plus cachée mais 'x'.
Je comprend moi-même mal la logique mais j'ai vu cela il y as quelques temps sur MSDN.