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

Dotnet Discussion :

[Excel] Probleme avec Excel.Application


Sujet :

Dotnet

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné Avatar de Jack_serious
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    350
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 350
    Par défaut [Excel] Probleme avec Excel.Application
    Bonjour a tous.

    Je suis actuellement en train de me battre pour debugguer une appli qui a ete faite il y a un deja quelques temps.

    Le morceau qui me pose un souci est celui-ci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    this.monApp = new ApplicationClass();
    // [...]
    object o = this.monApp.Run(nom, obj2, obj3, obj4, obj5, obj6, obj7, obj8, obj9, obj10, obj11, obj12, obj13, obj14, obj15, obj16, obj17, obj18, obj19, obj20, obj21, obj22, obj23, obj24, obj25, obj26, obj27, obj28, obj29, obj30, obj31);
    this.monApp s'initialise sans erreur, et les parametres passes a la methode Run sont coherents.

    Je ne suis pas familier du tout de l'utilisation des feuilles Excel en .NET, et je n'arrive donc pas a voir pourquoi ca coince ici.

    Aucune exception n'est levee, aucune erreur visible d'aucune sorte.
    C'est juste que o vaut null apres l'appel a la methode.
    Du coup toute la suite du programme se vautre lamentablement.

    Est ce que quelqu'un saurait d'ou peut venir cette erreur, ou dans quelle direction je dois chercher pour trouver pourquoi ca coince ?

    D'avance merci.

  2. #2
    Rédacteur/Modérateur
    Avatar de Skalp
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2006
    Messages
    1 694
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 694
    Par défaut
    La méthode Run permet d'exécuter une macro dans Excel.
    Le premier paramètre est le nom de la macro à éxécuter : dans ton cas, le contenu de la variable "nom".
    Les autres paramètres sont les paramètres utilisés par la macro.

    Si cette macro n'existe pas dans ton fichier piloté, il y a de grandes chances que le résultat soit null.

  3. #3
    Membre chevronné Avatar de Jack_serious
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    350
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 350
    Par défaut
    Citation Envoyé par Skalp Voir le message
    La méthode Run permet d'exécuter une macro dans Excel.
    Le premier paramètre est le nom de la macro à éxécuter : dans ton cas, le contenu de la variable "nom".
    Les autres paramètres sont les paramètres utilisés par la macro.

    Si cette macro n'existe pas dans ton fichier piloté, il y a de grandes chances que le résultat soit null.
    Ok je vois.

    Comment je peux faire pour avoir le nom de ce fichier ? Ou pour tester si la macro existe ?
    Est-ce que je peux le recuperer directement a partir de l'objet ou est ce que je dois chercher un appel a une methode precise plus haut dans le code ?

    (Ces questions peuvent sembler etrange, mais le code est relativement crade et je connais pas du tout l'utilisation des macros en .NET... donc je suis completement perdu.)

  4. #4
    Rédacteur/Modérateur
    Avatar de Skalp
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2006
    Messages
    1 694
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 694
    Par défaut
    Entre : this.monApp = new ApplicationClass(); et object o = this.monApp.Run(...);
    Tu dois chercher l'appel à la méthode :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    this.monApp.Workbooks.Open(...);
    Le premier paramètre de la méthode Open est le nom du fichier.

  5. #5
    Membre chevronné Avatar de Jack_serious
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    350
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 350
    Par défaut
    Citation Envoyé par Skalp Voir le message
    Entre : this.monApp = new ApplicationClass(); et object o = this.monApp.Run(...);
    Tu dois chercher l'appel à la méthode :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    this.monApp.Workbooks.Open(...);
    Le premier paramètre de la méthode Open est le nom du fichier.
    Ok. alors j'ai trouve ca d'interessant entre les deux:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    this.monApp = new ApplicationClass();
    Workbooks o = this.monApp.Workbooks;
    this.monWorkbook = o.Open(tmpFile, 3, true, 5, "", "", true,   XlPlatform.xlWindows, "", true, false, 0, false);
    File.Delete(tmpFile);
    Marshal.ReleaseComObject(o);
    o = null;
    Sachant que tmpFile est un chemin vers un fichier temporaire du genre "C:\\WINDOWS\\TEMP\\tmp2.tmp".

    Personnellement, j'ai du mal a voir l'utilite de ce code... Ca fait un petit moment que je me bas avec.

  6. #6
    Rédacteur/Modérateur
    Avatar de Skalp
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2006
    Messages
    1 694
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 694
    Par défaut
    Citation Envoyé par Jack_serious Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    this.monApp = new ApplicationClass();
    Workbooks o = this.monApp.Workbooks;
    this.monWorkbook = o.Open(tmpFile, 3, true, 5, "", "", true,   XlPlatform.xlWindows, "", true, false, 0, false);
    File.Delete(tmpFile);
    Marshal.ReleaseComObject(o);
    o = null;

    Il n'y a rien entre o.Open(tmpFile) et File.Delete(tmpFile) ???
    D'après ce que je vois, le code ouvre le fichier... et le supprime juste après !

    Normalement, tu devrais avoir une erreur dès le File.Delete(tmpFile) !
    En tous cas, je comprend mieux pourquoi this.monApp.Run(...) ne te renvoie rien !

    Voilà ce que je te propose :
    1. Essayer de retrouver le fichier indiqué dans tmpFile. Tu pourras voir à quoi il ressemble.
    2. Commenter la ligne File.Delete(tmpFile);, ça ira certainement mieux !

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

Discussions similaires

  1. [Excel] Probleme avec la fonction SUM
    Par lidouka dans le forum Excel
    Réponses: 2
    Dernier message: 06/03/2007, 13h09
  2. Réponses: 3
    Dernier message: 04/12/2006, 13h41
  3. VBA EXCEL : Probleme avec On Error
    Par izalec dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 18/10/2006, 10h23
  4. Extraction fichier Excel - Probleme avec les VbCrLf
    Par oromeyer dans le forum Modules
    Réponses: 3
    Dernier message: 16/02/2006, 19h06
  5. problème avec Excel
    Par LE NEINDRE dans le forum Modules
    Réponses: 3
    Dernier message: 08/02/2006, 23h08

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