The technique for dependent data validation is to use range names for each dependent data list. The range name is the same as the value selected in the parent list. Example: the parent data validation cell has a list of countries.
You also build several lists, one for each country, with the cities of that country. The range names for each list are the country names.
Apply the country DV to A1.
Then build another range name to use in the dependent data validation for the city cell, e.g. ListRange. The formula to build the range name is
=Indirect($A$1)
The dependent data validation then points to the range that has the same name as the value in cell A1. This is a dynamic range and will change when the selection in cell A1 changes.
This will not clear any existing choice in the dependent data validation cell. E.g, if your first DV cell has a list of countries and the dependent DV has a list of cities, selecting a country in A1 will change the DV list for the city cell and a city can be selected (France > Paris). But if the country cell is changed to Italy, the city cell will still show Paris, while the DV drop down now lists cities in Italy.
In order to clear the selected city when the country cell is changes, you will indeed need VBA.