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 :

Listbox et xlsread [Débutant]


Sujet :

Interfaces Graphiques

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    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
    Par défaut Listbox et xlsread
    Bonjour à tous,

    j'ai un petit souci avec les listbox, j'ai du mal à cerner comment ça marche.
    Mon but, c'est d'allier un xlsread avec la listbox.

    Je souhaite que l'opérateur, en cliquant sur un bouton, aille sélectionner des colonnes dans un fichier Excel, et que dans la listbox s'affiche le nom du fichier. En sélectionnant cet objet dans la listbox, il pourra par la suite récupérer les données qu'il a sélectionnées dans les colonnes associées.

    Jusque là, voici ce que j'ai fait :

    - implémenter dans la listbox le nom des fichiers sélectionnés à chaque clic bouton
    - dans le callback du bouton chargement, créer un tableau dans lequel sont recensées les données chargées à chaque clic bouton.

    J'aimerais savoir comment faire 2 choses :

    - Réussir à ajouter en plus du nom de fichier, un chiffre indicatif, par exemple '01- fich1.xls' '02 - fich2.xls' s'il a cliqué deux fois sur le bouton. Je pense qu'il faut utiliser strcat, mais je ne vois pas trop comment incrémenter le nombre du début à chaque clic.

    - Associer le tableau des données chargées avec le nom du fichier (donc son numéro dans la liste en fait).

    Voici mon code jusqu'à présent :

    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
     
    function CartoWaf_OpeningFcn(hObject, eventdata, handles, varargin)
    handles.output = hObject;
    handles.donnees={0};
    guidata(hObject, handles);
     
    %------------- CALLBACKS DES BOUTONS D'ENTREE DES DONNEES ---
    function load_pushbutton_Callback(hObject, eventdata, handles)
    [fichXYZ, pathXYZ] = uigetfile('*.xls','Selectionnez fichier>colonnes ACCOLÉES où se trouvent les données XYZ');
        XYZ=xlsread(fichXYZ,-1); %sélectionner trois colonnes accolées dans un fichier Excel
        %Stocker les données chargées dans un tableau à chaque clic
        tab_donn=handles.donnees; 
        tab_donn{:,end+1}=XYZ;
        handles.donnees=tab_donn;
     
        %sortir le nom du fichier
        str = get(handles.listbox1,'string');
        str = cellstr(str);
        str{end+1} = fullfile(pathXYZ,fichXYZ);
        set(handles.listbox1,'string',str);
     
        guidata(hObject, handles);
        guidata(gcbf,handles);
     
     
    %-------------- AFFICHAGE DES FICHIERS DANS LA LISTBOX ---------------
    function listbox1_Callback(hObject, eventdata, handles)
    contents = cellstr(get(hObject,'String')); %returns listbox1 contents as cell array
    fich=contents{get(hObject,'Value')}; %returns selected item from listbox1
     
     
    function listbox1_CreateFcn(hObject, eventdata, handles)
    if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
        set(hObject,'BackgroundColor','white');
    end

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

    Citation Envoyé par hi2238 Voir le message
    - Réussir à ajouter en plus du nom de fichier, un chiffre indicatif, par exemple '01- fich1.xls' '02 - fich2.xls' s'il a cliqué deux fois sur le bouton. Je pense qu'il faut utiliser strcat, mais je ne vois pas trop comment incrémenter le nombre du début à chaque clic.
    doc sprintf sera je pense plus approprié.
    Pour la gestion du nombre, il te suffit de faire une initialisation à 0 dans ton OpeningFcn, puis une simple incrémentation dans le callback. Ce compteur étant stocké dans ta structure handles, comme tout le reste.
    Citation Envoyé par hi2238 Voir le message
    - Associer le tableau des données chargées avec le nom du fichier (donc son numéro dans la liste en fait).
    Je ne suis pas sûr du lien que tu veux faire, mais je pense que les cells serait un bon moyen

  3. #3
    Membre averti
    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
    Par défaut
    Merci de tes indications.
    Je n'ai finalement pas utilisé sprintf, mais par en mixant des str2num et de la concaténation j'ai finalement réussi, par le biais d'un tableau initialisé à 0 dans mon Opengfcn, comme tu me l'avais conseillé. Merci !

  4. #4
    Invité
    Invité(e)
    Par défaut
    Juste pour te montrer l'utilisation de sprintf, plus simple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    num = 1;
    sprintf('%02d- fich%d.xls',num,num)

  5. #5
    Membre averti
    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
    Par défaut
    Effectivement, ça semble être une solution plus simple à celle que j'avais mise en place.
    J'ai une nouvelle question concernant la sélection multiple dans une listbox.
    Dans mon GUI, j'ai fixé le max à 2 pour autoriser la sélection multiple, et j'aimerais que ma variable fich stocke les noms des items sélectionnés dans ma listbox.

    Avec mon code, si je clique sur les fichiers les uns après les autres, ma variable fich s'incrémente bien avec les noms des fichiers sur lesquels j'ai cliqué. le problème c'est quand je fais un ctrl+clic sur le fichier, pour en avoir 2, il me donne deux infos différentes suivant la façon dont je sélectionne

    Exemple, si j'ai une listbox avec dans l'ordre
    fich1.xls
    fich2.xls

    Je clique sur fich1.xls, puis je fais CTRL+clic sur fich2.xls, et ma variable fich me donne :

    fich = [fich1.xls fich1.xls]

    Si j'agis à l'inverse, i.e. je clique sur fich2.xls, puis je fais CTRL+clic sur fich1.xls, ma variable fich me donne :

    fich = [fich2.xls fich1.xls]

    Voici mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    function listbox1_Callback(hObject, eventdata, handles)
        %Récupérer le nom de l'item sélectionné dans la listbox
        fich=handles.fich; %initialisé dans l'OpengFcn
        contents = cellstr(get(hObject,'String'));
        fich{end+1}=contents{get(hObject,'Value')};
        handles.fich=fich;
    Mon problème arrive quand on sélectionne d'abord le premier item de la liste. Si on sélectionne tout autre item, ça marche bien (ma variable fich stocke les bons noms de fichier)

  6. #6
    Invité
    Invité(e)
    Par défaut
    Le problème vient du fait que fich{end+1}=contents{get(hObject,'Value')}; ne retient que le premier élément des valeurs contenues dans get(hObject,'Value'). Or get(hObject,'Value') range les éléments dans l'odre croisant du contenu, et donc si tu sélectionnes le premier élément au début, tu ajouteras toujours le premier élément.

    Une solution:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    function listbox1_Callback(hObject, eventdata, handles)
        %Récupérer le nom de l'item sélectionné dans la listbox
        contents = cellstr(get(hObject,'String'));
        fich=contents(get(hObject,'Value'));
    Remarque: si tu rentres les éléments de ta lisbox sous forme de cells, tu n'as alors pas besoin d'utiliser la fonction cellstr par la suite.
    Dernière modification par Invité ; 30/05/2011 à 16h05.

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

Discussions similaires

  1. DrawItem d'un listbox...
    Par scorpiwolf dans le forum C++Builder
    Réponses: 5
    Dernier message: 22/06/2007, 15h50
  2. [Listbox] ScrollBar Horizontal
    Par haleem dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 20/04/2005, 07h53
  3. Recuper les items de ListBox d'une autre application [API?]
    Par Shamanisator dans le forum API, COM et SDKs
    Réponses: 3
    Dernier message: 27/09/2002, 12h32
  4. [Canvas] Listbox, couleur et multiselect
    Par rbag dans le forum Composants VCL
    Réponses: 3
    Dernier message: 25/09/2002, 13h02
  5. Copier le texte d'un ListBox dans le clipboard.
    Par Clément[Delphi] dans le forum Composants VCL
    Réponses: 3
    Dernier message: 18/08/2002, 08h20

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