diff --git a/src/View/MainWindow.py b/src/View/MainWindow.py
index 793a044e5c19beb7f4c183d62459c4a071aebd1e..41a25c0769f751a7d95652f323c114a0a1e99585 100644
--- a/src/View/MainWindow.py
+++ b/src/View/MainWindow.py
@@ -82,7 +82,7 @@ no_model_action = [
 model_action = [
     "action_menu_close", "action_menu_edit", "action_menu_save",
     "action_menu_save_as", "action_toolBar_close", "action_toolBar_save",
-    "action_menu_numerical_parameter",
+    "action_menu_numerical_parameter", "action_open_results_from_file",
 ]
 
 other_model_action = [
@@ -207,6 +207,7 @@ class ApplicationWindow(QMainWindow, ListedSubWindow, WindowToolKit):
             self.open_reach_sediment_layers,
             "action_menu_close": self.close_model,
             "action_menu_results_last": self.open_last_results,
+            "action_open_results_from_file": self.open_results_from_file,
             # Help
             "action_menu_pamhyr_users_pdf":
             lambda: self.open_doc_user(ext="pdf"),
@@ -838,6 +839,14 @@ class ApplicationWindow(QMainWindow, ListedSubWindow, WindowToolKit):
                     self._solver_workdir(solver)
                 )
 
+        # Open from file
+        if type(results) is str:
+            logger.info(f"Open results from {os.path.dirname(results)}")
+            results = solver.results(
+                self._study,
+                os.path.dirname(results),
+            )
+
         # No results available
         if results is None:
             return
@@ -878,6 +887,32 @@ class ApplicationWindow(QMainWindow, ListedSubWindow, WindowToolKit):
 
         self.open_solver_results(self._last_solver, self._last_results)
 
+    def open_results_from_file(self):
+        if self._study is None:
+            return
+
+        dialog = QFileDialog(self)
+        dialog.setFileMode(QFileDialog.FileMode.ExistingFile)
+        dialog.setDefaultSuffix(".BIN")
+        # dialog.setFilter(dialog.filter() | QtCore.QDir.Hidden)
+        dialog.setNameFilters(['Mage (*.BIN)'])
+
+        if self._last_solver is None:
+            dialog.setDirectory(
+                os.path.dirname(self._study.filename)
+            )
+        else:
+            dialog.setDirectory(
+                self._solver_workdir(self._last_solver)
+            )
+
+        if dialog.exec_():
+            file_name = dialog.selectedFiles()
+            self.open_solver_results(
+                self._last_solver,
+                results=file_name[0]
+            )
+
     #################
     # DOCUMENTATION #
     #################
diff --git a/src/View/ui/MainWindow.ui b/src/View/ui/MainWindow.ui
index bf73c3d3cb232511420f01a2fd72ad73438b235e..ecb069ccaf48e9a8b8c7a0aad91c8d0348150a27 100644
--- a/src/View/ui/MainWindow.ui
+++ b/src/View/ui/MainWindow.ui
@@ -139,6 +139,7 @@
      <string>&amp;Results</string>
     </property>
     <addaction name="action_menu_results_last"/>
+    <addaction name="action_open_results_from_file"/>
    </widget>
    <widget class="QMenu" name="menu_cartography">
     <property name="locale">
@@ -943,6 +944,14 @@
     <string>Edit hydraulic structures</string>
    </property>
   </action>
+  <action name="action_open_results_from_file">
+   <property name="enabled">
+    <bool>false</bool>
+   </property>
+   <property name="text">
+    <string>Open results from file</string>
+   </property>
+  </action>
  </widget>
  <resources/>
  <connections>