You might create some confusion by calling a stored query a procedure. Procedures are something else. Also, execute implies the query is an action query, which seems it may not be the case here.
If you format form date textboxes as one of the available date options, you'll get the bonus of the built in calendar. To answer which event, I'd use a button click. That would be the most efficient method IMO, because you can validate that the date controls actually contain dates and that the end date is not before the start date. Can also validate that other controls have values if required, or deal with it if optional. Since code would be involved, I wouldn't bother with a stored query because if you create references to form controls, the query does not care if there are dates - the lack of which will produce no results. There is a way to deal with this but it's more effort than running a sql statement or a query from code instead.
You didn't say what the query does - update, append, delete or will just return records. If the latter, users should not be dabbling in updatable queries as opposed to working in forms, so there's that. You can open a select query with DoCmd.OpenQuery "nameOfQuery" and get a datasheet if you really must. In that case, your simplest solution would be to have this query reference form fields as criteria and use the button code to validate first. However, this query would be useless without the form being open and populated.
If none of that seems appealing, best to tell more about what you want to do.
The more we hear silence, the more we begin to think about our value in this universe.
Paraphrase of Professor Brian Cox.