A mettre dans ThisWorkBook :
Option Explicit
Private Sub Workbook_Open()
'on verifi si un fichier ou plus est/sont deja ouvert(s)
'attention ce fichier sera comptabilisé
If Workbooks.Count > 1 Then 'au moins un fichier déjà ouvert
Dim ExcelAppli As Object, OpFichier As Object
Application.DisplayAlerts = False
'pour pouvoir ouvrir ce fichier une deuxieme fois il faut que le 1ere soit en lecture seul(read-only)
'donc on passe ce fichier(ouvert) en lecture seul
ThisWorkbook.ChangeFileAccess Mode:=xlReadOnly
'on lance la nouvelle session excel
Set ExcelAppli = CreateObject("Excel.Application")
'ExcelAppli.Visible = False
'on ouvre ce meme fichier dans la nouvelle session
Set OpFichier = ExcelAppli.Workbooks.Open(ThisWorkbook.Path & "\" & ThisWorkbook.Name)
Application.DisplayAlerts = True
'on vide les variables objet
Set OpFichier = Nothing
Set ExcelAppli = Nothing
'on ferme ce fichier sans le sauver
ThisWorkbook.Close False
Else
'cette partie s'applique à la 2ieme ouverture ou à une ouverture dans une session
'excel sans autre fichier ouvert
DoEvents
Application.Visible = False
UserForm1.Show 'ATTENTION ce formulaire doit etre NON MODAL
End If
End Sub
-----------------------------------------------------------------------------
-----------------------------------------------------------------------------
Dans le code du Userform1:
Private Sub CommandButton1_Click()
'on ferme excel
Application.Quit
End Sub
Remarque :
Pour cela le formulaire doit absolument contenir un bouton(Commandbutton1 un dans l'exemple ci-dessus) pour fermer excel
Le formulaire doit obligatoirement etre non modale donc son option Show modal doit être reglé sur False.
Attention à partir du moment ou vous aurez mis ce code dans le fichier il faudra desactiver les macros à l'ouverture pour pouvoir acceder au code.