IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

[OFF-2013] Problème mémoire insuffisante ouverture second Excel


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Décembre 2014
    Messages : 6
    Par défaut [OFF-2013] Problème mémoire insuffisante ouverture second Excel
    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.

    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
    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.
    Mais mon problème ne vient pas de là.

    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
    Lorsque j'ouvre un second classeur alors que ma première appli possédant ce code est ouverte.
    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 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    OtherExcelApplication.Workbooks.Open strFichier
    en indiquant une mémoire insuffisante.
    Quelqu'un a une idée d'où peut venir ce problème?

    Merci d'avance pour votre lecture et votre aide.
    Cordialement,

  2. #2
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut
    Bonjour !

    Résistant à l'envie de demander « à quoi bon plusieurs instances d'Excel à part planter Windows ?! »
    je ne saurais que trop conseiller de ne pas ouvrir plus de deux instances d'Excel
    étant déjà une application fort gourmande, juste avec un tant soit peu de logique …

    Sinon avec 32 Go de RAM mais, faut-il encore
    penser à désactiver les évènements afin de ne pas se lancer dans une ouverture sans fin !

    ___________________________________________________________________________________________________________
    Je suis Paris, Egypte, Nigeria, New-York, Mogadicio, Barcelone, London, Manchester, Stockholm, Istanbul, Berlin, Nice, Bruxelles, Charlie, …

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Décembre 2014
    Messages : 6
    Par défaut Réponse
    Bonjour marc,

    Nous avons besoin d'avoir des instances d'excel différentes car pendant différents traitements réalisés dans nos applis,
    Nous masquons les applications.
    Si l'on masque une instance d'excel qui contient plusieurs classeurs ils sont tous masqués.
    D'où l'utilité d'avoir des instances différentes.

    Cordialement,

  4. #4
    Expert éminent

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 572
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Conseil, Formation, Développement - Indépendant

    Informations forums :
    Inscription : Février 2010
    Messages : 8 572
    Par défaut
    Bonjour
    Citation Envoyé par Marc-L Voir le message
    Sinon avec 32 Go de RAM mais...
    Sous réserve d'utiliser Office 64 bits car la version 32Bits ne peut utiliser que 3Go de la ram au mieux.

    Edit une nouveauté d'adressage seulement compatible avec 2016 (ou plutôt 365 semble-t-il) qui double le mémoire allouée à Excel

  5. #5
    Membre Expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 266
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 266
    Par défaut
    Bonjour,

    Sous réserve d'utiliser Office 64 bits car la version 32Bits ne peut utiliser que 3Go de la ram au mieux.
    3 Go par session non ?

    Si l'on masque une instance d'excel qui contient plusieurs classeurs ils sont tous masqués.
    Tu peux masquer des classeurs dans une session :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Windows("Test.xlsx").Visible = False
    eric

  6. #6
    Expert éminent

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 572
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Conseil, Formation, Développement - Indépendant

    Informations forums :
    Inscription : Février 2010
    Messages : 8 572
    Par défaut
    RE

    Non toutes les applications 32 bits ne savent adresser que les 3 premiers GO.

    En multi session il semble que ce soit 2GO par session https://support.microsoft.com/en-us/...nce-by-default

  7. #7
    Membre Expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 266
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 266
    Par défaut
    Oui. Ce que je voulais préciser c'est que chaque instance est considérée comme une appli à part entière avec sa propre allocation mémoire. Enfin c'est qui me parait le plus logique.
    Avec 32 Go on pourrait (théoriquement) lancer une dizaine de sessions, sans être obligé de passer par excel 64 bits.

Discussions similaires

  1. [Débutant] probléme Mémoire insuffisante
    Par nabileon dans le forum VB.NET
    Réponses: 1
    Dernier message: 16/09/2014, 12h15
  2. Réponses: 2
    Dernier message: 07/01/2014, 08h51
  3. Réponses: 1
    Dernier message: 29/06/2007, 11h21
  4. [VB 6] Problème lors de l'ouverture d'Excel depuis VB
    Par pom dans le forum VB 6 et antérieur
    Réponses: 9
    Dernier message: 10/02/2007, 20h50
  5. problème à l'ouverture d'excel
    Par Destiny dans le forum Excel
    Réponses: 3
    Dernier message: 25/10/2006, 07h58

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo