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

VB.NET Discussion :

Problème Interop excel


Sujet :

VB.NET

  1. #1
    Membre du Club
    Inscrit en
    Juin 2007
    Messages
    112
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 112
    Points : 65
    Points
    65
    Par défaut Problème Interop excel
    Bonjour

    (VS 2010)
    J'ai une application qui génère des fichiers excel.
    Dans une fonction, je cherche à copier un onglet d'un classeur vers un autre.
    ça avait l'air simple.

    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
     
     Private Function copy_Onglet(ByVal Onglet As String) As Boolean
     
            Dim source As Object = xlBook.Worksheets(Onglet)
            Dim cible As Object = Bud.Sheets("Feuil2")
     
            Try
                source.Select()
                source.Copy(cible)
     
            Catch ex As Exception
               Return False
            End Try
     
            Me.ma_ProgressBar.PerformStep()
            Return True
     
        End Function
    Auparavant, j'ai défini :
    Dim xlApp, Bud As New Microsoft.Office.Interop.Excel.Application
    Dim xlBook, Bud_book As Workbook

    j'ai recherché la syntaxe sur des forums et ça a l'air correct. MAIS visual studio s'obstine à répondre "la méthode copy de la classe worksheet a échoué" !

    Qu'est-ce que je n'ai pas compris ?

    Merci de vos lumières

  2. #2
    Membre chevronné Avatar de _Ez3kiel
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2013
    Messages
    836
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2013
    Messages : 836
    Points : 1 961
    Points
    1 961
    Par défaut
    Apparemment problème mémoire ... Voir http://support.microsoft.com/kb/210684/fr

  3. #3
    Inactif  

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

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

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

    À moins que tu ne l'aies ouvert ailleurs, ton classeur de destinanion doit être ouvert, et tu n'as pas besoin d'ouvrir deux instances d'Excel. C'est comme quand on utilise Excel "à la mitaine"; il est possible d'avoir plusieurs classeurs ouverts avec la même instance d'Excel. En m'inspirant de ton code, j'ai fait ceci en vitesse en partant d'un bouton sur une Form.

    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
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
            'Il n'est pas nécessaire d'ouvrir deux applications Excel simultanémnet
            'C'est comme quand on utilise Excel "à la mitaine". Excel peut ouvrir
            'des classeurs simultanément
            Dim Bud As New Microsoft.Office.Interop.Excel.Application
            Bud.Visible = True
            'ouvrir 2 classeurs
            Dim xlBook, Bud_book As Microsoft.Office.Interop.Excel.Workbook
            xlBook = Bud.Workbooks.Open("C:\Users\Clément Marcotte\Documents\CompilationDeDonnées.xlsm")
            Bud_book = Bud.Workbooks.Open("C:\Users\Clément Marcotte\Documents\Classeur1.xlsm")
            ' Désigner une feuille de chaque classeur
            Dim source As Microsoft.Office.Interop.Excel.Worksheet = xlBook.Worksheets("Onglet")
            Dim cible As Microsoft.Office.Interop.Excel.Worksheet = Bud.Sheets("Feuil2")
            Try
                'La plupart du temps, cela ne sert à rien de
                'sélectionner une feuille, parce que l'on peut
                'utiliser directement la plupart des objets
                'source.Select()
                source.Range("A1:L19").Copy()
                cible.Paste()
            Catch ex As Exception
                MessageBox.Show(ex.Message)
     
            End Try
       'fermer les 2 classeurs
            With xlBook
                .Save()
                .Close()
            End With
            With Bud_book
                .Save()
                .Close()
            End With
            'Vérifier dans le gestionnaire de tâches si Excel s'est bien fermé
            'Au besoin, le fermer manuellement.
            Bud.Quit()
     
     
        End Sub
    En gros, on lance une session d'Excel, laquelle ouvre deux classeurs.
    On copie une plage sur une feuille d'un classeur et on la colle sur une feuille de l'autre classeur. Mais note qu'Excel est un animal coriace quand il s'agit de le fermer après un pilotage. Bien souvent, il faut le fermer manuellement. Il me semble que j'ai 2 ou 3 lignes de code à quelque part pour le mater. Quand je mettrai la main dessus, je mettrai un autre message.

    En passant, il existe en natif dans le modèle objet d'Excel, une méthode plus efficace que le presse-papiers pour copier ou déplacer une feuille complète d'un classeur vers un autre. Mais cela fait un peu longtemps que j'ai cela et je n'ai pas le code à portée de la main. Mais je vais quand même chercher ce soir (chez-moi, GMT - 5), pour voir si je ne trouverais pas quelque chose assez rapidement. Mais, le complément, si complément il y a, va venir presque en soirée en France.

  4. #4
    Membre du Club
    Inscrit en
    Juin 2007
    Messages
    112
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 112
    Points : 65
    Points
    65
    Par défaut
    merci _Ez3kiel.

    merci clementmarcotte,
    effectivement, lancer deux instances d'excel est parfaitement inutile et c'est ça qui pose problème d'ailleurs. Avec une seule instance, ça fonctionne.

    Pour quitter propre, je ferme systématiquement l'instance excel en fin de traitement de manière à ne pas laisser une myriade de process excel en cours.

    Je suis preneur de ton code de copie de feuille efficace, ça peut servir.

    cordialement.
    ps : d'abord effrayé par l'heure à laquelle tu as envoyé ton post, j'ai vu ensuite ton décalage horaire ... tu dois être en Guyane, non ?

  5. #5
    Inactif  

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

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

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 903
    Points : 10 166
    Points
    10 166
    Billets dans le blog
    36
    Par défaut
    Citation Envoyé par MadMax4 Voir le message
    merci _Ez3kiel.

    ps : d'abord effrayé par l'heure à laquelle tu as envoyé ton post, j'ai vu ensuite ton décalage horaire ... tu dois être en Guyane, non ?
    Bonjour,

    Non, à Amos, au Québec. À environ 600 km au Nord-Nord-Ouest de Montréal. C'est la ville qui a servi d'inspiration à Bernard Clavel pour Harricana.

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 28/04/2010, 15h35
  2. Réponses: 1
    Dernier message: 03/09/2009, 14h26
  3. Problème concaténation excel/vba
    Par rotterdamt dans le forum Macros et VBA Excel
    Réponses: 18
    Dernier message: 28/11/2005, 17h47
  4. Problème lancement excel à partir d'une DLL
    Par irnbru dans le forum MFC
    Réponses: 8
    Dernier message: 03/11/2005, 12h00
  5. [MFC] [CRecordset] Problème avec Excel
    Par Yellowmat dans le forum MFC
    Réponses: 4
    Dernier message: 20/07/2005, 15h24

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