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?