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 :

[Automation] Exécution d'une macro Excel depuis MATLAB


Sujet :

MATLAB

  1. #1
    Futur Membre du Club
    Homme Profil pro
    ingénieur méthodes forges
    Inscrit en
    Décembre 2014
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : ingénieur méthodes forges
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2014
    Messages : 14
    Points : 5
    Points
    5
    Par défaut [Automation] Exécution d'une macro Excel depuis MATLAB
    bon,
    voilà après une petite optimisation du code sur l'écriture des résultats de calculs dans le fichiers excel (grâce à profile) (en fait en remplaçant les xlswrite par range.Value = dans excel)
    j'attaque l'avant denrière ligne droite avec le lancement d'une macro excel depuis matlab (la macro excel tourne bien sous excel : pas de soucis)

    voici le 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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
     
    clear  nomrep liste calcul % effacement des données
    pattern = '^P[A-Za-z]\d{6}$'; % format du nom des répertoires : 'PX123456'
    liste = dir; % extrait la liste des fichiers et répertoires 
    matches = ~cellfun(@isempty ,regexp({liste.name}, pattern, 'match')); % sélectionne les répertoires de la forme 'PX123456'
    nomrep = {liste( matches ).name};% contient le nom des répertoires du bon format
    nbrepiece  = numel(nomrep) ; % compte le nombre de pièces à traiter
     
    % ouverture et modification du fichier AI.xlt
     
    for i = 1:nbrepiece 
        nomfichier{i} = fullfile(pwd, nomrep{i}, nomrep{i}, 'AI.xlt'); % création du chemin complet du fichier
        fid = fopen(nomfichier{i}, 'rt'); % ouverture du fichier
        car = fread(fid);
        data = strrep(char(car'), ',', '.'); % remplacement des ',' par des '.'
        regexp(data, '\t', 'split'); % remplacement des tab pour séparer les colonnes
        fichier{i}=[nomrep{i} '.csv']; % création des noms de fichiers .csv importable dans matlab
        fid=fopen(fichier {i},'w'); % ouverture des fichiers .csv
        fprintf(fid,data);% écriture des fichiers .csv
        fclose(fid); % fermeture des fichiers
    end
     
    %préparation du fichier excel pour enregistrement des résultats
    Excel = actxserver('Excel.Application');
    Excel.Visible = true;
    Workbook = Excel.Workbooks.Add;
    nomfichierxls =[nomrep{1},'_',nomrep{nbrepiece},'.xls'];
    nomcheminxls=fullfile(pwd,nomfichierxls);
    Workbook.SaveAs(nomcheminxls);
    sheet=Excel.Worksheets.Item(3);
    xlWorksheet=-4167;
    Excel.Sheets.Add([],sheet,1,xlWorksheet);
    Excel.WorkSheets.Item(4).Name='donnees',
    sheet=Excel.Worksheets.Item(4);
    Excel.Sheets.Add([],sheet,1,xlWorksheet);
    Excel.WorkSheets.Item(5).Name='donnees_K',
    ActiveSheet=Excel.Worksheets.Item(4);
     
    numlignedebfichier = 2;   % Numéro de ligne du fichier excl écriture des résultats
    Texte={'','','','','','','','','','','',''}; % ligne blanche pour séparer les résultats de chaque pièce
    range=ActiveSheet.Range('A1:A1');
    range.Value=nbrepiece;
     
     
     
     % lancement de la macro courbes  
    Excel.Application.DisplayAlerts=0;
    cheminmacro = fullfile(pwd, 'Macro_courbes_K.xlsm');
    Fichier = Excel.Workbooks.Open(cheminmacro);
    Excel.Run('Macro_courbes_K.xlsm!Macro2');
    Fichier1=Excel.Workbooks.Open(nomcheminxls);
    Excel.ActiveWorkbook.Save;
    seulement voilà ça plante.
    avant j'ouvrais dans excel le fichier contenant la macro, puis le fichiers résultats.xls et ensuite lancais la macro.
    apparement le code lance bien la macro mais sur le fichier 'Macro_courbes_K.xlsm' contenant la macro et pas sur le fichier "résultats".xls (les deux fichiers sont dans le même répertoire).
    j'ai essayé des tas de combines : ouverture des fichiers, activation, dans un ordre puis l'autre rien n'y fait....
    quelqu'un a-t-il une petite idée?

  2. #2
    Futur Membre du Club
    Homme Profil pro
    ingénieur méthodes forges
    Inscrit en
    Décembre 2014
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : ingénieur méthodes forges
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2014
    Messages : 14
    Points : 5
    Points
    5
    Par défaut pb résolu
    bon finalement la macro se lance bien il suffisait de fermer puis rouvrir le fichier sur lequel elle pointe avec ce petit bout de code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Workbook.SaveAs(nomcheminxls);
    Workbook.Close(nomcheminxls);
     
     % lancement de la macro courbes  
    Excel.Application.DisplayAlerts=0;
    cheminmacro = fullfile(pwd, 'Macro_courbes_K.xlsm');
    Excel.Workbooks.Open(cheminmacro);
    Excel.Workbooks.Open(nomcheminxls);
    Excel.Run('Macro_courbes_K.xlsm!Macro2');
    il me reste juste à compiler le code, et quelques bricoles de présentation

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

Discussions similaires

  1. Réponses: 10
    Dernier message: 24/09/2019, 10h50
  2. Excuter une macro Excel via MATLAB
    Par autousto dans le forum MATLAB
    Réponses: 4
    Dernier message: 05/12/2014, 08h55
  3. [AC-2003] Exécuter une macro Excel depuis Access
    Par tarnx dans le forum VBA Access
    Réponses: 2
    Dernier message: 17/12/2009, 13h16
  4. [AC-2003] Exécuter une macro Excel depuis du code VBA
    Par denisw95 dans le forum VBA Access
    Réponses: 12
    Dernier message: 03/12/2009, 15h59
  5. Lancer une macro Excel depuis Access
    Par marcobosio dans le forum Access
    Réponses: 6
    Dernier message: 05/06/2006, 20h51

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