Ouvrir un classeur en VBA via un formulaire (Userform)

Bonsoir à tous,

J'ai développé une application Excel qui propose à l'utilisateur différents formulaires (Userforms). Dans l'un des formulaires, un bouton permet d'ouvrir un autre classeur Excel. L'utilisateur clique sur le bouton et le classeur s'ouvre. Jusque là pas de souci, sauf qu'il est impossible de travailler sur le classeur ouvert tant que le formulaire du classeur 1 n'est pas refermé. J'ai essayé plusieurs méthodes, y compris via l'explorateur, pour ouvrir ce classeur (ou un autre), rien à faire, on ne peut pas travailler à l'intérieur. On est obligé de refermer le formulaire pour avoir l'accès complet au classeur.

A force de chercher, j'ai trouvé une méthode qui ne me satisfait qu'à moitié : Ouvrir le dit classeur dans une autre session d'Excel.

J'ai utilisé ce code (trouvé dans un forum)

Set objExcel = CreateObject("Excel.Application")
objExcel.Workbooks.Open Filename:=Chemin & "\" & Nom_Fichier
objExcel.Visible = True
objExcel.Application.WindowState = xlMaximized

Cela fonctionne bien sauf que le classeur n'apparaît pas au 1er plan.

Après plusieurs essais infructueux, j'ai fini par opter pour ce code. Le classeur s'ouvre dans une autre session et se place au 1er plan ; il est bien accessible malgré la présence du formulaire à l'écran dans le classeur 1.

i = Shell("Excel.EXE /x """ & Chemin & "\Nom_Fichier" & """", vbMaximizedFocus) ' ou vbNormalFocus

Autre problème rencontré avec la présence d'un formulaire à l'écran : Si l'on ouvre un classeur (via l'explorateur) contenant des macros, notamment dans la partie Workbook_Open(), à la fermeture de ce classeur, les variables globales du classeur 1 sont vidées de leur contenu. Il n'y a pourtant aucune interaction entre les 2 classeurs, les projets VBA des 2 classeurs ne contiennent aucune donnée commune, les noms des procédures et des variables sont différents.

Si quelqu'un a une explication ou une solution, je le remercie par avance.

Ps : Pour écrire ce texte, j'ai dû m'y reprendre à 4 fois. Au moment de cliquer sur "Aperçu", message d'erreur 404. Obligé de se reconnecter et de recommencer.

Bonjour,

Et si pour l'ouverture du Userform tu ajoutes VbModeless ?

UserForm1.Show vbModeless

Bonsoir,

Merci pour ta réponse ; j'ai oublié de préciser que les formulaires était affichés en Modal. En effet en mode "non modal", cela fonctionne. Mais dans mon application, compte tenu des impératifs liés aux traitements, aux données affichées dans les formulaires et aux risques induits par les manipulations des utilisateurs, ce mode est inenvisageable.

Bonne soirée

Rechercher des sujets similaires à "ouvrir classeur vba via formulaire userform"