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 :

Instanciation d'un objet Classeur Excel [Débutant]


Sujet :

VB.NET

  1. #1
    Nouveau membre du Club
    Inscrit en
    Septembre 2010
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 52
    Points : 31
    Points
    31
    Par défaut Instanciation d'un objet Classeur Excel
    Bonjour tout le monde, voici un sujet maintes fois traité mais je n'ai pas trouvé de solution dans mon cas:
    Dans une application WinForms, j'ouvre et je ferme un classeur Excel avec la suite d'instructions suivantes:

    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
    Option Explicit On
    Imports Microsoft.Office.Interop.Excel
    Imports Windows.Win32.System
    Imports Excel = Microsoft.Office.Interop.Excel
     
    Public Class Form1
     
        Public appExcel As Excel.Application     'Application Excel
        Public wbExcel As Excel.Workbook         'Classeur Excel
        Public wsExcel As Excel.Worksheet        'Feuille Excel
    ......
        appExcel = CreateObject("Excel.Application")
        wbExcel = appExcel.Workbooks.Open(NomFichier)
        wsExcel = wbExcel.Worksheets("ACCUEIL")
    ......  
        appExcel.Visible = True
        wbExcel.Save()
        wbExcel.Close() 'Fermeture du classeur Excel
        appExcel.Quit() 'Fermeture de l'application Excel
        appExcel = Nothing
        wbExcel = Nothing
    Jusque là, tout va bien.
    Maintenant, j'ai ouvert une nouvelle application CONSOLE et j'essaye d'utiliser la même méthode pour travailler avec Excel:
    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
    Option Explicit On
    Imports System.Drawing
    Imports System.Reflection
    Imports Microsoft.Office.Interop.Excel
    Imports Excel = Microsoft.Office.Interop.Excel
     
    Module Program
     
        Public appExcel As Excel.Application     'Application Excel
        Public wbExcel As Excel.Workbook         'Classeur Excel
        Public wsExcel As Excel.Worksheet        'Feuille Excel
    .......
        Sub Main()
        appExcel = CreateObject("Excel.Application")
        wbExcel = appExcel.Workbooks.Open(StrInput)
         wsExcel = wbExcel.Worksheets("ACCUEIL")
    ......
        wbExcel.Save()
        wbExcel.Close() 'Fermeture du classeur Excel
        appExcel.Quit() 'Fermeture de l'application Excel
    C'est ici que le problème apparaît: sur l'instruction j'ai l'erreur "System.NullReferenceException:Object Reference not set to an instance of an object".
    Je comprends ce qui est écrit mais je cherche comment corriger cette erreur.
    D'avance merci de votre aide

  2. #2
    Membre émérite Avatar de Thumb down
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2019
    Messages
    1 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2019
    Messages : 1 501
    Points : 2 297
    Points
    2 297
    Par défaut
    Bonjour,
    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
    option Explicit On
    Imports System.Drawing
    Imports System.Reflection
    Imports Microsoft.Office.Interop.Excel
    Imports Excel = Microsoft.Office.Interop.Excel
     
    Module Program
    Sub Main()
        With CreateObject("Excel.Application")
                With .Workbooks.Open("c:\fichier.xls")
                             with .Worksheets("ACCUEIL")
                                     'traitement ACCUEIL 
                              End with 
                             .Save()
                             .Close() 'Fermeture du classeur Excel
                      End with 
                      .Quit() 'Fermeture de 
          End with 
    End sub

  3. #3
    Nouveau membre du Club
    Inscrit en
    Septembre 2010
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 52
    Points : 31
    Points
    31
    Par défaut
    Bonjour,
    merci pour cette réponse mais j'ai un peu de mal à l'appliquer telle qu'elle est présentée du fait de la structure de l'application: Tout se passe dans un seul module mais Excel est ouvert dans une routine, utilisé dans différentes routines en changeant de feuille, fermé dans une autre routine dédiée à cet effet... bref, ce n'est pas commode d'imbriquer tout le code dans une série de " with / end with".

    D'autre part, je n'ai pas compris ce qui coinçait dans l'utilisation des variables publiques
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Public appExcel As Excel.Application     'Application Excel
    Public wbExcel As Excel.Workbook         'Classeur Excel
    Public wsExcel As Excel.Worksheet        'Feuille Excel
    J'espère que l'instanciation n'est pas de la sorcellerie!

    En attendant mieux, je vais, malgré tout, essayer la solution proposée et je vous tiens au courant. Accessoirement, vous avez un tuto sur ce genre de sujet? Affaire à suivre, à bientôt et merci

  4. #4
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 795
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 795
    Points : 5 581
    Points
    5 581
    Par défaut
    NullReferenceException indique que tu utilise un objet qui vaut Nothing.
    Pour corriger, il faut déjà regarder qu'elle référence d'objet n'est pas instanciée.

    Et puis, ces deux codes sembles travailler sur le même fichier.
    Cela ne m'étonnerai pas que le message que tu obtiens soit en réalité une conséquence d'un conflit sur une ressource partagée.

  5. #5
    Nouveau membre du Club
    Inscrit en
    Septembre 2010
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 52
    Points : 31
    Points
    31
    Par défaut
    re-bonjour,
    Merci à vous, votre message m'a fait réfléchir et j'ai trouvé l'erreur: j'ai appelé deux fois la routine qui ferme Excel et la deuxième fois, comme le classeur était déja fermé, il est tombé en erreur sur l'instruction d'enregistrement du classeur. C'est tout bête! Désolé pour l'erreur de débutant....

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 03/09/2009, 19h23
  2. Lier un objet à un classeur excel
    Par bauhaus44 dans le forum Excel
    Réponses: 3
    Dernier message: 03/07/2007, 22h18
  3. Ouverture classeur excel en VBSCRIPT
    Par coeur74 dans le forum ASP
    Réponses: 2
    Dernier message: 20/01/2005, 10h11
  4. [VBA-Excel,VB6,Fichier texte]enregistrer un classeur excel..
    Par Tarul dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 11/01/2005, 14h09
  5. Manipulation d'un Objet OLE Excel ?
    Par NiKro75 dans le forum VBA Access
    Réponses: 10
    Dernier message: 05/07/2004, 18h43

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