A new bitcoin user "U" first generates a private key. He can compute several public keys from this private key.
The kind of private key you are referring to is an extended private key which is described in the Bitcoin Improvement Proposal 0032 (BIP32) or, like RedGrittyBrick explained, what powers HD wallets.
An extended private key contains only one "regular" private key in them, and can generate directly only one extended public key.
However, these extended private keys contain also some other information that makes it possible for them to generate other vast amount of child extended private keys that also contain "regular" private keys, and these child extended private keys can have their own vast amount of child extended private keys, and this can go on and on.
When he wants to receive bitcoins, the user should generate an address. I do not understand if this address is a public key or if it is 2 different things.
They are 2 different things. There are also different type of addresses, but excluding the multi-signature kind of addresses, they are all computed by encoding the hash of the public key. So an address is not a public key, but it is derived from it (P2PKH, P2WPKH). The type of address lets you know what kind of Bitcoin technology you are using to lock the BTCs.
If my "U" user should receive bitcoin from 10 different people, he can generate a single common address for this 10 peoples but they will be able to see "U" balance, and see that he receives 10 transactions. The solution is to generate 10 different addresses. With this solution, each sender will only see its own transaction and won't see the 9 others. I am wrong ?
This is exactly why BIP32 was proposed. An extended private key is also referred as a master private key which can generate all the child keys necessary to ensure privacy. Since you can generate with the master key an infinite amount of private keys, and therefore public keys, then you can generate an infinite amount of addresses.
So, to shortcut, can we say "U" generates 10 "virtual accounts", linked to its private key ?
Yes, but remember that they would be linked to the master/extended private key. Each address has its own private key, and the private key is generated by the master key.
If so, i do not understand how "U" can computes its own balance: Is there a way for him to recover all public/address he generates from its private key ? Or should user keep all the addresses he generates in a file ?
I think RedGrittyBrick does an amazing job at explaining why we shouldn't use the term "balance" or "virtual account", etc. But, I guess your question is how can you know how many BTCs you have access to with your master private key, right? well that is the job of the wallet. A wallet must be able to store or generate the addresses that you have used, and then scan the blockchain for Unspent Transaction Outputs (UTXOs) or in other words, unspent Bitcoins that related to those addresses. Then, The wallet adds up all these BTCs to present you with this single final amount that some people wrongly call "balance".