Excel 2016 - Detecter l’ouverture d’un classeur dans une instance Excel

Bonjour,

Tout d’abord, je tiens à saluer l’ensemble de la communauté d’Excel-Pratique :)

Je n’ai pas souvent d’aide, en général je cherche beaucoup et je fini par trouver ce dont j’ai besoin, mais je vous avoue bloqué sur un problème.

J’ai un projet d’entreprise qui est en exploitation, mais j’ai quelque bug à corriger apparut par la suite, dont un en particulier :

J’ai besoin d’ouvrir mon classeur Excel dans une instance séparée pour éviter des interactions avec d’autre classeur vis-à-vis de mon code VBA, ça je sais faire.

Mais j’aurais besoin d’une fonction qui détecte l’ouverture d’un classeur Excel sur mon instance en cours avec mon programme et qui ouvre le classeur qui est en train de s’ouvrir sur une autre instance pour éviter tout conflit.

J’ai trouver cette private sub : Application.NewWorkbook (Excel)

Mais cela ne semble pas fonctionner sur Excel 2016, pouvez-vous m’aider s’il vous plait :p

Merci d’avance à vous tous !

Cordialement

Bonjour,

Mais j’aurais besoin d’une fonction qui détecte l’ouverture d’un classeur Excel sur mon instance en cours avec mon programme

Pour cela, il faut utiliser les événements de l'application Excel

ouvrir le classeur qui est en train de s’ouvrir sur une autre instance pour éviter tout conflit.

Pour cela, il faut le fermer, créer une nouvelle instance et l'ouvrir dans cette nouvelle instance.

ci-dessous exemple de code à insérer dans ThisWorkBook :

Public WithEvents xl As Application

Private Sub Workbook_Open()
    'activation événements application Excel
    Set xl = Application
End Sub

Private Sub xl_WorkbookOpen(ByVal Wb As Workbook)
    Dim nom_fichier As String
    Dim xl_new As Application

    'Sortie si ouverture du fichier où se déroule le code
    If Wb Is ThisWorkbook Then Exit Sub

    'fermeture du fichier dans l'instance et réouverture dans une nouvelle
    nom_fichier = Wb.Path & "\" & Wb.Name
    Wb.Close False
    Set xl_new = New Application
    xl_new.Visible = True 'si on veut visible la nouvelle instance
    xl_new.Workbooks.Open nom_fichier

End Sub

Bonjour Thev :)

Merci beaucoup pour ta réponse :) ça à l’air d’être superbe ton code, mais je ne comprend pas, à l’usage ça ne fonctionne pas...

Je peux te partager l’intégralité de mon ThisWorkbook pour comprendre l’origine du problème ? Je m’assurerais de ne transmettre aucune information sensible.

J’attends ton retour.

Merci d’avance !

Bonjour à tous,

Sans regarder dans le détail, l'application excel doit être connue de vba.
Chaque modification du code la fait perdre à VBA.
Il faut soit ouvrir le classeur, soit relancer manuellement Workbook_Open() pour qu'elle soit connue à nouveau et que ça fonctionne.
eric

Bizarrement, ça fonctionne mieux en effet après avoir relancer le classeur en effet :D

Merci à vous !

Je passe le sujet en résolu !

Rechercher des sujets similaires à "2016 detecter ouverture classeur instance"