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 :

Excel interop : copier une feuille proprement


Sujet :

C#

  1. #1
    Membre du Club
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2011
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

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

    Informations forums :
    Inscription : Mars 2011
    Messages : 56
    Points : 43
    Points
    43
    Par défaut Excel interop : copier une feuille proprement
    Bonjour,

    J'ai un code en C# qui ouvre un fichier excel et réalise une (ou plusieurs) copie d'une feuille dans le même classeur.

    J'ai remarqué que à chaque copie, je me retrouve avec une nouvelle instance d'excel (dans le gestionnaire des tâches). Si je supprime la ligne de code qui effectue la copie, l'instance disparait une fois que j'ai libérer les objets com. (cas normal)

    Ma question, est-ce que quelqu'un sait comment effectuer une copie propre ? j'ai beau faire des Marshal.ReleaseComObject sur tous mes objets com utilisés, mais rien à faire. Une bonne âme aurait-elle la solution, merci d'avance.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    XLWorkbook = Wbks.Open("C:\\toto.xls");
    XLSheet = XLWorkbook.Sheets["Model"];
    XLSheet.Copy(XLWorkbook.Sheets["Model"], System.Type.Missing);
    XLWorkbook.SaveAs("C:\\tata.xls");
    XLWorkbook.Close();
    Wbks.Close();
    XLApp.Quit();
     
    Marshal.ReleaseComObject(XLSheet);
    Marshal.ReleaseComObject(XLWorkbook);
    Marshal.ReleaseComObject(Wbks);
    Marshal.ReleaseComObject(XLApp);

  2. #2
    Membre du Club
    Homme Profil pro
    All and nothing
    Inscrit en
    Mai 2012
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : All and nothing

    Informations forums :
    Inscription : Mai 2012
    Messages : 22
    Points : 43
    Points
    43
    Par défaut
    Hello,

    d'après ce que j'ai compris, tu copies une feuille Excel mais dans un nouveau "Classeur" - fichier excel. Dans ton exemple "toto.xls" à "tata.xls".

    Ce qu'il faut faire c'est créer un object Worksheet et l'ajouter à ton classeur courant - "Workbook"

    Dit moi si j'ai mal compris ..

    A+

  3. #3
    Membre du Club
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2011
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

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

    Informations forums :
    Inscription : Mars 2011
    Messages : 56
    Points : 43
    Points
    43
    Par défaut
    Merci pour votre réponse

    En fait, je copie la feuille dans le même classeur. Concrètement, j'ouvre un fichier Excel qui contient 1 seule feuille (toto.xls : c'est mon canevas de base). Cette feuille canevas, je la copie toujours dans le même classeur un certain nombre de fois (dépendant de la quantité de données) et sur chaque copie, j'inscris mes données. J'enregistre ensuite mon classeur sous un nom différent (tata.xls) histoire de conserver mon canevas de base intact.

  4. #4
    Membre du Club
    Homme Profil pro
    All and nothing
    Inscrit en
    Mai 2012
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : All and nothing

    Informations forums :
    Inscription : Mai 2012
    Messages : 22
    Points : 43
    Points
    43
    Par défaut
    Ah donc ca tu le fais déjà. Alors concrètement, tu veux faire quoi ?

  5. #5
    Membre du Club
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2011
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

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

    Informations forums :
    Inscription : Mars 2011
    Messages : 56
    Points : 43
    Points
    43
    Par défaut
    Hé bien lorsque j'effectue ma copie, mes traitements, etc ... et que tout se termine, j'ai toujours une instance d'Excel qui reste en arrière-plan ... sans que Excel ne soit ouvert.

    En cherchant par élimination j'ai découvert que chaque fois que j'exécute la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    XLSheet.Copy(XLWorkbook.Sheets["Model"], System.Type.Missing);
    j'ai une instance d'Excel. Si je ne fais pas de copie, Excel est bien fermé à la fin du traitement.

    J'ai donc une instance d'Excel qui reste à chaque fois que j'exécute mon code, me remplissant gentiment la mémoire.

    ma question initiale était comment faire pour effecuter une copie "propre" d'une feuille Excel.

  6. #6
    Membre du Club
    Homme Profil pro
    All and nothing
    Inscrit en
    Mai 2012
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : All and nothing

    Informations forums :
    Inscription : Mai 2012
    Messages : 22
    Points : 43
    Points
    43
    Par défaut
    D'accord c'est plus clair. Lors d'un développement avec Word j'avais un problème similaire que j'avais réglé de la manière suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Process[] wdProcess;   
    wdProcess = System.Diagnostics.Process.GetProcessesByName("Excel"); 
    for(int i = 0; i < wdProcess.count; i++)
           wdProcess[i].Kill();
    Cela va tuer tout tes processus de type Excel. Le désavantage c'est que si t’utilise cette méthode et que tu as ouvert plusieurs autres classeurs Excels pour une raison ou une autre, normalement, ces processus seront également tués.

    A+

Discussions similaires

  1. [VBA][Excel]Copier une feuille dans un nouveau classeur
    Par illight dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 02/10/2020, 12h51
  2. Réponses: 1
    Dernier message: 14/04/2015, 14h17
  3. Comment copier une feuille EXCEL sous ACCESS?
    Par PAULOM dans le forum Access
    Réponses: 7
    Dernier message: 28/04/2006, 10h01
  4. copier une feuille dans un nouveau doc excel
    Par alkmehd dans le forum Access
    Réponses: 1
    Dernier message: 24/09/2005, 11h01
  5. [EXCEL] copier une feuille sans changer les liaisons
    Par DidRocks dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 09/09/2005, 13h29

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