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 :

Mémoire insuffisante pour effectuer cette action [XL-2010]


Sujet :

Macros et VBA Excel

  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 : 50
    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 Mémoire 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:

    Nom : erreur_excel.jpg
Affichages : 5363
Taille : 27,2 Ko

    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!
    L'homme sage apprend de ses erreurs, l'homme plus sage apprend des erreurs des autres. - Confucius -

    Ma (petite...) chaine Youtube : https://www.youtube.com/channel/UCy-...P2tH5UwOtLaYKw
    Si vous avez quelques minutes, passez donc voir mon site http://www.photospicsandco.fr/
    Envie de tee-shirts (et goodies!) originaux et sympa ? Visitez mon site... http://www.zazzle.com/shkyo30

  2. #2
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 617
    Points : 5 912
    Points
    5 912
    Par défaut
    Bonjour,

    Est-il possible qu'il y ait plusieurs instances d'Excel ouvertes en même temps ?
    MPi²

  3. #3
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 904
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 904
    Points : 10 168
    Points
    10 168
    Billets dans le blog
    36
    Par défaut
    Bonjour,

    Est-ce que tu utilises C# pour piloter Excel par automation, ou bien Est-ce que tu utilises C# pour insérer du code dans l'éditeur VBE pour le faire exécuter par Excel après ?

    Tu peux toujours essayer de "passer" ton classeur dans VBA Code Cleaner de Rob Bovey:

    http://www.appspro.com/Utilities/CodeCleaner.htm

    Sinon, essaie avec Excel visible, au cas où...

    Ou bien essaie d'ouvrir ton classeur en partant d'Excel lui-même, en dehors de Caiguisé; d'un coup qu'il te donnerait un autre message d'erreur.
    À ma connaissance, le seul personnage qui a été diagnostiqué comme étant allergique au mot effort. c'est Gaston Lagaffe.

    Ô Saint Excel, Grand Dieu de l'Inutile.

    Excel n'a jamais été, n'est pas et ne sera jamais un SGBD, c'est pour cela que Excel s'appelle Excel et ne s'appelle pas Access junior.

  4. #4
    Membre chevronné
    Avatar de NVCfrm
    Homme Profil pro
    Administrateur Système/Réseaux - Developpeur - Consultant
    Inscrit en
    Décembre 2012
    Messages
    1 036
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Administrateur Système/Réseaux - Developpeur - Consultant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Décembre 2012
    Messages : 1 036
    Points : 1 917
    Points
    1 917
    Billets dans le blog
    5
    Par défaut
    Bonjour,
    et si tu montrais le code en question pour qu'on y voit clair. Surtout la partie relative au tri. (Je penses que ça doit se situer là).
    Ousmane


    Quand on tombe dans l'eau, la pluie ne fait plus peur.

  5. #5
    Invité
    Invité(e)
    Par défaut
    Bonsoir,
    Si tu n'as pas implémenter la méthode dispose sur ta classe, tu ne déchargeras pas la mémoire!

    Vérifie les procès avec le gestionnaire de taches! Tu verras que les instances d'Excel sont toujours en mémoire
    Dernière modification par Invité ; 10/02/2015 à 23h49.

  6. #6
    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 : 50
    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
    Alors...

    @clementmarcotte: Effectivement je pilote Excel en C# avec automation.

    @parmi: Non quand je démarre, il n'y a aucun Excel en mémoire, je vérifie avec le gestionnaire de tâches avant de lancer mon programme.

    Quand au code, j'ai fais plus de tests hier, et le message d'erreur est au moment où je veux ouvrir le 2ème classeur, donc bien avant le tri.
    J'ouvre le 1er comme ça:
    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!!
    L'homme sage apprend de ses erreurs, l'homme plus sage apprend des erreurs des autres. - Confucius -

    Ma (petite...) chaine Youtube : https://www.youtube.com/channel/UCy-...P2tH5UwOtLaYKw
    Si vous avez quelques minutes, passez donc voir mon site http://www.photospicsandco.fr/
    Envie de tee-shirts (et goodies!) originaux et sympa ? Visitez mon site... http://www.zazzle.com/shkyo30

  7. #7
    Membre chevronné
    Avatar de NVCfrm
    Homme Profil pro
    Administrateur Système/Réseaux - Developpeur - Consultant
    Inscrit en
    Décembre 2012
    Messages
    1 036
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Administrateur Système/Réseaux - Developpeur - Consultant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Décembre 2012
    Messages : 1 036
    Points : 1 917
    Points
    1 917
    Billets dans le blog
    5
    Par défaut
    Bonjour,
    Citation Envoyé par shkyo Voir le message
    Alors...
    ...
    Et c'est là (ligne en rouge) que l'erreur apparaît!!
    Jusqu'à cette ligne rien de méchante gourmandise en mémoire.
    Le message d'erreur est la première piste ... indicative : Excel fait une action, qu'elle ne peut terminer faute de ressources.

    Essaies de reproduire manuellement l'action effectué. Que contient le classeur. Des formules, connexions de données, du vba ... quelles modifications récentes ?
    Ousmane


    Quand on tombe dans l'eau, la pluie ne fait plus peur.

  8. #8
    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 : 50
    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
    Non ce classeur est un export de données de Catia, il y a juste la feuil1 avec 11 colonnes avec 100 à 500 lignes selon les cas, contenant seulement des valeurs, il n'y a aucune formule!!!
    Les cellules sont soient "standard", soient "texte", pas de protection d'aucune sorte...

    Mais est-ce que cela ne vient pas que je lance un seul Excel?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
                    _ApplicationXL = new Microsoft.Office.Interop.Excel.Application();
                    _ApplicationXL.Visible = true;
    Ne faudrait-il pas une instance par classeur?
    L'homme sage apprend de ses erreurs, l'homme plus sage apprend des erreurs des autres. - Confucius -

    Ma (petite...) chaine Youtube : https://www.youtube.com/channel/UCy-...P2tH5UwOtLaYKw
    Si vous avez quelques minutes, passez donc voir mon site http://www.photospicsandco.fr/
    Envie de tee-shirts (et goodies!) originaux et sympa ? Visitez mon site... http://www.zazzle.com/shkyo30

  9. #9
    Membre chevronné
    Avatar de NVCfrm
    Homme Profil pro
    Administrateur Système/Réseaux - Developpeur - Consultant
    Inscrit en
    Décembre 2012
    Messages
    1 036
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Administrateur Système/Réseaux - Developpeur - Consultant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Décembre 2012
    Messages : 1 036
    Points : 1 917
    Points
    1 917
    Billets dans le blog
    5
    Par défaut
    Citation Envoyé par shkyo Voir le message
    ...
    Ne faudrait-il pas une instance par classeur?
    Possible, mais je ne crois pas. Il n'est pas nécessaire d'avoir plus d'une instance, sauf traitements particuliers.

    Catia. Hum ... (je ne connais pas cet outil de CAO. C'est pas mon domaine.)
    Mais c'est déjà une piste intéressante pour situer l'origine de ton problème. Le code d'exportation du fichier demande peut-être un traitement titanesque.

    Que donne la reproduction manuelle de ton code d'ouverture des 2 fichiers à partir d'Excel ?
    Ousmane


    Quand on tombe dans l'eau, la pluie ne fait plus peur.

  10. #10
    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 : 50
    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
    Non, c'est juste un export d'infos toutes bêtes (nom, référence, valeurs numériques, etc...), il peut le faire dans un fichier texte, ou de l'Excel basique

    Quand je reproduis la manipulation "à la main" que devrait faire mon code, avec les même fichiers bien sûr, tout marche impec, une seule instance Excel en mémoire et aucune erreur!!

    Je viens d'essayer en lançant 2 instances d'Excel, je n'ai plus l'erreur des ressources insuffisantes, par contre quand je fais mes "copier/coller" entre les 2 classeurs, la moitié des "coller" se fait sous forme d'image et non plus de valeurs...

    Peut-être que tout laisser par défaut à l'ouverture:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    _MonClasseurBase = _LesWorkBooks.Open(_NomFichierBase, _M, _M, _M, _M, _M, _M, _M, _M, _M, _M, _M, _M, _M, _M);
    n'est pas une bonne idée? Mais dans ce cas, quel est le bon paramètre à changer...
    L'homme sage apprend de ses erreurs, l'homme plus sage apprend des erreurs des autres. - Confucius -

    Ma (petite...) chaine Youtube : https://www.youtube.com/channel/UCy-...P2tH5UwOtLaYKw
    Si vous avez quelques minutes, passez donc voir mon site http://www.photospicsandco.fr/
    Envie de tee-shirts (et goodies!) originaux et sympa ? Visitez mon site... http://www.zazzle.com/shkyo30

  11. #11
    Membre actif Avatar de Many31
    Profil pro
    Inscrit en
    Février 2007
    Messages
    198
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2007
    Messages : 198
    Points : 210
    Points
    210
    Par défaut
    Qui dit export CATIA dit surement extension csv et non xls?
    Da vinci Code....


    Code??? qui a dit Code?

  12. #12
    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 : 50
    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
    Citation Envoyé par Many31 Voir le message
    Qui dit export CATIA dit surement extension csv et non xls?
    Oui, mais le soucis ne vient pas de là, les fichiers sont propres, je les ouverts et utilisés sur plusieurs pc sans aucun problème...

    C'est plutôt le fait que je n'arrive pas à ouvrir deux classeurs en même temps dans une seule instance Excel avec mon code en C#, pourtant cela ne semble pas si exotique que ça!

    Au fait, j'ai épluché la doc de la méthode Workbooks.Open et les réglages par défaut sont très bien dans mon cas, normalement rien de bloquant de ce côté-là...
    L'homme sage apprend de ses erreurs, l'homme plus sage apprend des erreurs des autres. - Confucius -

    Ma (petite...) chaine Youtube : https://www.youtube.com/channel/UCy-...P2tH5UwOtLaYKw
    Si vous avez quelques minutes, passez donc voir mon site http://www.photospicsandco.fr/
    Envie de tee-shirts (et goodies!) originaux et sympa ? Visitez mon site... http://www.zazzle.com/shkyo30

  13. #13
    Membre actif Avatar de Many31
    Profil pro
    Inscrit en
    Février 2007
    Messages
    198
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2007
    Messages : 198
    Points : 210
    Points
    210
    Par défaut
    Sauf que j'ai déjà eu des soucis de mémoire justement à cause du CSV :/ ca fait un bail j'ai pas trop souvenir du problème ni du contournement mais avez vous essayé le même code en ciblant des fichiers excel basiques (juste pour tester, de vrais xls pas une extension particulière)

    Il me semble qu'à lépoque je comparais 2 fichiers CSV et que j'avais du passer par un tableau variable pour "charger" temporairement le premier CSV avant de libérer la mémoire, charger le second dauns un autre tableau variable pour enfin comparer le tout...
    Plus souvenir exacte, mais il me semble aussi que j'avais du remettre Application.screenupdating/enableevents ou Application.visible à vrai le temps de l'ouverture du fichier etc.

    Bref pour moi c'est le CSV qui est à mettre en cause.
    Da vinci Code....


    Code??? qui a dit Code?

  14. #14
    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 : 50
    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 fonctionne enfin!!! En Excel 2010 seulement...

    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, 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...

    Sniff... Des suggestions??
    L'homme sage apprend de ses erreurs, l'homme plus sage apprend des erreurs des autres. - Confucius -

    Ma (petite...) chaine Youtube : https://www.youtube.com/channel/UCy-...P2tH5UwOtLaYKw
    Si vous avez quelques minutes, passez donc voir mon site http://www.photospicsandco.fr/
    Envie de tee-shirts (et goodies!) originaux et sympa ? Visitez mon site... http://www.zazzle.com/shkyo30

  15. #15
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 617
    Points : 5 912
    Points
    5 912
    Par défaut
    Excel 2013 est très capricieux...

    On est en train de le tester au bureau et ça plante souvent pour différentes raisons.
    Une des raisons est qu'il se sert de 2 gb de mémoire max pour faire ses traitements.
    S'il y a beaucoup de formules, ça plante ou gèle.

    Il y a des problèmes au niveau graphique aussi ou encore des problèmes de compatibilité avec des applications externes.

    Le web est rempli de problèmes là-dessus...
    MPi²

  16. #16
    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 : 50
    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
    Je viens de regarder un truc, mon pc de dév utilise Visual Studio 2010 (complet pas express) avec Office pro 2010, du coup la dll "microsoft.office.interop.excel.dll" est en version office12 alors que Excel 2013 c'est plutôt office15...

    C'est peut-être de ce côté-là qu'il faut chercher, qu'en pensez-vous??
    L'homme sage apprend de ses erreurs, l'homme plus sage apprend des erreurs des autres. - Confucius -

    Ma (petite...) chaine Youtube : https://www.youtube.com/channel/UCy-...P2tH5UwOtLaYKw
    Si vous avez quelques minutes, passez donc voir mon site http://www.photospicsandco.fr/
    Envie de tee-shirts (et goodies!) originaux et sympa ? Visitez mon site... http://www.zazzle.com/shkyo30

  17. #17
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    test ce code il te permet d'utiliser la version d'Excel de ta machine!

    Code Vb.net : 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
    import System
    Import System.Collections.Generic
    Import System.Linq
    Import System.Text
    Import System.Runtime.InteropServices
     
    Dim crObj as CreaObj=new CreaObj
     
     dim ExcelApp as object=crObj.CreateObject("Excel.Application")
     
     
     
     
        public class CreaObj
            Public Function CreateObject(ByVal app As String) As Object
            Dim AppType As Object = Type.GetTypeFromProgID(app)
            Dim ApplInst As Object = Activator.CreateInstance(AppType)
            Return ApplInst
           End Function
    End class
    Code C# : 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
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Runtime.InteropServices;
     
    namespace WindowsFormsApplication1
    {
         CreatGetObject crObj=new CreatGetObject();
        dynamic ExcelApp =crObj.CreateObject("Excel.Application");
        public class CreatGetObject
        {
     
            public dynamic GetObject(String App)
            {
     
                try
                {
                    return (dynamic)Marshal.GetActiveObject(App);
                }
                catch
                {
                    return (dynamic)CreateObject(App);
                }
     
            }
            public dynamic CreateObject(string app)
            {
                dynamic AppType = Type.GetTypeFromProgID(app);
                dynamic ApplInst = Activator.CreateInstance(AppType);
                return ApplInst;
            }
        }
    }

  18. #18
    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 : 50
    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
    Citation Envoyé par rdurupt Voir le message
    Bonjour,
    test ce code il te permet d'utiliser la version d'Excel de ta machine!
    ....
    Merci de ta réponse, mais je suis désolé car n'importe où que je mette ton code en C#, VS n'en veut pas... Ceci dit je ne suis pas un pro du C#...

    Si je le met juste après ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    namespace NomenclatureEmbout
    {
    ...
    il n'en veut pas, après ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    public partial class FormBase : Form
        {...
    non plus et après ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    public FormBase()
            {...
    pas mieux...

    En plus, si j'utilise "using System.Runtime.InteropServices;" au lieu de "using Microsoft.Office.Interop.Excel;", je n'ai plus accès aux interfaces _Workbook, _Worksheet, Range, etc...

    J'ai loupé un truc?
    L'homme sage apprend de ses erreurs, l'homme plus sage apprend des erreurs des autres. - Confucius -

    Ma (petite...) chaine Youtube : https://www.youtube.com/channel/UCy-...P2tH5UwOtLaYKw
    Si vous avez quelques minutes, passez donc voir mon site http://www.photospicsandco.fr/
    Envie de tee-shirts (et goodies!) originaux et sympa ? Visitez mon site... http://www.zazzle.com/shkyo30

  19. #19
    Invité
    Invité(e)
    Par défaut
    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
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Runtime.InteropServices;
     
    namespace NomenclatureEmbout
    {
        public class CreatGetObject
        { 
            public dynamic GetObject(String App)
            {
                try
                {
                    return (dynamic)Marshal.GetActiveObject(App);
                }
                catch
                {
                    return (dynamic)CreateObject(App);
                }
            }
            public dynamic CreateObject(string app)
            {
                dynamic AppType = Type.GetTypeFromProgID(app);
                dynamic ApplInst = Activator.CreateInstance(AppType);
                return ApplInst;
            }
        }
     
    public partial class FormBase : Form
        { dynamic AppType=Null
          Dim crObj as CreaObj=Null;
          public FormBase()
            {
                crObj =new CreaObj;
               ExcelApp =crObj.CreateObject("Excel.Application");
            }
         }
    }

  20. #20
    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 : 50
    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
    mon code se lance, mais par contre l'erreur du manque de mémoire se reproduit de nouveau...

    mais bon, ce n'est pas trop grave, on a beaucoup plus de Office 2010 que des 2013 à la boite, d'ici à ce qu'on migre, j'aurais trouvé une solution...
    L'homme sage apprend de ses erreurs, l'homme plus sage apprend des erreurs des autres. - Confucius -

    Ma (petite...) chaine Youtube : https://www.youtube.com/channel/UCy-...P2tH5UwOtLaYKw
    Si vous avez quelques minutes, passez donc voir mon site http://www.photospicsandco.fr/
    Envie de tee-shirts (et goodies!) originaux et sympa ? Visitez mon site... http://www.zazzle.com/shkyo30

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 3
    Dernier message: 12/02/2015, 16h35
  2. Mémoire insuffisante pour cette opération
    Par NAHAC dans le forum Débuter
    Réponses: 6
    Dernier message: 13/04/2014, 15h59
  3. [XL-2003] microsoft forms mémoire insuffisante pour cette opération
    Par tomo80 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 29/07/2011, 13h42
  4. Mémoire insuffisante pour cette opération
    Par CaptainSmoker dans le forum Windows Forms
    Réponses: 2
    Dernier message: 12/04/2011, 17h52
  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