Should I use some public variable defined in a third unit visible from both forms ?
It is always possible to use a global variable (visible from both forms) in this way.
However, best practice from the point of view of encapsulating and hiding data where possible, would argue against exposing data to the entire application in this manner. Also, global variables of this sort can lead to inadvertent use of stale data, when the programmer has not considered that a data value might change before it is needed again.
One way to avoid yet another unnecessary global variable would be to package the data into a parameter passed in a function call of the main form. The function call would first show the modal data-gathering window of the second form unit, passing the data back when the window was closed. For instance the data could be a custom class, or a pointer to a record (or, if you like methods with lots of parameters, a parameter for each data field needed).
The LCL itself provides good examples of this kind of coding.
The art of programming often has to do with designing the best way of managing complex data (both internal and external) as much as it has to do with coding per se.