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 :

plantage ouverture formulaire -> trop de mémoire utilisée ?


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Août 2010
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 23
    Par défaut plantage ouverture formulaire -> trop de mémoire utilisée ?
    Bonjour,
    Voici mon problème : j’ai fait un fichier Excel contenant des macros VBA. Il y a dans cette macro un formulaire « FrmPrgInsert », ce formulaire contient 4 onglets « Frame » qui contiennent chacun 72 textbox (donc 288 textbox au total). J’utilise des évènements change sur ces textbox, mais ces évènements sont regroupés en classes, ce qui fait qu’en réalité il n’ya que 4 évènements « change » au total (un évènement différent par onglet).

    Le problème c’est que à l’ouverture du formulaire (« FrmPrgInsert.show ») il y a des moments où j’ai le message « Microsoft Excel a rencontré un problème et doit fermer ». J’ai constaté qu’à certains moments de la journée, le formulaire s’ouvre sans problème, plusieurs fois d’affilée. A d’autres moments de la journée, cela plante systématiquement et je reçois le message d’erreur.

    Quand cela plante systématiquement, j’ai trouvé une astuce pour pouvoir malgré tout ouvrir le formulaire : je mets un point d’arrêt sur la première ligne du « userform_activate », je lance le « frmPrgInsert.show », je tape une fois sur « f8 » pour poursuivre la procédure « userform_activate », et ensuite le formulaire FrmPrgInsert s’ouvre tout le temps sans aucun problème, jusqu’à ce que je referme le fichier Excel. Si je réouvre le fichier, je dois recommencer la même manip « point d’arrêt » pour que cela fonctionne.

    Je travaille en réseau, je me demande si ce plantage n’est pas dû aux évènements des 288 textbox qui se chargent durant le « userform_activate ». Pensez-vous que cela puisse venir de ça ? Si oui, quelle astuce proposez-vous pour contourner ce problème ?

    Sur la plupart des forums, les solutions proposées que j’ai pu lire étaient de réinstaller Excel, ou de réinstaller l’antivirus, ou encore d’utiliser « CCleaner », mais cette macro va être utilisée par beaucoup de monde et je ne peux pas demander aux gens de tout réinstaller. Car ce problème a lieu sur tous les Pc différents où la macro a été ouverte.

    D’avance merci, et bonne journée.

  2. #2
    Membre averti
    Inscrit en
    Août 2010
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 23
    Par défaut
    ayant trouvé la réponse, je me réponds à moi-même pour ceux qui auraient la même galère.

    Placer "doevents" au milieu de la partie du code "userform_activate" qu'on soupçonne de prendre trop de mémoire, ou bien alors un "application.wait", cela permet de faire une sorte de pause qui laisse le temps à Excel de mettre en mémoire toutes les variables/évènements du userform_activate

    merci homerlehamster, la classe !!!!

  3. #3
    Membre averti
    Inscrit en
    Août 2010
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 23
    Par défaut
    en fait le problème est réapparu peu de temps après.

    En traçant le code, je me suis aperçu que le bug "microsoft excel a rencontré un problème et doit fermer" se produit sur n'importe quelle ligne qui fait référence au formulaire, un peu comme si Excel ne connaissait pas le nom du formulaire.

    Après des dizaines d'heures de recherche sur Internet, à atterrir sur des forums angliches et même finnois (), quelqu'un a proposé LA solution miracle :

    à l'ouverture du fichier Excel, activer le formulaire grâce à la syntaxe :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ThisWorkbook.VBProject.VBComponents("frmprginsert").Activate
    depuis plus d'un mois, je n'ai plus eu affaire à ce bug.

    attention, il semble que la "bililbliothèque" "Microsoft Visual Basic for Applications Extensibility 5.3" doit être cochée, tout comme l'option "Faire confiance au projet Visual Basic"

    voici le code pour cocher automatiquement la bibliothèque, et tester si l'option "Faire confiance au projet Visual Basic" est cochée, si ce n'est pas le cas, demander à l'utilisateur de la cocher manuellement (impossible de la cocher par VBA, pr des raisons de sécurité)
    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
     
        Dim vbpName As String
        Dim i As Integer
        Dim VarRefOk As Boolean
     
     
        On Error Resume Next
     
        'on contrôle si l'option "Faire confiance au projet Visual Basic" (Outils, macros, sécurité, éditeurs approuvés) est bien cochée (sinon plantage sur la ligne "Application.VBE.MainWindow.Visible = False")
        vbpName = ThisWorkbook.VBProject.Name
        If vbpName = vbNullString Then
            varMsg = "Please go to : Tools, Macro, Security, Trusted Publishers, check 'Trust access to Visual Basic Project', and double-click again."
            rpns = MsgBox(varMsg, vbInformation + vbOKOnly, cntTitre)
            Exit Sub
        End If
     
        On Error Resume Next
     
        'on teste si la référence "Microsoft Visual Basic for Applications Extensibility 5.3" est bien cochée, sinon sur certains pc, l'instruction "ThisWorkbook.VBProject.VBComponents(30).Activate" ne sera pas effectuée
       VarRefOk = False
     
        With ThisWorkbook.VBProject.References
            For i = 1 To .Count
                If .Item(i).GUID = "{0002E157-0000-0000-C000-000000000046}" Then
                    VarRefOk = True
                End If
            Next
        End With
     
        'si elle n'est pas cochée on la coche
        If VarRefOk = False Then
            On Error Resume Next
            ActiveWorkbook.VBProject.References.AddFromGuid _
            "{0002E157-0000-0000-C000-000000000046}", 5, 3
        End If
    j'espère que ça sera utile à ceux qui galèreront à trouver la solution à ce bug très mystérieux

  4. #4
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Mars 2011
    Messages
    109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 109
    Par défaut
    Comment te remercier ?
    Je suis sur ce p... de problème depuis plusieurs jours et ça commençait sérieusement à me prendre la tête.
    C'est le premier bug que me pose autant de problème. Merci à toi

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Trop de mémoire utilisée pour rien
    Par MonsieurPouet dans le forum Administration système
    Réponses: 9
    Dernier message: 27/02/2012, 10h27
  2. Process Apache qui utilise trop de mémoire
    Par charline_irlande dans le forum Apache
    Réponses: 2
    Dernier message: 26/10/2009, 17h29
  3. Application utilise trop de mémoire
    Par blaster681 dans le forum Général Java
    Réponses: 20
    Dernier message: 21/03/2009, 19h22
  4. Réponses: 14
    Dernier message: 03/10/2008, 11h05
  5. Trop de mémoire utilisée par SQL Server
    Par sylvie75 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 24/08/2006, 12h46

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