Bonjour à tous !
Je souhaite vous solliciter pour un petit soucis.
En résumé, j'ai un tableur excel que je remplis par Matlab. Après une multitude de calcul je souhaite avoir un seul résultat R dans cette boucle if :
Ce résultat R je le transmet sur mon fichier excel avec cette boucle if :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 if K==1 elseif K==2 elseif K==3 elseif K==4 FFLFacoH=readfis('FFLFacoH'); R=evalfis([x1,x2],FFLFacoH); end
Ces deux bouts de code se trouve dans cette boucle n :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 if R>6 range61=sprintf('%c%d:%c%d','A'+0,1+n,'A'+0,1+n); Excel.Worksheets.Item(3).Range(range61).Value=name; elseif 4.11<=R<=6 range62=sprintf('%c%d:%c%d','A'+1,1+n,'A'+1,1+n); Excel.Worksheets.Item(3).Range(range62).Value=name; elseif R<4.11 range63=sprintf('%c%d:%c%d','A'+2,1+n,'A'+2,1+n); Excel.Worksheets.Item(3).Range(range63).Value=name; end
Donc en gros, à chaque itération je calcul un R, et pour chaque R je place le nom du fichier dans la colonne A,B ou C de mon tableur.
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 for n=1:numel(list) filename=list(n).name; fid=fopen(filename,'r'); data = strrep(fread(fid, [1 inf], '*char'), ',', '.'); fclose(fid); T = textscan(data,'%f%f%f%f%f%f%f', 'CollectOutput', 1); for i=5:1:7 Tmp=T{1}(5:end,i); [A(n,i) B(n,i)]=max(Tmp); y(n,i)=max(max(T{1}(5:end,i))).*0.1; P1(n,i)=find(Tmp(B(n,i)+1:end)<y(n,i),1,'first'); P2(n,i)=find(Tmp(1:B(n,i))<y(n,i),1,'last'); ENERGIE(n,i)=trapz(Tmp(P2(n,i):P1(n,i)+B(n,i))); RMS(n,i-4)=sqrt(mean(T{1}(P2(n,i):P1(n,i)+B(n,i),i-4).^2)); La(n,i-4)=20*log10(RMS(n,i-4)/10^-6); Lv(n,i-4)=20*log10(RMS(n,i-4)/10^-9); end La(n,4:7)=0; Lv(n,4:7)=0; EFFORTT(n)=max(T{1}(5:end,4)); EFFORTT=EFFORTT'; DONNEE(n,:)=[mean(Lv(n,1:3)),mean(La(n,1:3)),mean(A(n,5:7)),mean(ENERGIE(n,5:7)),EFFORTT(n)]; [pathstr, name, ext]=fileparts(filename); range = sprintf('%c%d','A'+0,4+n); range2 = sprintf('%c%d:%c%d','A'+1,5,'A'+5,4+n); Excel.Worksheets.Item(1).Range(range).Value=name; Excel.Worksheets.Item(1).Range(range2).Value=DONNEE; x1=DONNEE(1:end,2); x2=DONNEE(1:end,3); if K==1 elseif K==2 elseif K==3 elseif K==4 FFLFacoH=readfis('FFLFacoH'); R=evalfis([x1,x2],FFLFacoH); end if R>6 range61=sprintf('%c%d:%c%d','A'+0,1+n,'A'+0,1+n); Excel.Worksheets.Item(3).Range(range61).Value=name; elseif 4.11<=R<=6 range62=sprintf('%c%d:%c%d','A'+1,1+n,'A'+1,1+n); Excel.Worksheets.Item(3).Range(range62).Value=name; elseif R<4.11 range63=sprintf('%c%d:%c%d','A'+2,1+n,'A'+2,1+n); Excel.Worksheets.Item(3).Range(range63).Value=name; end end
Et j'obtiens ceci pour le moment :
Mon problème est multiple en fait :Tissus conformes aux critères Tissus à remesurer ou vérifier manuellement Tissus non conformes 045639 T01 02 1028710 783375 1 Bas 01
1) Mes 2 noms sont dans la deuxième colonne or j'ai obtenu un R=0.2606 pour le premier et un R=5 pour le deuxième. Je devrais dans ce cas avoir mon premier nom dans la dernière colonne avec R<4.11 !
2) Je souhaiterais aussi éviter d'avoir des espaces entres les noms à écrire sur le tableur mais je n'ai pas trouvé un "range" adéquate ! Auriez-vous des idées ?
Partager