Your loop processes all records - but it only processes records that are there. If you want to process records multiple times, then you will need an external loop as well:
while (index <= InputProduct.NdPlettes)
{
foreach (var ProdSelection in ClientImpressionProdSelection)
{
if (index++ > InputProduct.NdPlettes) break;
ProdSelection.Sequence = Convert.ToInt32(GenResult);
ProdSelection.Number = index;
ProdSelection.ClientDestinataire = InputProduct.ClientDestinataire;
ProdSelection.LieuDeLivraison = InputProduct.LieuDeLivraison;
ProdSelection.CodeProduitClient = InputProduct.CodeProduitClient;
ProdSelection.CodeCouleurClient = InputProduct.CodeCouleurClient;
ProdSelection.CodeFournisseurEMPourClient = InputProduct.CodeFournisseurEMPourClient;
ProdSelection.AQP = InputProduct.AQP;
ProdSelection.Produit = InputProduct.Produit;
ProdSelection.RefFournisseur = InputProduct.RefFournisseur;
ProdSelection.NdShipment = InputProduct.NdShipment;
ProdSelection.NdLot = InputProduct.NdLot;
ProdSelection.Cdate = InputProduct.Cdate;
ProdSelection.PoidsNet = InputProduct.PoidsNet;
ProdSelection.PoidsBrut = InputProduct.PoidsBrut;
ProdSelection.NbrPallet = InputProduct.NdPlettes;
ProdSelection.Material = InputProduct.Material;
ProdSelection.CodClient = InputProduct.CodClient;
ProdSelection.CodPackaging = InputProduct.CodPackaging;
ProdSelection.CoefNetBrut = InputProduct.CoefNetBrut;
GetClientImpressionProductSel.Add(ProdSelection);
}
}