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 :

Copier une figure Matlab dans un fichier Excel


Sujet :

MATLAB

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 90
    Points : 100
    Points
    100
    Par défaut [Resolu] Copier une figure Matlab dans un fichier Excel
    Bonjour a tous !!!

    J'aimerai copier une figure Matlab directement dans un fichier Excel préexistant. J'ai deja trouvé un code qui fonctionne plutot bien :
    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
     
    function PlotInExcel
       x= {1:10};
       a= cell2mat(x);
       y= {1:10};
       b= cell2mat(y);
       %............plotting..............................................................................................
       plot(a,b);
       xlabel('X Values');
       ylabel('Y Values');
       print -dmeta;   %.................Copying to clipboard
     
       FILE  = 'C:\Documents and Settings\to85607\Desktop\Simulation Matlab avec données Excel\INPUTS.xls';
       Range ='J20';
       %.............excel COM object............................................................................
             Excel = actxserver ('Excel.Application');
     Excel.Visible = 1;
     
     if ~exist(FILE,'file')
           ExcelWorkbook=Excel.Workbooks.Add;
           ExcelWorkbook.SaveAs(FILE);
           ExcelWorkbook.Close(false);
     end
     invoke(Excel.Workbooks,'Open',FILE); %Open the file
     
     ActiveSheet  = Excel.ActiveSheet;
     ActiveSheetRange  = get(ActiveSheet,'Range',Range);
     ActiveSheetRange.Select;
     ActiveSheetRange.PasteSpecial; %.................Pasting the figure to the selected location
     
    %-----------------------------------end of function


    Ce code permet de définir l'emplacement du fichier Excel ainsi que la cellule où l'on veut copier l'image. Il ne permet cependant pas de définir dans quelle feuille excel on veut copier la figure.

    Pourriez vous m'indiquer quelles modifications je dois apporter à ce code pour pouvoir décider dans quelle feuille Excel la figure sera copiée?

    Merci d'avance.

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 90
    Points : 100
    Points
    100
    Par défaut
    Hum.... Je vois que personne ne repond à mon post...

    Aurais-je collé vos brillants cerveaux ou mon problème ne vous semble pas clair?
    Si c'est le cas n'hesitez pas à me demander des informations complémentaires!

    Il est vrai que ce probleme touche plus à du langage C++ qu'à du matlab (c'est d'ailleurs pour cela que je seche...), peut etre aurais du le poster ailleurs ...

  3. #3
    Expert éminent sénior
    Avatar de Caro-Line
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    9 458
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 9 458
    Points : 14 830
    Points
    14 830
    Par défaut
    Citation Envoyé par chris05 Voir le message
    Il est vrai que ce probleme touche plus à du langage C++ qu'à du matlab
    Je ne vois pas bien le rapport avec le C++
    Je dirais plutôt qu'il faut regarder du côté des macros Excel.

    Par contre il est vrai que ta demande est peu commune.
    N'ayant pas Excel je ne peux malheureusement pas regarder mais je pense qu'il faut essayer de regarder quelles sont les méthodes de ton objet pour voir si par exemple il a une méthode Sheet (ou Sheets) qui permettrait de sélectionner la feuille.


    Sinon pourquoi vouloir à tout prix copier la figure de MATLAB ?
    Ne serait-ce pas plus propre de copier les données et faire le graphique dans Excel ?
    Règles du Forum

    Adepte de la maïeutique

  4. #4
    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 Caro-Line Voir le message
    Je ne vois pas bien le rapport avec le C++
    En effet, c'est plutôt du VBA ici

    A tester :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    invoke(Excel.Workbooks,'Open',FILE); %Open the file
     
    Sheets = Excel.ActiveWorkBook.Sheets;
    sheet_1 = get(Sheets, 'Item', 'feuil1'); % Remplacer feuil1 par le nom de la feuille à activer
    sheet_1.Activate
     
    ActiveSheet  = Excel.ActiveSheet;
    ActiveSheetRange  = get(ActiveSheet,'Range',Range);
    (Il y a certainement plus simple...)
    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)

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 90
    Points : 100
    Points
    100
    Par défaut
    Je ne vois pas bien le rapport avec le C++
    Je dirais plutôt qu'il faut regarder du côté des macros Excel.
    Je ne connais pas grand chose en C++, et encore moins en VBA (d'ou ma confusion, désolé ).

    Sinon pourquoi vouloir à tout prix copier la figure de MATLAB ?
    Je crée ce programme pour des collègues qui ne connaissent pas Matlab et qui ne veulent pas y avoir à faire.
    J'ai donc créé un fichier excel dans lequel les INPUTS sont saisies puis exportés dans matlab. Les OUTPUTS de matlab sont ensuite récupérés pour etre recopiés dans ce meme fichier EXCEL.

    Ne serait-ce pas plus propre de copier les données et faire le graphique dans Excel ?
    Le probleme est que mon graphique trace 8 Matrices tres volumineuses (environ 10x 20000)et le transfert de données est très très lent...


    Merci Dut, ton code fonctionne à la perfection !!

    Voici le code définitif de ma fonction (on sait jamais, cela pourrait profiter un jour à quelqu'un ...) :

    Code:
    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
    %copie la derniere figure active dans un fichier Excel
     
    function PlotInExcel (Feuil,Range)
     
       print -dmeta;   %.................Copying to clipboard
     
       FILE  = 'C:\Documents and Settings\to85607\Desktop\Simulation Matlab avec données Excel\INPUTS_simulation_matlab.xls';
     
       %.............excel COM object............................................................................
       Excel = actxserver ('Excel.Application');
       Excel.Visible = 1;
     
       if ~exist(FILE,'file')
           ExcelWorkbook=Excel.Workbooks.Add;
           ExcelWorkbook.SaveAs(FILE);
           ExcelWorkbook.Close(false);
       end
       invoke(Excel.Workbooks,'Open',FILE); %Open the file
       Sheets = Excel.ActiveWorkBook.Sheets;
       sheet_1 = get(Sheets, 'Item', Feuil); % Remplacer feuil1 par le nom de la feuille à activer
       sheet_1.Activate
     
       ActiveSheet  = Excel.ActiveSheet;
       ActiveSheetRange  = get(ActiveSheet,'Range',Range);
       ActiveSheetRange.Select;
       ActiveSheetRange.PasteSpecial; %.................Pasting the figure to the selected location
     
     
    %-----------------------------------end of function"PlotInExcel--------------------------------------
    Attention : Feuil (feuille ou la figure doit etre copiée) et Range (cellule dans laquelle la figure doit etre copiée) doivent être des chaines de caractères.
    La feuille saisie doit obligatoirement exister sinon le programme stop.
    Le fichier Excel doit etre fermé au moment de l'execution du programme.




    Merci à tous, vous avez été très efficace !!
    Je passerai à l'occasion pour répondre à quelques problèmes posé sur votre forum.

    Bonne continuation et encore merci !

  6. #6
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2011
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 3
    Points : 4
    Points
    4
    Par défaut
    Bonjour,

    Cette fonction marche bien, mais je l'ai intégré dans une boucle cad j'ai besoin de mettre plusieurs images dans un fichier excel, mais tu ne peux rien écrire dans ce fichier lorsque ta fonction l'a ouvert déjà... j'ai utilsé

    pour le fermer, mais je cherche un moyen 'automatique' qui peut sauvegarder la modification de ce fichier excel pour que mon ordi ne me demande pas enregistrer la modification autant de fois que la valeur n (variable de ma boucle)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    PlotInExcell(Figure,date,strcat('F',int2str((n-1)*32+1),':K',int2str((n-1)*32+1),''));

  7. #7
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Pour cela, tu peux regarder la discussion Confirmation enregistrement.
    De plus au lieu de fermer/ouvrir ton fichier autant de fois qu'il y a de figures, tu peux insérer cette boucle à l'intérieur de la fonction (Cf post#4 de la même discussion).

  8. #8
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2011
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 3
    Points : 4
    Points
    4
    Par défaut
    Bonjour Jerôme

    Merci pour tes aides, c'est effectivement ce que je voulais, j'avais pensé le "save(COM)", mais il ne marche pas...

    Citation Envoyé par Winjerome Voir le message
    Bonjour,

    Pour cela, tu peux regarder la discussion Confirmation enregistrement.
    De plus au lieu de fermer/ouvrir ton fichier autant de fois qu'il y a de figures, tu peux insérer cette boucle à l'intérieur de la fonction (Cf post#4 de la même discussion).

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

Discussions similaires

  1. [XL-2007] Problème pour copier une tâche project dans un fichier Excel
    Par Miguel973 dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 21/04/2011, 11h58
  2. Réponses: 2
    Dernier message: 30/08/2007, 10h49
  3. [VBA-E]copier une cellule d'un autre fichier excel?
    Par dev81 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 15/05/2007, 09h29
  4. Réponses: 1
    Dernier message: 26/09/2006, 11h55
  5. ecrire une touche directionnelle dans un fichier excel
    Par aA189 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 06/08/2006, 20h41

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