Weno pues esto es lo q he puesto al final:
private void Principal_Load(object sender, EventArgs e)
{
int n_Botones = 50; //Esta variable cambia
TableLayoutPanelCellPosition pos; //Variable posicion de la celda
Boton[] listaBotones = new Boton[n_Botones]; //Control de usuario
for (int i = n_Botones - 1; i >= 0; i--)
{listaBotones[i] = new Boton();
pos = new TableLayoutPanelCellPosition(i, 0);
Tabla.SetCellPosition(Tabla, pos);//Establezco posicion de la celda
Tabla.Controls.Add(listaBotones[i]);
}
}
Espero q le sirva a alguien algun dia.