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

Interfaces Graphiques Discussion :

Chemin cellules sélectionnées avec xlsread [Débutant]


Sujet :

Interfaces Graphiques

  1. #1
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Avril 2011
    Messages : 36
    Points : 28
    Points
    28
    Par défaut Chemin cellules sélectionnées avec xlsread
    Bonjour à tous,

    Après avoir vainement cherché sur le net et sur ce forum des réponses à mon problème, je viens une nouvelle fois vers vous pour résoudre le souci :

    J'ai une interface graphique pour laquelle lorsque je clique sur un bouton, il me demande d'ouvrir un fichier excel et de sélectionner des données dedans.
    J'utilise la fonction uigetfile et xlsread pour arriver à mes fins.
    Je sors bien les données dans mon tableau, pas de souci.
    Le problème, c'est que j'aimerais qu'en sortie, en plus des données du tableau, j'ai également la nature des cellules sélectionnées dans mon fichier. Par exemple, si j'ai sélectionné les cellules C1 à C15, je voudrais que sur mon interface s'affiche le nom du fichier ainsi que les cellules sélectionnées dans ce fichier.

    Voici mon code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    function load_X_pushbutton_Callback(hObject, eventdata, handles)
    
    [fich,PathName] = uigetfile('*.xls','Selectionnez le fichier Excel où se trouvent les données X');
    s=xlsread(fich,-1); %sélectionner une colonne dans un fichier Excel
    chem=%c'est là que je veux associer le nom du fichier et les cellules sélectionnées 
    %sortir le chemin du fichier + ID des cellules sélectionnées
    set(handles.path_X_text,'String',chem);
    merci de votre aide

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Tu ne pourras pas récupérer les cellules sélectionnées par le biais de la fonction xlsread.
    La solution serait d'utiliser l'ActiveX control faisant appel au langage VBA.
    Ce lien ainsi que le contenu de la fonction xlsread edit xlsread devraient te permettre d'y arriver.
    Selection.Address te retournera le nom des cellules sélectionnées.

  3. #3
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Avril 2011
    Messages : 36
    Points : 28
    Points
    28
    Par défaut
    Merci pour cette réponse.
    je vais essayer de me débrouiller autrement pour faire plus simple car je ne veux pas me compliquer la vie

    Du coup nouvelle question :
    Pour charger les fichiers, 2 choix se présentent à moi, à partir de deux boutons différents.
    Une fois les fichiers chargés, je veux afficher les données en cliquant sur un autre bouton. Comment lui dire "si le bouton 1 a été cliqué alors..., sinon ..." ?

    Voici le code correspondant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    function affich_surf_pushbutton_Callback(hObject, eventdata, handles)
    
    if %clic sur bouton 1
        XYZ=handles.load_XYZ
        X=XYZ(:,1);
        Y=XYZ(:,2);
        Z=XYZ(:,3);
    else %clic sur bouton 2
        X = handles.load_X;
        Y = handles.load_Y;
        Z = handles.load_Z;
    end
    figure
    affich_surf(X,Y,Z);
    Merci

  4. #4
    Invité
    Invité(e)
    Par défaut
    Vu ce que tu demandes, je présume que tu as assigné ta fonction callback à tes deux pushbuttons.
    À travers la variable hObject, tu obtiens le handle du bouton pressé, il te suffit dès lors de faire une simple comparaison avec les handles de tes deux boutons contenus dans ta structure handles:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if hObject==handles.monBouton1
        % ...
    Sinon pour ta première question Excel:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Excel = actxserver('Excel.Application');
    ActiveWorkbook = Excel.workbooks.Open(filepath,0,true);
    set(Excel,'Visible',true);
    invoke(ActiveWorkbook.Sheets.Item(sheet),'Activate');
    uiwait(warndlg({'Select data region in Excel worksheet.';...
        'Click OK to continue in MATLAB'},...
        'Data Selection Dialogue','modal'));
    V = get(Excel.Selection,'Value');
    CellsName = get(Excel.Selection,'Address');
    invoke(ActiveWorkbook,'Close');
    invoke(Excel,'Quit');
    delete(Excel);
    Tu fournies le chemin du fichier dans filepath ainsi que la feuille dans sheet, et tu obtiens tes valeurs dans V ainsi que le nom des cellules sélectionnées dans CellsName
    Dernière modification par Invité ; 06/05/2011 à 16h58.

  5. #5
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Avril 2011
    Messages : 36
    Points : 28
    Points
    28
    Par défaut
    merci pour cette réponse.

    Concernant la condition sur le handle, j'ai compris l'astuce. J'ai encore un petit souci, parce que la condition est un peu plus compliquée. En gros, je veux pouvoir charger trois colonnes soit en cliquant sur trois boutons différents (load_X, load_Y et load_Z), ou alors en cliquant sur un autre bouton qui permet de sélectionner les trois colonnes ensemble (load_XYZ).

    Je pensais que de mettre une condition "si clic sur Load_XYZ alors X=colonne 1 Y=colonne 2 et Z=colonne 3" sinon "X=données stockée par load_X, Y=données stockée par load_Y et Z=données stockée par load_Z".

    En faisant ce programme avec le code que j'ai, ça marche bien pour le cas "sinon", mais quand je suis dans le cas load_XYZ, il me dit
    ??? Reference to non-existent field 'load_X'.
    Donc il se place aussi dans le cas else.

    Voici mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    function affich_surf_pushbutton_Callback(hObject, eventdata, handles)
     
    if hObject==handles.load_XYZ_pushbutton
        XYZ=handles.load_XYZ_pushbutton;
        X=handles.load_XYZ1;
        Y=handles.load_XYZ2;
        Z=handles.load_XYZ3;
    else
        X = handles.load_X;
        Y = handles.load_Y;
        Z = handles.load_Z;
    end
    J'ai également essayé de changer "handles.load_XYZ_pushbutton" par juste "handles.load_XYZ" mais ça ne marche pas non plus...

    J'ai mis un break point pour voir ce qu'il y avait dans les handles :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    load_XYZ_pushbutton : 9.0013
    load_X_pushbutton : 6.0013
    load_Y_pushbutton : 7.0013
    load_Z_pushbutton : 8.0013
    
    load_X:600x1 double    %ce sont les valeurs de mes données
    load_Y:600x1 double
    load_Z: 600x1 double
    
    affich_surf_pushbutton : 10.0013  %c'est mon hObject dans la function
    Donc c'est normal qu'il se trouve tout le temps dans le cas else vu que le hObject n'est égal à rien de tout ça...

  6. #6
    Invité
    Invité(e)
    Par défaut
    En voyant cette ligne if hObject==handles.load_XYZ_pushbutton, il me vient deux interrogations:
    - À quels objets as-tu relié ce callback?
    - À quel moment et où fixes-tu les valeurs load_XYZ1-2-3, load_X, load_Y et load_Z?

  7. #7
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Avril 2011
    Messages : 36
    Points : 28
    Points
    28
    Par défaut
    Pour le callback if hObject==handles.load_XYZ_pushbutton il est associé au bouton nommé "surface" : affich_surf_pushbutton.

    Load XYZ1-2-3 est fixé quand l'opérateur a clique sur XYZ et sur OK dans la boite de dialogue une fois les cellules sélectionnées.

    Pour load_X etc., c'est quand l'opérateur clique sur le bouton "load X" etc. , de la même façon. Elles sont stockées dans le callback de mes boutons Load XYZ, load X, load Y et load Z.

    j'espère que ça répond à tes questions

  8. #8
    Invité
    Invité(e)
    Par défaut
    Donc si j'ai bien compris:
    Load XYZ1-2-3 est fixé quand l'opérateur a clique sur XYZ et sur OK dans la boite de dialogue une fois les cellules sélectionnées.
    Qui utilise donc le bouton load_XYZ_pushbutton et son callback associé.

    Donc ma question est: pourquoi cette ligne if hObject == handles.load_XYZ_pushbutton ?
    Si le callback du bouton load_XYZ_pushbutton est rattaché au chargement, et a donc son propre callback, ainsi lors de l'exécution du callback du bouton affich_surf_pushbutton, tu n'obtiendras que hObject = affich_surf_pushbutton vu que hObject correspond au handle du bouton appuyé... et donc le fait que tu retombes chaque fois dans le else.

    Ne serait-il pas plus judicieux d'insérer les lignes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    X = ...;
    Y = ...;
    Z = ....;
    dans les callbacks des boutons load_X, load_Y, ... ?
    Dernière modification par Invité ; 05/07/2011 à 01h12.

  9. #9
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Avril 2011
    Messages : 36
    Points : 28
    Points
    28
    Par défaut
    C'est ce que j'ai fait justement !
    Dans le callback de ma fonction load_X, j'ai nommé X=handles.load_X, idem avec load_Y, et load_Z.
    Dans le callback de ma fonction load_XYZ, j'ai aussi nommé X, Y et Z comme des handles de la fonction.

    Le problème, c'est que je n'arrive pas à récupérer ces X Y et Z pour l'utiliser dans le callback de mon bouton affich_surf_pushbutton. Il faut bien que j'appelle un handle d'un des pushbutton pour ça, sauf que l'opérateur appuie soit sur Load_XYZ, soit sur Load_X, load_Y et load_Z. Du coup, je dois mettre une condition sur le callback pour distinguer les deux cas. Si je mets juste
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    function affich_surf_pushbutton_Callback(hObject, eventdata, handles)
         X = handles.load_X;
         Y = handles.load_Y;
         Z = handles.load_Z;
    figure
    affich_surf(X,Y,Z);
    Alors que l'opérateur a cliqué sur load XYZ, il ne va pas connaître load_X, load_Y ou load_Z, tu vois où est mon problème ? C'est pour ça que dans le callback du bouton affich_surf, j'ai besoin de mettre une condition pour savoir sur quel bouton l'opérateur a cliqué pour stocker ses données


    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 load_X_pushbutton_Callback(hObject, eventdata, handles)
    [fichX,PathNameX] = uigetfile('*.xls','Selectionnez le fichier où se trouvent les données X');
    X=xlsread(fichX,-1); %sélectionner une colonne dans un fichier Excel
    pathX=strcat(PathNameX,fichX);
    handles.load_X=X;
     
    function load_Y_pushbutton_Callback(hObject, eventdata, handles)
    [fichY,PathNameY] = uigetfile('*.xls','Selectionnez le fichier où se trouvent les données X');
    Y=xlsread(fichY,-1); %sélectionner une colonne dans un fichier Excel
    pathY=strcat(PathNameY,fichY);
    handles.load_Y=Y;
     
    function load_Z_pushbutton_Callback(hObject, eventdata, handles)
    [fichZ,PathNameZ] = uigetfile('*.xls','Selectionnez le fichier où se trouvent les données X');
    Z=xlsread(fichZ,-1); %sélectionner une colonne dans un fichier Excel
    pathZ=strcat(PathNameZ,fichZ);
    handles.load_Z=Z;
     
    function load_XYZ_pushbutton_Callback(hObject, eventdata, handles)
    [fichXYZ,PathNameXYZ] = uigetfile('*.xls','Selectionnez le fichier où se trouvent les données XYZ accolées');
    XYZ=xlsread(fichXYZ,-1); %sélectionner trois colonnes accolées dans un fichier Excel
    pathXYZ=strcat(PathNameXYZ,fichXYZ);
    X=XYZ(:,1);
    Y=XYZ(:,2);
    Z=XYZ(:,3);
    handles.load_XYZ1=X;
    handles.load_XYZ2=Y;
    handles.load_XYZ3=Z;

  10. #10
    Invité
    Invité(e)
    Par défaut
    Il te manque la ligne guidata(gcbf,handles); à la fin de chaque fonction, elle permet de faire la sauvegarde des éventuels changements de ta structure handles.

  11. #11
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Avril 2011
    Messages : 36
    Points : 28
    Points
    28
    Par défaut
    Je les ai rajouté à chaque fin de fonction, mais j'ai toujours le même problème... Que dois-je mettre en condition if sur mon callback du bouton affich_surf pour qu'il sache sur quel bouton l'opérateur a appuyé pour charger les données?

  12. #12
    Invité
    Invité(e)
    Par défaut
    Comme je te disais, tu n'as pas besoin de cette condition:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    function load_XYZ_pushbutton_Callback(hObject, eventdata, handles)
    [fichXYZ,PathNameXYZ] = uigetfile('*.xls','Selectionnez le fichier où se trouvent les données XYZ accolées');
    XYZ=xlsread(fichXYZ,-1); %sélectionner trois colonnes accolées dans un fichier Excel
    pathXYZ=strcat(PathNameXYZ,fichXYZ);
    handles.load_X=XYZ(:,1);
    handles.load_Y=XYZ(:,2);
    handles.load_Z=XYZ(:,3);
    Sinon, si tu en as besoin pour autre chose, il te suffit d'introduire une variable state sur laquelle tu feras ta condition et qui changera dans les callbacks de chargement.

  13. #13
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Avril 2011
    Messages : 36
    Points : 28
    Points
    28
    Par défaut
    OK, j'ai compris.
    En fait j'avais pas saisi qu'on pouvait donner plusieurs valeurs à un handle. Comme j'avais déjà associé handles.load_X à mon bouton load_X, je n'avais pas saisi qu'on pouvait aussi l'associé au bouton load_XYZ.
    Merci !

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

Discussions similaires

  1. [XL-2013] Sélectionner des cellules invisibles avec Excel2013
    Par Nordiste36 dans le forum Conception
    Réponses: 0
    Dernier message: 18/03/2014, 18h19
  2. créer graphique avec cellules sélectionnées
    Par adriennoob dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 16/04/2010, 21h23
  3. Réponses: 3
    Dernier message: 18/06/2005, 01h31
  4. Construire chemin sur bouton avec évt Javascript
    Par Ph. B. dans le forum XMLRAD
    Réponses: 4
    Dernier message: 27/05/2003, 11h26

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