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

C# Discussion :

[Pilotage Excel] Pb d'erreur 'mémoire est insuffisante pour effectuer cette action'


Sujet :

C#

  1. #1
    Membre expérimenté Avatar de shkyo
    Homme Profil pro
    Développeur Robotique - Administrateur systèmes
    Inscrit en
    Juin 2003
    Messages
    841
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur Robotique - Administrateur systèmes

    Informations forums :
    Inscription : Juin 2003
    Messages : 841
    Points : 1 474
    Points
    1 474
    Par défaut [Pilotage Excel] Pb d'erreur 'mémoire est insuffisante pour effectuer cette action'
    Bonjour à tous,

    Je développe une macro Excel en c# avec Visual Studio 2010, sous Windows 7 Pro x64 avec Excel 2010, à la base c'est assez simple:

    J'ai un fichier cible déjà mis en forme, j'ouvre un autre fichier où je fais un tri par ordre croissant sur une zone donnée, puis je sélectionne et copy/colle des lignes d'un fichier à l'autre.
    Tout se passe en mémoire, j'affiche Excel quand le traitement est fini ce qui gagne beaucoup de temps!

    J'ai fais des dizaines d'essais durant la mise au point sans aucun problème particulier, mais depuis la semaine dernière impossible de réaliser le traitement car j'ai le message suivant:

    Pièce jointe 168662

    J'ai déjà vérifié que je n'avais bien qu'un seul Excel en mémoire, mon PC a 16Go de ram dont 12 sont dispo, j'ai désinstallé/réinstallé tout le pack Office, mais rien n'y fait!

    J'ai même compilé et transféré le programme de ma macro sur un autre PC qui a Office 2013 et il fait la même erreur!!!

    Si quelqu'un a des idées ou des suggestions car je suis vraiment coincé...
    Merci d'avance!

  2. #2
    Membre expérimenté Avatar de shkyo
    Homme Profil pro
    Développeur Robotique - Administrateur systèmes
    Inscrit en
    Juin 2003
    Messages
    841
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur Robotique - Administrateur systèmes

    Informations forums :
    Inscription : Juin 2003
    Messages : 841
    Points : 1 474
    Points
    1 474
    Par défaut
    Voici un peu plus de détails, je les découvre au fur et à mesure que je tente de débugger le problème...

    L'erreur se produit à l'ouverture de mon second fichier seulement, j'ouvre le 1er de la façon suivante:
    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
                try
                {
                    _LesWorkBooks = _ApplicationXL.Workbooks;
                    _NomFichierBase="C:\\Temp\\Diffusion de plan - trame.xlsx";
                    //ouvre le fichier Excel de base situé dans C:\Temp
                    _MonClasseurBase = _LesWorkBooks.Open(_NomFichierBase, _M, _M, _M, _M, _M, _M, _M, _M, _M, _M, _M, _M, _M, _M);
     
                    //Active la feuille 2 
                    _MaFeuilleBase = (_Worksheet)_MonClasseurBase.Sheets["DP-Page 2"];
                    _MaFeuilleBase.Activate();
                }
                catch (Exception FormBOpen)
                {
                    MessageBox.Show(FormBOpen.Message);
                }
    et j'essaie d'ouvrir le 2ème de cette façon:
    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
                DialogResult result = opFileDialogParcourir.ShowDialog();
                if (result == DialogResult.OK)
                {
                    _NomFichier = opFileDialogParcourir.FileName;
                    TXTBPathFile.Text = _NomFichier.ToString();
                }
                if (TXTBPathFile.Text.Length!=0)
                {
                    try
                    {
                        _LesWorkBooks = _ApplicationXL.Workbooks;
                        //ouvrir le fichier Excel sélectionné
                        _MonClasseur = _LesWorkBooks.Open(_NomFichier, _M, _M, _M, _M, _M, _M, _M, _M, _M, _M, _M, _M, _M, _M);
    
                        //Active la feuille 1 
                        _MaFeuille = (_Worksheet)_MonClasseur.Sheets[1];
                        _MaFeuille.Activate();
    
                    }
                    catch (Exception Parcourir)
                    {
                        MessageBox.Show(Parcourir.Message);
                    }
                }
    Et c'est là (ligne en rouge) que l'erreur apparaît!!

  3. #3
    Membre expérimenté Avatar de shkyo
    Homme Profil pro
    Développeur Robotique - Administrateur systèmes
    Inscrit en
    Juin 2003
    Messages
    841
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur Robotique - Administrateur systèmes

    Informations forums :
    Inscription : Juin 2003
    Messages : 841
    Points : 1 474
    Points
    1 474
    Par défaut
    A priori, cela n'a pas inspiré beaucoup de monde... Je transmets quand même la solution que j'ai trouvé même si elle n'est pas parfaite!

    Bon alors j'ai fais deux choses, premièrement une modif du code d'ouverture des classeurs:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
                try
                {
                    _NomFichierBase = "C:\\Temp\\Diffusion de plan - trame.xlsx";
                    //ouvre le fichier Excel de base situé dans C:\Temp
                    _MonClasseurBase = _ApplicationXL.Workbooks.Open(_NomFichierBase, _M, _M, _M, _M, _M, _M, _M, _M, _M, _M, _M, _M, _M, _M);
                    //Active la feuille 2 
                    _MaFeuilleBase = (_Worksheet)_MonClasseurBase.Sheets["DP-Page 2"];
                    _MaFeuilleBase.Activate();
                }
                catch (Exception FormBOpen)
                {
                    MessageBox.Show(FormBOpen.Message);
                }
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
                    try
                    {
                        //ouvrir le fichier Excel sélectionné
                        _MonClasseur = _ApplicationXL.Workbooks.Open(_NomFichier, _M, _M, _M, _M, _M, _M, _M, _M, _M, _M, _M, _M, _M, _M);
                        //Active la feuille 1 
                        _MaFeuille = (_Worksheet)_MonClasseur.Sheets[1];
                        _MaFeuille.Activate();
                    }
                    catch (Exception Parcourir)
                    {
                        MessageBox.Show(Parcourir.Message);
                    }
    Ensuite, un truc tout bête concernant le deuxième classeur issu de l'export que je tentais d'ouvrir, c'était un .xls, il l'ouvrait (ou essayait en tout cas) en mode de compatibilité...
    Je l'ai donc ouvert à part, converti en .xlsx, et après zou plus aucune erreur!!

    MAIS, car il y a un MAIS, ça fonctionne super en Excel 2010, et quand j'essaye mon programme sur un Excel 2013, ben ça me refait la même erreur "pas assez de mémoire" bla bla bla...

  4. #4
    Expert éminent
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 170
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 170
    Points : 7 422
    Points
    7 422
    Billets dans le blog
    1
    Par défaut
    Juste comme ça, ils font quelle taille les fichiers.

    Quand tu les ouvre manuellement dans Excel, ça bouffe combien ?

    Tu compiles en 64 bits ?
    Excel est 32 ou 64 bits ?

    Sinon, je doute fortement que l'erreur de dépassement de mémoire soit vraiment liée à la taille de la mémoire, mais plutôt à un problème d'adressage mémoire... Reste à comprendre d'où ça vient

Discussions similaires

  1. [XL-2010] Mémoire insuffisante pour effectuer cette action
    Par shkyo dans le forum Macros et VBA Excel
    Réponses: 21
    Dernier message: 12/02/2015, 16h46
  2. Réponses: 9
    Dernier message: 14/05/2012, 10h33
  3. [AC-2002] Mémoire libre insuffisante pour mettre à jour l'affichage
    Par JonathanMQ dans le forum IHM
    Réponses: 4
    Dernier message: 16/10/2010, 17h32
  4. [A-07] Erreur mémoire libre insuffisante
    Par guen dans le forum IHM
    Réponses: 1
    Dernier message: 25/02/2009, 10h13
  5. Réponses: 5
    Dernier message: 12/02/2007, 13h05

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