Bonjour,
Je fais appel à votre aide après de nombreuses recherches infructueuses.
Mon problème est assez complexe !
Je travaille dans un service qui maintient un lot d'applications en VBA (office 2013)
J'ai développé quelques petites lignes de code me permettant d'ouvrir plusieurs instances d'excel lorsque l'on ouvre un nouveau classeur / nouvelle appli.
Mon problème survient lorsque ma première application possédant le code est ouverte, lorsque j'ouvre un second classeur Excel j'ai une erreur 6 de mémoire insuffisante qui apparait.
Voici les outils que j'ai développé pour ouvrir une nouvelle instance d'excel à l'ouverture d'un classeur via VBA.
Voici mon workbook_open, il vérifie à l'ouverture si il y a déjà un classeur ouvert et l'ouvre dans une nouvelle instance si c'est le cas.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 Option Explicit Private WithEvents ThisExcelApplication As Application Private WithEvents OtherExcelApplication As Application Private l_blnSauvegardeNouveauClasseur As Boolean 'Procédure : Workbook_Open 'Evénement : à l'ouverture du classeur Public Sub Workbook_Open() Debug.Print Time & " : ThisWorkbook\Workbook_Open()" If Application.Workbooks.Count > 1 Then Call ReOuvrirApplicationDansNouvelleInstanceExcel Else l_blnSauvegardeNouveauClasseur = False End If Set ThisExcelApplication = Application Load ufConnexion ufConnexion.Show End Sub
Mais mon problème ne vient pas de là.
Lorsque j'ouvre un second classeur alors que ma première appli possédant ce code est ouverte.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48 Private Sub ThisExcelApplication_WorkbookOpen(ByVal Wb As Workbook) Dim strFichier As String If Wb.FullName = ThisWorkbook.FullName Then Exit Sub Set OtherExcelApplication = CreateObject("Excel.Application") strFichier = Wb.FullName Wb.Close False If g_blnVisibiliteApplication Then ThisExcelApplication.Visible = True Else ThisExcelApplication.Visible = False End If OtherExcelApplication.Visible = True OtherExcelApplication.Workbooks.Open strFichier End Sub Private Sub ReOuvrirApplicationDansNouvelleInstanceExcel() Dim oExcel As Excel.Application Dim strFichier As String Dim strNomFichierTemporaire As String l_blnSauvegardeNouveauClasseur = True Set oExcel = CreateObject("Excel.Application") strFichier = ThisWorkbook.FullName strNomFichierTemporaire = ThisWorkbook.Path & Application.PathSeparator & "SauvegardeTemporaireCOSTING.xlsb" 'enregistrement du classeur actuel dans un fichier temporaire pour libérer l'accès au classeur d'origine Application.DisplayAlerts = False Application.EnableEvents = False ThisWorkbook.SaveAs strNomFichierTemporaire Application.EnableEvents = True Application.DisplayAlerts = True 'ouvre le classeur d'origine dans une nouvelle instance d'excel oExcel.Workbooks.Open strFichier 'ferme le premier classeur et supprime les fichiers temporaires ThisWorkbook.ChangeFileAccess xlReadOnly Kill strNomFichierTemporaire ThisWorkbook.Close False End Sub
La méthode ThisExcelApplication_WorkbookOpen est logiquement appelée, elle vérifie le nom de mon classeur qui vient de s'ouvrir, vérifie si c'est le même nom qu'un classeur déjà existant.
Si ce n'est pas le cas, elle tente d'ouvrir une nouvelle instance d'Excel et d'y ouvrir le nouveau classeur à l'intérieur.
L'exécution plante à la ligne :en indiquant une mémoire insuffisante.
Code : Sélectionner tout - Visualiser dans une fenêtre à part OtherExcelApplication.Workbooks.Open strFichier
Quelqu'un a une idée d'où peut venir ce problème?
Merci d'avance pour votre lecture et votre aide.
Cordialement,
Partager