Gestion de l'affichage de mon application
Bonjour,
Je suis débutant en excel-vba et j'ai développé un programme qui exploite une base de données enregistrée sur excel.
A l'ouverture de mon fichier, je masque mon application et j'ouvre le UserForm principal de l'application :
Private Sub Workbook_Open()
Application.Visible = False
Load PatternTool
End Sub
Mon problème est qu'à l'ouverture d'un autre classeur ou fichier Excel, le classeur de mon application contenant ma base de donné apparait. Y-a-t-il un moyen de forcer l'ouverture du second classeur dans une nouvelle instance excel ? Ou alors de copier le second classeur d'ouvrir une nouvelle instance et de le copier ?
Je pense que la solution est celle qui est mentionnée ci-dessous mais je n'y connais pas grand chose en gestion de classeurs.
Donc, si quelqu'un a déjà rencontré ce genre de problème, je suis preneur de tout type de proposition.
Merci d'avance.
Bonsoir,
J'ai fait quelques tests et j'en arrive à la conclusion suivante :
Si on ouvre plusieurs instances Excel, quand on ouvre un classeur à partir d'un raccourci windows ou de l'explorateur, Windows l'attribue à la dernière instance active. Donc en admettant qu'à partir d'Excel, tu ouvres ton formulaire sur une seconde instance, et que tu ouvres un fichier, si tu étais en train d'utiliser l'userform juste avant d'ouvrir le fichier, c'est elle qui ouvrira le formulaire.
Une solution de contournement est peut-être d'afficher toutes les fenêtres dans la barre des taches et de masquer celle de ton userform. Je n'ai pas eu le temps de regarder ce point particulier sous Office 2013, mais je crois que cette possibilité de n'avoir q'une seule fenêtre Excel pour plusieurs fichiers ouverts est révolue (Office 2013 sous W7). Il faut que je vérifie, mais ne crois pas avoir vu cette case à cocher "Afficher toutes les fenêtres dans la barre des taches".
Voici le code de mes tests, l'userform doit impérativement être en mode modal (UF.Show 1) :
Sub Test()
Dim App As Excel.Application
Dim Wbk As Excel.Workbook
Set App = New Excel.Application
Set Wbk = App.Workbooks.Open("m:\Temp\userform.xlsm")
App.Run "'m:\Temp\userform.xlsm'!AppUF"
App.Visible = False
' Application.Quit
End SubIl me semble que je me suis mal exprimé. Afin d'ouvrir mon application j'utilise un code VBS.
Dim AppExcel
Dim Fichier
'msgbox GetVbsExecutePath()
Fichier = GetVbsExecutePath() & "\Outil de suivi des outillages 4.0.7.xlsm"
If FichierExiste(Fichier) = False Then
MsgBox "Le fichier " & Fichier & " est introuvable !"
WScript.Quit
End If
'créé une session EXCEL sans notification des macros
Set AppExcel = WScript.CreateObject("Excel.Application")
'On Error Resume Next
'ouvre le classeur
AppExcel.Workbooks.Open Fichier ', , , , , ,True , , , , false
'peut exécuter une macro à l'ouverture (ôter l'apostrophe)
'AppExcel.Run "Test"
'rend l'application EXCEL Visible
'AppExcel.Visible = True
'Vidage mémoire
'Set AppExcel = Nothing
'quitte VBS
WScript.Quit
'Test d'existence d'un fichier
Function FichierExiste(Fichier)
Dim FSO
Set FSO = CreateObject("Scripting.FileSystemObject")
FichierExiste = FSO.FileExists(Fichier)
Set FSO = Nothing
End Function
Function GetVbsExecutePath()
GetVbsExecutePath = Replace(WScript.ScriptFullName, WScript.ScriptName, "")
End Function
Ce code crée une instance Excel puis ouvre mon application. A l'ouverture de mon fichier je masque l'application excel et affiche mon UserForm principal. Jusque là aucun problème.
Cependant, dès que j'ouvre un autre fichier excel l'application excel apparaît avec le workbook de mon programme que je souhaiterais garder masquer.
Ma question est : comment faire pour garder le workbook de mon application tout le temps caché et mon application également si je n'ai que mon workbook ?
Bonsoir Procrastination,
Non, j'ai bien compris ton problème.
Si l'ouverture d'un classeur rends visible la fenêtre Excel qui a affiché le formulaire, d'après les divers tests que j'ai pu faire, c'est parce que ton formulaire doit être affiché en mode non modal. Il faut que tu essaies en mode modal, c'est à dire :
Userform.Show 1
ou
Userform.Show vbModal
ou
Userform.Show
Si cela fonctionne et qu'il n'y a que cette instance Excel d'ouverte, le fait d'ouvrir un fichier à partir d'un raccourci ou de l'explorateur n'entrainera aucune action, du coup il faudra d'abord ouvrir une seconde instance Excel puis ouvrir le classeur.
Ensuite il faudra toujours que la fenêtre Excel ne comprenant pas ton formulaire soit la dernière fenêtre Excel activée avant d'ouvrir un fichier Excel sinon, comme Windows essaie toujours d'ouvrir le fichier Excel à partir de la dernière fenêtre active, si c'est la fenêtre ou se trouve ton userform, qui essaiera d'ouvrir le fichier et du coup, il ne s'ouvrira pas.