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 :

Excel et MATLAB


Sujet :

MATLAB

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    85
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2013
    Messages : 85
    Points : 34
    Points
    34
    Par défaut Excel et MATLAB
    Bonjour à tous,

    J'aurais besoin d'un petit peu d'aide pour créer un fichier Excel à partir de matlab. J'ai bien entendu lu tout votre tuto sur le sujet mais j'ai quelques points à éclaircir !

    Tout d'abord, voici le programme que j'exécute :

    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
    fid=fopen('045639 T01 02 1028710.txt','r');
    data = strrep(fread(fid, [1 inf], '*char'), ',', '.');
    fclose(fid);
    T = textscan(data,'%f%f%f%f%f%f%f', 'CollectOutput', 1);
    t=0:1:length(T{1}(5:end,1))-1;
    t=t';
    y=[];
    ENERGIE=[];
    RMS=[];
    A=[];
    B=[];
    Tmp=[];
    i=5;
    l=length(Tmp);
    j=1;
    for i=5:1:7
        Tmp=T{1}(5:end,i);
        [A(i) B(i)]=max(Tmp);
        y(i)=max(max(T{1}(5:end,i))).*0.1;
        P1(i)=find(Tmp(B(i)+1:end)<y(i),1,'first');
        P2(i)=find(Tmp(1:B(i))<y(i),1,'last');
        ENERGIE(i)=trapz(Tmp(P2(i):P1(i)+B(i)));
        RMS(i-4)=sqrt(mean(T{1}(P2(i):P1(i)+B(i),i-4).^2));
    end
    La=20*log10(RMS/10^-6);
    Lv=20*log10(RMS/10^-9);
    La(1,4:7)=0;
    Lv(1,4:7)=0;
    DONNEE=[mean(Lv(1:3)),mean(La(1:3)),mean(A(5:7)),mean(ENERGIE(5:7)),max(T{1}(5:end,4))];
    Et ensuite j'ai commencé à faire ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Excel = actxserver('Excel.Application');
    Workbook = Excel.Workbooks.Add;
    Excel.Visible=true;
    Excel.Worksheets.Item(1).Name='Valeurs Moyennes';
    Excel.Worksheets.Item(2).Name='Valeurs récupérées';
    Excel.Worksheets.Item(3).Name='Graphique';
    Excel.ActiveSheet.Range('B4').Value='Moyenne Lv (dB)';
    Excel.ActiveSheet.Range('C4').Value='Moyenne La (dB)';
    Excel.ActiveSheet.Range('D4').Value='Moyenne Effort Maximal (N)';
    Excel.ActiveSheet.Range('E4').Value='Moyenne Energie Effort (J)';
    Excel.ActiveSheet.Range('F4').Value='Effort Traction Maximal';
    Excel.ActiveSheet.Range('A1').Value='Date';
    Excel.ActiveSheet.Range('A2').Value='Nombre de fichiers';
    Excel.ActiveSheet.Range('A4').Value='OF ou numéro de pièce';
    J'ai donc plusieurs questions, je vous les résume points par points pour être plus compréhensible.

    1) Je n'arrive pas à mettre la date de la création du fichier. J'ai déjà utilisé ceci mais ça ne m'affiche qu'un chiffre du genre "383272,58338":

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    >> Excel.ActiveSheet.Range('B1').Value=now-datenum('01-Jan-1904 00:00:00');
    2) Comment pourrais-je afficher dans une case du tableau Excel le numéro du fichier .txt, que j'utilise dès le début du code sur cette ligne, automatiquement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fid=fopen('045639 T01 02 1028710.txt','r');
    3) Est-ce qu'il est possible de créer un graphique sur Excel (sur cette page précisément : "Excel.Worksheets.Item(3).Name='Graphique'") à partir d'une commande sous matlab et avec des données de matlab ? (plot ?)

    4) J'aimerais que le programme puisse s'exécuter sur plusieurs fichiers .txt à la fois et non pas sur un seul fichier comme il est montré dans le précédent CODE. Je pensais qu'il était possible à ce que le programme puisse carrément prendre tout les fichiers .txt dans un dossier précis et qu'il les passe un par un pour ensuite stocker tous les résultats dans un seul fichier Excel mais je ne sais pas comment m'y prendre ! Ou peut-être, si c'est aussi possible, que l'utilisateur du programme puisse sélectionner lui même les fichiers avant l'exécution du programme grâce à un "message-box" ou quelque chose du genre.

    Voilà j'espère avoir été assez clair !

    En tout cas je remercie ceux qui se pencheront sur mes questions.

    Tom

  2. #2
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 302
    Points : 53 165
    Points
    53 165
    Par défaut
    Citation Envoyé par Tom dB Voir le message
    1) Je n'arrive pas à mettre la date de la création du fichier. J'ai déjà utilisé ceci mais ça ne m'affiche qu'un chiffre du genre "383272,58338":
    Voir le code présenté dans ce chapitre : http://briot-jerome.developpez.com/m...-forme/#LIII-C au niveau du commentaire % Mise en forme des cellules contenant les entêtes des dates sous forme de jour.

    Citation Envoyé par Tom dB Voir le message
    2) Comment pourrais-je afficher dans une case du tableau Excel le numéro du fichier .txt, que j'utilise dès le début du code sur cette ligne, automatiquement :
    Il suffit de stocker le nom dans une variable :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    filename = '045639 T01 02 1028710.txt';
    fid=fopen(filename,'r');
    data = strrep(fread(fid, [1 inf], '*char'), ',', '.');
    fclose(fid);
    et d'utiliser ensuite cette variable dans le code d'écriture dans Excel

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Excel.ActiveSheet.Range(...).Value = filename;

    Citation Envoyé par Tom dB Voir le message
    3) Est-ce qu'il est possible de créer un graphique sur Excel (sur cette page précisément : "Excel.Worksheets.Item(3).Name='Graphique'") à partir d'une commande sous matlab et avec des données de matlab ? (plot ?)
    Tout est possible... mais ce n'est pas expliqué dans la série de tutoriels car c'est un gros chapitre
    Il faudrait faire une recherche sur ce forum pour voir si ce sujet n'a pas déjà été abordé.

    Citation Envoyé par Tom dB Voir le message
    4) J'aimerais que le programme puisse s'exécuter sur plusieurs fichiers .txt à la fois
    Pour commencer, voir la FAQ : Comment lister les fichiers d'une certaine extension dans un répertoire ?
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  3. #3
    Modérateur
    Avatar de le fab
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    1 881
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 881
    Points : 3 429
    Points
    3 429
    Par défaut
    Citation Envoyé par Tom dB Voir le message
    3) Est-ce qu'il est possible de créer un graphique sur Excel (sur cette page précisément : "Excel.Worksheets.Item(3).Name='Graphique'") à partir d'une commande sous matlab et avec des données de matlab ? (plot ?)
    Citation Envoyé par Dut Voir le message
    Tout est possible... mais ce n'est pas expliqué dans la série de tutoriels car c'est un gros chapitre
    Il faudrait faire une recherche sur ce forum pour voir si ce sujet n'a pas déjà été abordé.
    sinon selon tes besoins, il est tout a fait possible de créer un "template", cad un fichier excel vide déjà formaté selon tes besoins, soit :
    - la colonne date au format date
    - un graphique pré définit si la zone de ton graphique est à peu près connue
    - même éventuellement les noms des colonnes dans ton fichier

    ensuite avec les commandes actxserver, tu ouvres ce fichier, tu le sauvegarde sous le nouveau nom souhaité et tu le remplis puis le re sauvegarde

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    85
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2013
    Messages : 85
    Points : 34
    Points
    34
    Par défaut
    Salut ! Merci pour vos réponses !

    J'aurais besoins de quelques précisions par contre.

    Il suffit de stocker le nom dans une variable :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    filename = '045639 T01 02 1028710.txt';
    fid=fopen(filename,'r');
    data = strrep(fread(fid, [1 inf], '*char'), ',', '.');
    fclose(fid);
    et d'utiliser ensuite cette variable dans le code d'écriture dans Excel

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Excel.ActiveSheet.Range(...).Value = filename;



    Pour commencer, voir la FAQ : Comment lister les fichiers d'une certaine extension dans un répertoire ?

    J'ai donc fait ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    rep='F:\xxx';
    ext='*.txt';
    chemin=fullfile(rep,ext);
    list=dir(chemin);
    filename=list.name ??
    fid=fopen(filename,'r');
    Je ne sais pas comment m'y prendre pour récupérer ce fichu nom maintenant. Je sais déjà qu'il faut que j'utilise la commande "list.name" pour avoir le nom, mais c'est pour la suite. Comment pourrais-je récupérer juste le nom (sans le .txt à la fin) et aussi avoir le nombre de fichiers que j'ai récupérer (j'ai test lenght, size sans succès comme je pouvais le prévoir), et enfin comment pourrais-je utiliser la commande "list.name" dans mon fopen ? (si je met exactement ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    filename='list.name'; 
    fid=fopen(filename,'r');
    Je ne vais pas ouvrir le fichier avec le véritable nom, mais un fichier inexistant du nom de "list.name" !


    sinon selon tes besoins, il est tout a fait possible de créer un "template", cad un fichier excel vide déjà formaté selon tes besoins, soit :
    - la colonne date au format date
    - un graphique pré définit si la zone de ton graphique est à peu près connue
    - même éventuellement les noms des colonnes dans ton fichier

    ensuite avec les commandes actxserver, tu ouvres ce fichier, tu le sauvegarde sous le nouveau nom souhaité et tu le remplis puis le re sauvegarde
    Ca pourrait être intéressant mais j'aimerais bien connaître l'autre méthode avant
    Vous ne connaissez pas un tuto qui pourrait me renseigner ?

  5. #5
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 302
    Points : 53 165
    Points
    53 165
    Par défaut
    Comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    for n = 1:numel(list)
     
       filename = list(n).name; 
       fid=fopen(filename,'r');
       ...
     
    end
    Pour récupérer uniquement le nom du fichier sans l'extension, utilise la fonction fileparts

    Pour la question sur les graphiques, quel type de graphique souhaiterais-tu voir apparaitre dans Excel ?
    Avec quelles données ?
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    85
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2013
    Messages : 85
    Points : 34
    Points
    34
    Par défaut
    Je voudrais exactement ce type de graphique (voir jpg joint)

    En abscisse, j'ai juste un vecteur temps allant de 1 jusqu'à X (le nombre de mesures)
    En ordonnée, j'ai un valeur pour chaque fichier .txt.

    Pour le moment je veux en faire deux pour deux valeurs différentes. Chaque fichier comptes une valeur dans chacun des deux tableaux.
    Images attachées Images attachées  

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    85
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2013
    Messages : 85
    Points : 34
    Points
    34
    Par défaut
    De plus, il me manque plus qu'une ligne qui m'embête dans ma boucle. J'ai déjà fait ce code :

    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
    rep='F:\XXX';
    ext='*.txt';
    chemin=fullfile(rep,ext);
    list=dir(chemin);
    n=1;
    for n=1:numel(list)
        filename=list(n).name;
        fid(n)=fopen(filename,'r');
        data = strrep(fread(fid(n), [1 inf], '*char'), ',', '.'); 
        fclose(fid(n));
        T(n) = textscan(data,'%f%f%f%f%f%f%f', 'CollectOutput', 1);
        t=0:1:length(T{n}(5:end,1))-1;
        t=t';
        i=5;
        for i=5:1:7
            Tmp=T{n}(5:end,i);
            [A(n,i) B(n,i)]=max(Tmp);
            y(n,i)=max(max(T{n}(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{n}(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{n}(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)];
    end
    Cependant j'ai ce message d'erreur à cause de ma dernière ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ???  In an assignment  A(I) = B, the number of elements in B and
     I must be the same.
    Je sais exactement à quoi il correspond mais je n'arrive pas à y remédier !
    J'ai essayer de mettre ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     DONNEE=[mean(Lv(n,1:3)),mean(La(n,1:3)),mean(A(n,5:7)),mean(ENERGIE(n,5:7)),EFFORTT(n)];
    Le code marche mais je n'ai pas du tout la matrice que je veux. Elle ne m'affiche que ma dernière valeur itérative ! (dans mon cas c'est n=2 car je n'ai que 2 fichier .txt dans mon répertoire)
    Pour moi il me parait logique de mettre "(n)" si je veux toutes mes lignes !!!

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

    La partie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [mean(Lv(n,1:3)) , mean(La(n,1:3)) , mean(A(n,5:7)) , mean(ENERGIE(n,5:7)) , EFFORTT(n)];
    est un vecteur de 5 valeurs, que tu ne peux donc pas simplement stocker dans DONNEE(n) qui n'en représente qu'une.
    Utilise simplement un tableau de taille numel(list) x 5 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    DONNEE = zeros(numel(list), 5 );
    for n=1:numel(list)
        % ...
        DONNEE(n,:) = ...
    Dernière modification par Invité ; 26/04/2013 à 11h19. Motif: correction erreur

  9. #9
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    85
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2013
    Messages : 85
    Points : 34
    Points
    34
    Par défaut
    Effectivement je n'avais pas pensé à ça... Merci !

    Par contre c'était un 5 en colonnes !

    Sinon vous avez des idées pour les graphiques que je souhaiterai tracer ?

  10. #10
    Invité
    Invité(e)
    Par défaut
    Il va falloir que j'apprenne à compter

    As-tu pensé à l'enregistrement de macro ? C'est souvent bien utile

  11. #11
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    85
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2013
    Messages : 85
    Points : 34
    Points
    34
    Par défaut
    Citation Envoyé par Winjerome Voir le message

    As-tu pensé à l'enregistrement de macro ? C'est souvent bien utile
    C'est à dire ?
    Passer par la macro de Excel ? Si c'est ça j'y connais mais vraiment rien du tout !

  12. #12
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Tom dB Voir le message
    Passer par la macro de Excel ?
    Oui, la syntaxe est, à peu de choses près, exactement la même.
    Tu t'enregistres en train de créer le graphique que tu souhaites, et tu n'as plus qu'à fortement t'inspirer du code créé
    Toujours le turoriel de Dut : Exploiter l'enregistrement de macros Excel
    N'hésite pas à aller sur le forum VBA Excel.

  13. #13
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    85
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2013
    Messages : 85
    Points : 34
    Points
    34
    Par défaut
    Bon je vais voir si ça marche cette macro.

    Mais est-ce que je pourrais l'appeler dans mon programme matlab ensuite ??? Parce que je ne voudrais pas lancer 2 programmes à la fois !
    Si tu as d'autres idées DUT vu que tu m'avais poser une question la dessus je suis preneur aussi

    Sinon j'aurai besoin de vous encore pour 2 petits soucis :

    1) Je souhaitais afficher les noms des fichiers .txt comme je vous l'avais dit avant. Voici une partie de mon code avec en gras les parties qui nous intéressent :
    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
    for n=1:numel(list)
        filename(n)={list(n).name};
        fid(n)=fopen(filename{n},'r');
        data = strrep(fread(fid(n), [1 inf], '*char'), ',', '.'); %Remplace tous les ',' par des '.' dans le "fread"
        fclose(fid(n));
        T(n) = textscan(data,'%f%f%f%f%f%f%f', 'CollectOutput', 1);
        i=5;
        for i=5:1:7
            Tmp=T{n}(5:end,i);
            [A(n,i) B(n,i)]=max(Tmp);
            y(n,i)=max(max(T{n}(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{n}(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{n}(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)];
        
        range = sprintf('%c%d:%c%d','A'+0,5,'A'+0,4+n);
        range2 = sprintf('%c%d:%c%d','A'+1,5,'A'+5,4+n);
        Excel.ActiveSheet.Range(range).Value=filename;
        Excel.ActiveSheet.Range(range2).Value=DONNEE;
    end
    Lorsque je laisse "...=filename;" je me retrouve avec le même nom dans mes 2 cases (j'ai 2 fichiers .txt) et si je met "...=filename{n}" je me retrouve avec l'autre même nom dans mes 2 cases. Je n'arrive pas à avoir les deux noms !!
    Je souhaiterai aussi enlever l'extension .txt lorsque j'écris le nom dans le ficher Excel, vous m'aviez dit d'utiliser la commande "fileparts" maisça ne m'affiche rien du tout ! Voici ce que cela m’envoie :

    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
    >> filename{1}
     
    ans =
     
    045639 T01 02 1028710.txt
     
    >> filename{2}
     
    ans =
     
    783375 1 Bas 01.txt
     
    >> fileparts(filename{1})
     
    ans =
     
         ''
     
     
    >> fileparts(filename{2})
     
    ans =
     
         ''

    2) Je n'arrive toujours pas à afficher l'heure et la date du jour ! J'ai essayé de me reporter à ce que tu m'avais dit DUT mais je n'ai vraiment pas compris comment l'utiliser !

    Voir le code présenté dans ce chapitre : http://briot-jerome.developpez.com/m...-forme/#LIII-C au niveau du commentaire % Mise en forme des cellules contenant les entêtes des dates sous forme de jour.
    Tom

  14. #14
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Tom dB Voir le message
    Mais est-ce que je pourrais l'appeler dans mon programme matlab ensuite ??? Parce que je ne voudrais pas lancer 2 programmes à la fois !
    Ce sera directement ton code MATLAB, moyennant quelques changements minimes depuis le code de la macro généré.

    Citation Envoyé par Tom dB Voir le message
    vous m'aviez dit d'utiliser la commande "fileparts" maisça ne m'affiche rien du tout ! Voici ce que cela m’envoie :
    Autant faudrait lire la documentation de la fonction avant de l'utiliser au hasard...
    [pathstr, name, ext] = fileparts(filename)

  15. #15
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    85
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2013
    Messages : 85
    Points : 34
    Points
    34
    Par défaut
    Autant faudrait lire la documentation de la fonction avant de l'utiliser au hasard...
    [pathstr, name, ext] = fileparts(filename)
    Exact, je l'ai pourtant lu mais je ne l'ai pas compris comme ça, surtout que mon anglais approximatif ne m'a pas vraiment aidé... Désolé !

    Par contre je n'arrive toujours pas avoir les deux noms des deux fichiers et je ne sais vraiment pas d'où vient ce problème.

  16. #16
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 302
    Points : 53 165
    Points
    53 165
    Par défaut
    Citation Envoyé par Tom dB Voir le message
    2) Je n'arrive toujours pas à afficher l'heure et la date du jour ! J'ai essayé de me reporter à ce que tu m'avais dit DUT mais je n'ai vraiment pas compris comment l'utiliser !
    Essaie ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Excel.ActiveSheet.Range('B1').Value = now-datenum('01-Jan-1904 00:00:00');
    Excel.ActiveSheet.Range('B1').NumberFormatLocal = 'jj/mm/aaaa';
    Tu peux t'aider de la documentation de la propriété NumberFormatLocal et t'inspirer du contenu de cette autre page : http://office.microsoft.com/en-us/ex...005198679.aspx (voir tout en bas "Dates & Times").
    Le format est donné avec les abréviations françaises avec NumberFormatLocal ou bien avec celles en anglais avec NumberFormat
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  17. #17
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    85
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2013
    Messages : 85
    Points : 34
    Points
    34
    Par défaut
    Citation Envoyé par Dut Voir le message
    Essaie ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Excel.ActiveSheet.Range('B1').Value = now-datenum('01-Jan-1904 00:00:00');
    Excel.ActiveSheet.Range('B1').NumberFormatLocal = 'jj/mm/aaaa';
    Tu peux t'aider de la documentation de la propriété NumberFormatLocal et t'inspirer du contenu de cette autre page : http://office.microsoft.com/en-us/ex...005198679.aspx (voir tout en bas "Dates & Times").
    Le format est donné avec les abréviations françaises avec NumberFormatLocal ou bien avec celles en anglais avec NumberFormat
    Super ça marche niquel ! Merci.

    J'utilisais jusque là "datestr(now, 'dd/mm/yyyy')" mais ça m'affichait ça : #######. Par contre lorsque je clickait la date s'affichait.

    Sinon si vous avez des idées pour ce soucis là :

    1) Je souhaitais afficher les noms des fichiers .txt comme je vous l'avais dit avant. Voici une partie de mon code avec en gras les parties qui nous intéressent :
    Code :
    Sélectionner tout - Visualiser dans une fenêtre à part

    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
    for n=1:numel(list)
        filename(n)={list(n).name};
        fid(n)=fopen(filename{n},'r');
        data = strrep(fread(fid(n), [1 inf], '*char'), ',', '.'); 
        fclose(fid(n));
        T(n) = textscan(data,'%f%f%f%f%f%f%f', 'CollectOutput', 1);
        i=5;
        for i=5:1:7
            Tmp=T{n}(5:end,i);
            [A(n,i) B(n,i)]=max(Tmp);
            y(n,i)=max(max(T{n}(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{n}(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{n}(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)];
     
        range = sprintf('%c%d:%c%d','A'+0,5,'A'+0,4+n);
        range2 = sprintf('%c%d:%c%d','A'+1,5,'A'+5,4+n);
        Excel.ActiveSheet.Range(range).Value=filename;
        Excel.ActiveSheet.Range(range2).Value=DONNEE;
    end
    Lorsque je laisse "...=filename;" je me retrouve avec le même nom dans mes 2 cases (j'ai 2 fichiers .txt) et si je met "...=filename{n}" je me retrouve avec l'autre même nom dans mes 2 cases. Je n'arrive pas à avoir les deux noms !!

  18. #18
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 302
    Points : 53 165
    Points
    53 165
    Par défaut
    Remplace ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        filename(n)={list(n).name};
        fid(n)=fopen(filename{n},'r');
        data = strrep(fread(fid(n), [1 inf], '*char'), ',', '.'); 
        fclose(fid(n));
    simplement par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    filename = list(n).name;
    fid(n) = fopen(filename,'r');
    data = strrep(fread(fid, [1 inf], '*char'), ',', '.'); 
    fclose(fid);
    Tu n'as pas besoin d'indexer les variable sur n vu que tu ne les utilises plus après la sortie de la boucle for-end.

    De même pour la variable T

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    T(n) = textscan(data,'%f%f%f%f%f%f%f', 'CollectOutput', 1);
    devient simplement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    T = textscan(data,'%f%f%f%f%f%f%f', 'CollectOutput', 1);
    et après, à la place de T{n} tu dois utiliser T{1}.
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  19. #19
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    85
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2013
    Messages : 85
    Points : 34
    Points
    34
    Par défaut
    J'ai essayé ce que tu m'as proposé mais j'ai toujours le même soucis. Je n'ai que le dernier nom qui s'affiche !

    Je te le redonné modifié :

    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
    50
    51
    52
    53
    54
    55
    56
    57
    58
    rep='F:\xxx';
    ext='*.txt';
    chemin=fullfile(rep,ext);
    list=dir(chemin);
     
     
    Excel = actxserver('Excel.Application');
    Workbook = Excel.Workbooks.Add;
    Excel.Visible=true;
    Excel.Worksheets.Item(1).Name='Valeurs Moyennes';
    Excel.Worksheets.Item(2).Name='Valeurs récupérées';
    Excel.Worksheets.Item(3).Name='Graphique Lv Moyen';
    Excel.Worksheets.Item(3).Name='Graphique Effort Max';
    Excel.ActiveSheet.Range('B4').Value='Moyenne Lv (dB)';
    Excel.ActiveSheet.Range('C4').Value='Moyenne La (dB)';
    Excel.ActiveSheet.Range('D4').Value='Moyenne Effort Maximal (N)';
    Excel.ActiveSheet.Range('E4').Value='Moyenne Energie Effort (J)';
    Excel.ActiveSheet.Range('F4').Value='Effort Traction Maximal (N)';
    Excel.ActiveSheet.Range('A1').Value='Date de création';
    Excel.ActiveSheet.Range('A2').Value='Nombre de fichiers';
    Excel.ActiveSheet.Range('A4').Value='OF ou numéro de pièce';
    Excel.ActiveSheet.Range('B1').Value = now-datenum('01-Jan-1904 00:00:00');
    Excel.ActiveSheet.Range('B1').NumberFormatLocal = 'jj/mm/aaaa HH:MM';
     
    n=1;
    DONNEE=zeros(numel(list),5);
    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);
        i=5;
        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:%c%d','A'+0,5,'A'+0,4+n);
        range2 = sprintf('%c%d:%c%d','A'+1,5,'A'+5,4+n);
        Excel.ActiveSheet.Range(range).Value=name;
        Excel.ActiveSheet.Range(range2).Value=DONNEE;
    end
     
    Excel.ActiveSheet.Range('B2').Value=n;

  20. #20
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 302
    Points : 53 165
    Points
    53 165
    Par défaut
    Peux-tu relancer exactement le même code en enlevant le point-virgule à la fin de la ligne [pathstr, name, ext]=fileparts(filename); et en nous montrant ce qui s'affiche dans le Command Window de MATLAB?
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

Discussions similaires

  1. Réponses: 3
    Dernier message: 12/07/2007, 11h38
  2. Problème de version excel sous matlab
    Par mariono dans le forum MATLAB
    Réponses: 1
    Dernier message: 06/07/2007, 12h08
  3. Réponses: 6
    Dernier message: 05/04/2007, 13h45
  4. Peut-on lire un fichier Excel avec MATLAB ?
    Par nico_ippo dans le forum MATLAB
    Réponses: 1
    Dernier message: 05/11/2006, 18h37
  5. Configuration Excel Link MATLAB
    Par Eric06 dans le forum MATLAB
    Réponses: 2
    Dernier message: 13/09/2006, 15h28

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