Bonjour,

Je suis actuellement en cours de développement d'un logiciel sous matlab avec IHM.

Pour faire passer des données entre différentes fonctions, j'utilise la méthode avec Guidata décrite dans le tutoriel.
Le logiciel est déjà bien avancé et pour l'instant je n'ai eu aucun soucis... jusqu'à aujourd'hui!!

Voila un extrait d'une des fonctions :

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
function affichageRendementProduction
 
    h = findobj('tag','tableauAffichage');
    hp = findobj( 'tag', 'tableauPanel' );
 
    setInfoOperationInvisible;
 
    hpanelRendementProductionMC = findobj( 'tag', 'panel_RendementProductionMC');
    set( hpanelRendementProductionMC, 'Visible', 'On' );
 
    donnees = guidata(gcf);
    if( donnees.CalculRendementProdMCFait == 0)
        cd('..');
        cd('CalculsSystemesOKKO\');
        calculRendementProdMC; 
    end
    donnees = guidata(gcf);
    set(hp, 'Title', 'Rendement de production MC');
    set(h,'data',donnees.RendementOkParCritereCouleur);  
    set(h,'RowName',donnees.nomsParamSystemes);
    set(h,'ColumnName', 'Rendement de production (%)');
    hEditRdmtGlobal = findobj( 'tag', 'tag_RendementGlobalEdit');
    set( hEditRdmtGlobal,'String',  num2str( donnees.RendementGlobalMC ));
 
    cd('..');
    cd('Callback\');
 
end
et voici un extrait de la fonction calculRendementProdMC

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
function calculRendementProdMC
    donnees = guidata(gcf);
    etatSysteme = donnees.etatSysteme;
    % calcul rendement par critère
    nbSimusOKParCritere = zeros( 1, size( donnees.etatSysteme,2 ));
    for i=1:1:size( etatSysteme,2 )
        nbSimusOKParCritere(1,i) = size( find( strcmp( etatSysteme(:,i), 'OK' )),1);
    end
    RdmtOkParCritere = nbSimusOKParCritere/donnees.NbSimu * 100;
    donnees.RendementOkParCritere = RdmtOkParCritere;
    % calcul rendement global
    ligneTypeSimuOK = cell(1, size( etatSysteme,2));
    for i=1:1: size( etatSysteme,2 )
        ligneTypeSimuOK{i} = 'OK';
    end
    simuOK = zeros( donnees.NbSimu, 1);
    for i=1:1:donnees.NbSimu
        simuOK(i) = isequal( ligneTypeSimuOK, etatSysteme(i,:));
    end
    nbSimuOK = size(find( simuOK == 1),1);
 
    donnees.RendementGlobalMC = nbSimuOK/donnees.NbSimu * 100;
 
    donnees.CalculRendementProdMCFait = 1;
 
    % mise en couleur
 
    cd( '..' );
    cd( 'ColorationTableau\' );
 
    % Données résultats + état 
    RendementOkParCritereCouleur = cell( size( RdmtOkParCritere,2 ),1 );
    for i=1:1: size( donnees.etatSysteme,2 )
            if ( RdmtOkParCritere(i) <= 50 )
                RendementOkParCritereCouleur{i,1}= colTextBG( num2str( RdmtOkParCritere(i),6), 'FF0000');
            elseif( RdmtOkParCritere(i) >50 && RdmtOkParCritere(i) < 100 )
                RendementOkParCritereCouleur{i,1} = colTextBG( num2str( RdmtOkParCritere(i),6), 'FFFF00');
            elseif( RdmtOkParCritere(i) == 100 )
                RendementOkParCritereCouleur{i,1} = colTextBG( num2str( RdmtOkParCritere(i),6), '00FF00');
            else
                RendementOkParCritereCouleur{i,1} = colTextBG( num2str( RdmtOkParCritere(i),6), 'FF8C00');                
            end
    end
    donnees.RendementOkParCritereCouleur = RendementOkParCritereCouleur;
    %%
    guidata(gcf,donnees);
end
Le problème que j'ai est le suivant : les nouveaux paramètres enregistrés dans guidata dans la sous fonction sont bien récupérables dans la fonction affichageRendementProduction, mais reprennent leur valeur d'initialisation (cad 0 ) une fois que je sors de cette fonction !!
Qd je sors de la fonction affichageRendementProduction, c'est comme ci les paramètres RendementOkParCritereCouleur, RendementGlobalMC... etc n'avaient pas été modifié...

Quelqu'un aurait il une idée du problème ?
Car j'ai effectué la même méthode dans d'autres fonctions et je n'ai aucun soucis...

Merci !!