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 :

ajout ligne à un tableau [Débutant]


Sujet :

MATLAB

  1. #1
    Membre du Club
    Inscrit en
    Avril 2006
    Messages
    283
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 283
    Points : 62
    Points
    62
    Par défaut ajout ligne à un tableau
    Bonjour,

    alors je suis archi débutante sur Matlab.

    j'ai un tableau dans lequel l'utilisateur ajoutera manuellement les valeurs directement dans les cellules, j'aimerai qu'à chaque fois qu'une ligne est complétée, une nouvelle ligne vide s'ajoute automatiquement en dessous.

    comment peut-on faire cela?

    merci d'avance pour vos réponses

  2. #2
    Membre éprouvé
    Avatar de ol9245
    Homme Profil pro
    Chercheur
    Inscrit en
    Avril 2007
    Messages
    985
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chercheur

    Informations forums :
    Inscription : Avril 2007
    Messages : 985
    Points : 1 158
    Points
    1 158
    Billets dans le blog
    1
    Par défaut
    Il faut distinguer le problème de GUI (ce que voit l'utilisateur) du problème de stockage des données (problème purement matlab).

    Il faudrait donc que tu nous en dise un peu plus sur ton problème pour qu'on puisse t'aider
    "La vraie grandeur se mesure par la liberté que vous donnez aux autres, et non par votre capacité à les contraindre de faire ce que vous voulez." Larry Wall, concepteur de Perl.

  3. #3
    Membre du Club
    Inscrit en
    Avril 2006
    Messages
    283
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 283
    Points : 62
    Points
    62
    Par défaut
    l'utilisateur aura l'interface sur lequel il saisira dans un tableau, des valeurs.

    le nombre de lignes dans ce tableau ne sera pas limité et pour ne pas à avoir à fixer le nombre de lignes du tableau, j'aimerai pouvoir mettre 5 lignes par exemple puis lorsque l'utilisateur aura insérer les valeurs dans la 5ème ligne, une 6ème s'ajoutera.

    sur GUI, on ne verra que les 5 premières lignes

    j'espère que j'ai été assez claire...sinon dites moi!

    j'ai découvert matlab hier...

  4. #4
    Expert confirmé
    Avatar de tug83
    Homme Profil pro
    MATLAB Geek !
    Inscrit en
    Juin 2006
    Messages
    1 781
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Alpes de Haute Provence (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : MATLAB Geek !
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 781
    Points : 4 039
    Points
    4 039
    Par défaut
    alors voilà tu lis la doc de uitable , tu fais les exemples te là tu vas t'éclater
    MATLAB 8.2 (R2013b)

    le blog des MATLAB geeks

  5. #5
    Membre éprouvé
    Avatar de ol9245
    Homme Profil pro
    Chercheur
    Inscrit en
    Avril 2007
    Messages
    985
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chercheur

    Informations forums :
    Inscription : Avril 2007
    Messages : 985
    Points : 1 158
    Points
    1 158
    Billets dans le blog
    1
    Par défaut
    J'ai déja fait ça dans une vie antérieure mais je retrouve plus le code.
    Sinon, au lieu d'ajouter une ligne à chaque fois, c'est plus recommandé de doubler le tableau quand il est plein
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    % M est le tableau à remplir
    % u est le numéro de la dernière ligne occupée dans le tableau
    if u == size(M, 1)
        M(2*u, 1) = 0 ;
    end
    "La vraie grandeur se mesure par la liberté que vous donnez aux autres, et non par votre capacité à les contraindre de faire ce que vous voulez." Larry Wall, concepteur de Perl.

  6. #6
    Membre du Club
    Inscrit en
    Avril 2006
    Messages
    283
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 283
    Points : 62
    Points
    62
    Par défaut
    merci pour vos réponses mais dans doc uitable je ne trouve pas ce que je recherche et il faut que je garde tous les valeurs saisies dans le tableau

    ce que j'aimerai faire c'est dire si ligne i non nulle alors insertion d'une nouvelle ligne

    comment exprimer ce if? comment dire que l'on insère une ligne si la précédente n'est pas nulle?

    merci pour votre aide!!

  7. #7
    Expert confirmé
    Avatar de tug83
    Homme Profil pro
    MATLAB Geek !
    Inscrit en
    Juin 2006
    Messages
    1 781
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Alpes de Haute Provence (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : MATLAB Geek !
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 781
    Points : 4 039
    Points
    4 039
    Par défaut
    Tu as besoin de maitriser 2 propriétées de l'uitable:
    ColumnEditable et celleditcallback

    La première permet à l'utilisateur de pouvoir editer les cellules de l'uitable, la seconde va effectuer des opérations à chaque edition d'une cellule.

    Ici le code que je viens d'écrire en 2 mn ajoute une nouvelle ligne à l'uitable des que tu edites une cellule par une valeur non nulle ... à toi de l'adapter à tes besoins


    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
    function Untitled
    f = figure('Position',[200 200 400 150]);
    dat = rand(3); 
    cnames = {'X-Data','Y-Data','Z-Data'};
    rnames = {'First','Second','Third'};
    t = uitable('Parent',f,'Data',dat,'ColumnName',cnames,... 
                'RowName',rnames,'Position',[20 20 360 100],'ColumnEditable',[true true true],...
                'celleditcallback',@toto);
            
        function toto(my_uitable,nouveau_click)
           
            
            if nouveau_click.NewData ~= 0
                data_before_edit = get(my_uitable,'Data');
                % rajoute une ligne de 1
                set(my_uitable,'Data',[data_before_edit ;ones(1,3)])
            end
        end
    end
    MATLAB 8.2 (R2013b)

    le blog des MATLAB geeks

  8. #8
    Membre du Club
    Inscrit en
    Avril 2006
    Messages
    283
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 283
    Points : 62
    Points
    62
    Par défaut
    merci bcp!!! je le fais et t'en dis des nouvelles!!

  9. #9
    Membre du Club
    Inscrit en
    Avril 2006
    Messages
    283
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 283
    Points : 62
    Points
    62
    Par défaut
    bonjour,

    Ce code est à placer où? dans le celleditcallback? car quand je le fais, matlab plante

    lorsque je créée une nouvelle fonction j'ai:
    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
    ??? Error using ==> feval
    Undefined function or method 'uitable4_CellSelectionCallback' for
    input arguments of type 'struct'.
     
    Error in ==> gui_mainfcn at 96
            feval(varargin{:});
     
    Error in ==> maquette_bak at 42
        gui_mainfcn(gui_State, varargin{:});
     
    Error in ==>
    @(hObject,eventdata)maquette_bak('uitable4_CellSelectionCallback',hObject,eventdata,guidata(hObject))
     
     
    ??? Error while evaluating uitable CellSelectionCallback

  10. #10
    Expert confirmé
    Avatar de tug83
    Homme Profil pro
    MATLAB Geek !
    Inscrit en
    Juin 2006
    Messages
    1 781
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Alpes de Haute Provence (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : MATLAB Geek !
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 781
    Points : 4 039
    Points
    4 039
    Par défaut
    Mon exemple était fait pour un .m avec une nested fonction que j'ai appelée toto. nested ça veut dire que ma fonction ici toto est imbriquée dans une autre fonction parent ici Untitled. Pour faire cela j'ai mis un end à ma nested fonction et un end à la fin de mon programme.

    Maintenant si tu utilise le Guide , tu fais clic droit sur l'objet Table (supposons que cette uitable ait comme tag uitable1) , puis View Callbacks et tu choisis CellEditCallback, ça va automatiquement te générer la fonction function uitable1_CellEditCallback(hObject, eventdata, handles) dans le .m associé à ton.fig.

    et dans ce callback tu pourras mettre les lignes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     if eventdata.NewData ~= 0
                %%%%
            end
    MATLAB 8.2 (R2013b)

    le blog des MATLAB geeks

  11. #11
    Membre du Club
    Inscrit en
    Avril 2006
    Messages
    283
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 283
    Points : 62
    Points
    62
    Par défaut
    merci pour tes réponses
    alors j'ai suivi tes conseils et ça donne ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    %--- Executes when selected cell(s) is changed in uitable4.
    function uitable4_CellSelectionCallback(hObject, eventdata, handles)
    % hObject    handle to uitable4 (see GCBO)
    % eventdata  structure with the following fields (see UITABLE)
    % Indices: row and column indices of the cell(s) currently selecteds
    % handles    structure with handles and user data (see GUIDATA)
     
    if eventdata.NewData ~= 0
       data_before_edit = get(handles.uitable4,'Data');
       % rajoute une ligne de 1
       set(handles.uitable4,'Data',[data_before_edit ;ones(5,2)])
    end
    et j'ai l'erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ??? Reference to non-existent field 'NewData'.

  12. #12
    Expert confirmé
    Avatar de tug83
    Homme Profil pro
    MATLAB Geek !
    Inscrit en
    Juin 2006
    Messages
    1 781
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Alpes de Haute Provence (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : MATLAB Geek !
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 781
    Points : 4 039
    Points
    4 039
    Par défaut
    T'as quelle version de MATLAB ?
    Parce qu’apparemment tu n'aurais que le champs Indices à ta disposition .... je le vois par rapport au commentaires générés par le GUIde... donc tu dois pas avoir une version MATLAB toute récente!
    MATLAB 8.2 (R2013b)

    le blog des MATLAB geeks

  13. #13
    Membre du Club
    Inscrit en
    Avril 2006
    Messages
    283
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 283
    Points : 62
    Points
    62
    Par défaut
    j'ai la version 7.9...
    je pensais qu'elle était récente

    si je fais ça:

    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
    % --- Executes when entered data in editable cell(s) in uitable4.
    function uitable4_CellEditCallback(hObject, eventdata, handles)
    % hObject    handle to uitable4 (see GCBO)
    % eventdata  structure with the following fields (see UITABLE)
    %	Indices: row and column indices of the cell(s) edited
    %	PreviousData: previous data for the cell(s) edited
    %	EditData: string(s) entered by the user
    %	NewData: EditData or its converted form set on the Data property. Empty if Data was not changed
    %	Error: error string when failed to convert EditData to appropriate value for Data
    % handles    structure with handles and user data (see GUIDATA)
    tmp=get(handles.uitable4, 'data')
    [r, c] = size(tmp)
    if eventdata.NewData ~= 0
      set(handles.uitable4, cell(r+1, c))
    end
    j'ai l'erreur:
    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
    ??? Error using ==> feval
    Undefined function or method 'uitable4_CellSelectionCallback' for
    input arguments of type 'struct'.
     
    Error in ==> gui_mainfcn at 96
            feval(varargin{:});
     
    Error in ==> maquette_bak at 42
        gui_mainfcn(gui_State, varargin{:});
     
    Error in ==>
    @(hObject,eventdata)maquette_bak('uitable4_CellSelectionCallback',hObject,eventdata,guidata(hObject))
     
     
    ??? Error while evaluating uitable CellSelectionCallback
    mon code est faux??

  14. #14
    Expert confirmé
    Avatar de tug83
    Homme Profil pro
    MATLAB Geek !
    Inscrit en
    Juin 2006
    Messages
    1 781
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Alpes de Haute Provence (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : MATLAB Geek !
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 781
    Points : 4 039
    Points
    4 039
    Par défaut
    Comment tu fais pour obtenir cette erreur? C'est quoi les étpaes de reproduction?
    est ce que tu as cette erreur quand tu lances directement ton code maquette_bak depuis le Command Window ?
    MATLAB 8.2 (R2013b)

    le blog des MATLAB geeks

  15. #15
    Membre du Club
    Inscrit en
    Avril 2006
    Messages
    283
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 283
    Points : 62
    Points
    62
    Par défaut
    en fait j'ai cette erreur lorsque je veux saisir une valeur dans une cellule du tableau, pour tester si ça marche..
    et dès que je clique sur une cellule, avant même de saisir j'ai cette erreur

  16. #16
    Expert confirmé
    Avatar de tug83
    Homme Profil pro
    MATLAB Geek !
    Inscrit en
    Juin 2006
    Messages
    1 781
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Alpes de Haute Provence (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : MATLAB Geek !
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 781
    Points : 4 039
    Points
    4 039
    Par défaut
    ok je viens de capter !!!

    L'erreur est sur le callback CellSelectionCallback et là tu m'as montré le code du callback CellEditCallback
    donc vérifie si la fonction CellSelectionCallback est bien dans le M-file associé au point fig. Si ce n'est pas le cas , recrée la via le Guide
    MATLAB 8.2 (R2013b)

    le blog des MATLAB geeks

  17. #17
    Expert confirmé
    Avatar de tug83
    Homme Profil pro
    MATLAB Geek !
    Inscrit en
    Juin 2006
    Messages
    1 781
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Alpes de Haute Provence (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : MATLAB Geek !
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 781
    Points : 4 039
    Points
    4 039
    Par défaut
    Je confirme mon message précédent , j'ai pu reproduire ton erreur facilement.
    Tu as créé le callback CellSelectionCallback via le Guide puis tu l'as ensuite effacé du .m et du coup ça plante des que tu édites ta cellule.

    Donc recrée CellSelectionCallback via le Guide et même si tu n'utilises pas ce callback laisse le dans le M-file.
    MATLAB 8.2 (R2013b)

    le blog des MATLAB geeks

  18. #18
    Membre du Club
    Inscrit en
    Avril 2006
    Messages
    283
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 283
    Points : 62
    Points
    62
    Par défaut
    alors écoute j'ai vu que ça commencait à marcher puis pafff matlab plante et force la fermeture avec cette erreur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MATLAB has encountered an internal problem and needs to close
    tu sais pkoi? J'ai cette erreur lorsque je saisis une valeur dans une cellule

    en tout merci bcp pour toutes tes infos!!

  19. #19
    Membre du Club
    Inscrit en
    Avril 2006
    Messages
    283
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 283
    Points : 62
    Points
    62
    Par défaut
    J'ai trouvé!!


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    tm=get(handles.uitable1, 'data')
    [r, c] = size(tm)
    if (all(eventdata.NewData ~= 0)&& (eventdata.Indices(1)==r))
    set(handles.uitable1,'Data', cat(1,tmp,cell(1, c)))
    end
    merci!!

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 10/03/2013, 01h27
  2. Ajout lignes dans tableau
    Par yo_haha dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 11/07/2011, 21h41
  3. [XL-2003] VBA - Ajoute ligne Nouveau tableau
    Par Maiden002 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 29/07/2009, 14h53
  4. Ajouter ligne dans tableau / Ajouter checkbox & signet
    Par TIREUR dans le forum VBA Word
    Réponses: 5
    Dernier message: 16/06/2007, 00h45
  5. ajout ligne dans tableau sous IE
    Par n00noors dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 05/07/2006, 12h55

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