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

MATLAB Discussion :

Interaction de MATLAB avec Excel


Sujet :

MATLAB

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Ingénieur
    Inscrit en
    Novembre 2011
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur

    Informations forums :
    Inscription : Novembre 2011
    Messages : 12
    Points : 8
    Points
    8
    Par défaut Interaction de MATLAB avec Excel
    Salut à tous.

    Ne trouvant pas les réponses à mes questions, ni même, ne sachant où poster, je me permets d'ouvrir cette nouvelle discussion.

    J'ai développé une application sous Matlab avec interface utilisateur tout ce qu'il y de plus classique, mais cette dernière à pour fonctionnalité d'interagir avec des fichiers de données Excel, et pour cela j'utilise du VBA intégré au code Matlab.
    Bref, mon problème est que je souhaite pouvoir bloquer certaines fonctionnalités si l’utilisateur n'a pas Excel installé sur son poste, et je souhaiterais savoir s'il existe une commande permettant de détecter justement si l'utilisateur à Excel d’installer? Question bonus, est-il possible de connaître en plus la version d'Excel qui est éventuellement installé?
    Par la suite je souhaiterais également tester si l'utilisateur à ouvert ou non un fichier Excel, afin de savoir si je peux écrire dessus ou non?

    Pour info', je pense pouvoir avoir ces informations en testant si le programme plante avec un système de "try-catch" mais je suis persuadé qu'il doit y avoir une manière plus propre de coder.

    Merci pour votre aide.


    Basto

  2. #2
    Membre actif
    Homme Profil pro
    Inscrit en
    Avril 2013
    Messages
    189
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2013
    Messages : 189
    Points : 242
    Points
    242
    Par défaut
    faut que tu utilises actxserver,

    ce bout de code permet de checker si excel est installé et te permet de manipuler un workbook

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    try
        e = actxserver('Excel.Application');     % Fails if Excel not installed
    catch
        e = [];
    end

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Ingénieur
    Inscrit en
    Novembre 2011
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur

    Informations forums :
    Inscription : Novembre 2011
    Messages : 12
    Points : 8
    Points
    8
    Par défaut
    Merci Dombrai de ton aide.

    Je connais cette solution, mais je ne l'a trouve pas très propre.
    Il doit bien y avoir une commande qui fait cela, non?


    Basto

  4. #4
    Membre actif
    Homme Profil pro
    Inscrit en
    Avril 2013
    Messages
    189
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2013
    Messages : 189
    Points : 242
    Points
    242
    Par défaut
    je ne suis pas sur qu'il y ai plus propre. J'ai eu un peu le même problème il y a quelque temps : je voulais me connecter à une instance d'Excel ouverte si disponible, ou en ouvrir une nouvelle si rien n'était ouvert. Après moults pérégrinations, je n'ai pas trouvé mieux que ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    try
       e = actxGetRunningServer('Excel.Application')
    catch
       e = actxserver('Excel.Application')
    end

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Ingénieur
    Inscrit en
    Novembre 2011
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur

    Informations forums :
    Inscription : Novembre 2011
    Messages : 12
    Points : 8
    Points
    8
    Par défaut
    C'est noté Dombrai, faute de mieux je vais mettre en place cette solution le plus clairement possible, en attendant que quelqu'un d'autre, peut-être, propose une solution plus "propre".

    Et sinon pour la version d'Excel, pas d'idées? Car selon la version disponible il faut parfois adapter la commande de sauvegarde, bref.

    Et enfin, pour tester si le fichier est ouvert, je pourrais éventuellement faire un système de "try-catch" de manière similaire, mais peut-être que quelqu'un connait une autre méthode?

    En espérant que vous puissiez m'aider.

    Quoi qu'il en soit merci Dombrai d'avoir apporté ton retour d'expérience sur le sujet.


    Basto

  6. #6
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 302
    Points : 52 884
    Points
    52 884
    Par défaut
    Citation Envoyé par Basto92 Voir le message
    Question bonus, est-il possible de connaître en plus la version d'Excel qui est éventuellement installé?
    => Versions d'Excel et du système d'exploitation
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Ingénieur
    Inscrit en
    Novembre 2011
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur

    Informations forums :
    Inscription : Novembre 2011
    Messages : 12
    Points : 8
    Points
    8
    Par défaut
    Merci Dut.

  8. #8
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 302
    Points : 52 884
    Points
    52 884
    Par défaut
    Citation Envoyé par Basto92 Voir le message
    Et enfin, pour tester si le fichier est ouvert, je pourrais éventuellement faire un système de "try-catch" de manière similaire, mais peut-être que quelqu'un connait une autre méthode?
    Pour tester si le fichier est ouvert, il suffit de parcourir les noms contenus dans la propriété Name de la collection Workbooks

    Ce qui devrait donner grosso modo :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    xlsxname = 'test.xlsx';
     
    for n = 1:Excel.Workbooks.Count
     
        if strcmp(xlsxname, Excel.Workbooks.Item(n).Name)
     
            ...
     
        end
     
    end
    Bien entendu, cela ne fonctionne que dans l'application Excel ouverte avec actxserver.

    Si le fichier est ouvert indépendamment de MATLAB, la collections Workbooks ne le contiendra pas.
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  9. #9
    Futur Membre du Club
    Homme Profil pro
    Ingénieur
    Inscrit en
    Novembre 2011
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur

    Informations forums :
    Inscription : Novembre 2011
    Messages : 12
    Points : 8
    Points
    8
    Par défaut
    Citation Envoyé par Dut Voir le message
    Si le fichier est ouvert indépendamment de MATLAB, la collections Workbooks ne le contiendra pas.
    Aïe, c'est justement ce que je recherche.

    Merci Dut tout de même pour ton aide.

  10. #10
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 302
    Points : 52 884
    Points
    52 884
    Par défaut
    Comme mentionné par Dombrai, tu peux toujours utiliser actxGetRunningServer pour détecter une instance externe de Excel.

    Par contre, si plusieurs instances d'Excel sont ouvertes, actxGetRunningServer ne semble en détecter qu'une seule
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  11. #11
    Futur Membre du Club
    Homme Profil pro
    Ingénieur
    Inscrit en
    Novembre 2011
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur

    Informations forums :
    Inscription : Novembre 2011
    Messages : 12
    Points : 8
    Points
    8
    Par défaut
    Sujet complexe en effet au vu de toutes le configurations possibles (présence ou non d'Excel, versions d'Excel, Excel déjà ouvert, Excel ouvert par Matlab ou pas, fichier déjà ouvert, etc.) difficile de faire quelque chose de tout à fait propre.

Discussions similaires

  1. Réponses: 1
    Dernier message: 16/12/2011, 15h52
  2. Interaction avec excel
    Par amnorian dans le forum VBA Access
    Réponses: 5
    Dernier message: 09/06/2011, 14h29
  3. [HTML] interaction du HTML avec le excel
    Par houwa dans le forum Balisage (X)HTML et validation W3C
    Réponses: 7
    Dernier message: 09/07/2008, 11h20
  4. [C#] [EXCEL] Travailler avec EXCEL sans ouvrir le logiciel
    Par Fabsou dans le forum Windows Forms
    Réponses: 3
    Dernier message: 16/07/2004, 10h29

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