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 :

xlswrite1 et nouvelle feuille


Sujet :

MATLAB

  1. #1
    Membre expérimenté
    Avatar de Anduriel
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Février 2004
    Messages
    2 290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration

    Informations forums :
    Inscription : Février 2004
    Messages : 2 290
    Points : 1 500
    Points
    1 500
    Par défaut xlswrite1 et nouvelle feuille
    Bonjour,

    Je me suis aperçu un peu tard de ce probleme, donc je ne sais pas si c'est vraiment lié à la fonction xlswrite1().

    Je créais plusieurs feuilles dans une boucle for, de cette maniere:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for i=1:n
       feuille = nom_des_feuilles(i);
       xlswrite(fichier, donnees, feuille, range);
    end
    Je suis passé à xlswrite1 sans rien modifier d'autre, et maintenant seule la nième feuille apparait dans le classeur, à croire que le (k+1) ieme remplace la k ieme.

    Comment expliquer ça, est-ce à cause de xlswrite1?
    Merci

    EDIT: a priro ça ne vient pas de xlswrite1, j'ai essayé les deux methodes et les feuilles sont bien créées. Pourtant je passe bien dans ma boucle, elles devraient être créées...

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

    Citation Envoyé par Anduriel Voir le message
    Je suis passé à xlswrite1 sans rien modifier d'autre
    Cela j'en doute vu qu'il te faut ajouter les lignes de la description créant la variable Excel et ouvrant le fichier.
    Donc pourrais-tu nous montrer ces lignes inclues dans la boucle?

  3. #3
    Membre expérimenté
    Avatar de Anduriel
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Février 2004
    Messages
    2 290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration

    Informations forums :
    Inscription : Février 2004
    Messages : 2 290
    Points : 1 500
    Points
    1 500
    Par défaut
    Après avoir isolé un peu tous les trucs j'en suis arrivé là en fait:

    le invoke() qu'il faut utliser pour lancer l'instance Excel demande un fichier existant. Du coup j'ai créé un fichier Excel en faisant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    f = fopen('fichier.xls', 'w');
    fclose(f);
    Et tout vient de la à priori, il n'aime pas du tout... Quand je créé un fichier vierge à la main, aucun soucis.

    Comment m'y prendre pour bien le créer?

    Merci

  4. #4
    Invité
    Invité(e)
    Par défaut
    Je te conseille de lire la description du fichier sur le FEX

  5. #5
    Membre expérimenté
    Avatar de Anduriel
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Février 2004
    Messages
    2 290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration

    Informations forums :
    Inscription : Février 2004
    Messages : 2 290
    Points : 1 500
    Points
    1 500
    Par défaut
    Merci c'est (presque) parfait! J'étais passé par la il y a un certain temps en plus...

    Je dis presque parce qu'il y a ces fameuses trois feuilles "Feuil1" "Feuil2" "Feuil3"... J'ai vu sur la doc msdn la fonction Delete de Worksheet, mais j'ai une erreur lorsque je fais:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ExcelWorkbook.Worksheet.Delete('Feuil2');
    Je mélange sûrement des trucs là. Y a-t-il une solution?

    Merci

  6. #6
    Invité
    Invité(e)
    Par défaut
    Que souhaites-tu faire exactement avec cette ligne? Je ne vois pas le lien avec ce qui est dit plus haut.
    Et comme toujours... quelle est l'erreur obtenue?

    Citation Envoyé par Anduriel Voir le message
    Je mélange sûrement des trucs là. Y a-t-il une solution?
    Une solution à quoi exactement?

  7. #7
    Membre expérimenté
    Avatar de Anduriel
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Février 2004
    Messages
    2 290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration

    Informations forums :
    Inscription : Février 2004
    Messages : 2 290
    Points : 1 500
    Points
    1 500
    Par défaut
    Quand je créé le nouveau classeur, il contient par défaut trois feuilles nommées "Feuil1,2 et 3". Moi j'ajoute des feuilles par le code, qui s'ajoutent derrière ces trois feuilles, qui me sont inutiles.

    J'ai tenté avec cette ligne de supprimer ces feuilles du classeurs, mais l'erreur (je ne l'ai plus exactement sous la main...) me dit que la commande n'existe pas.

  8. #8
    Invité
    Invité(e)
    Par défaut
    L'objet correct est ExcelWorkbook.Worksheets.
    Sinon essai ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    i = % numéro ou nom de la feuille
    invoke(ExcelWorkbook.Sheets.Item(i),'Delete')
    Ou une autre solution est de renommer au lieu de supprimer...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    set(ExcelWorkbook.Sheets.Item(i),'Name','NouveauNom')

  9. #9
    Membre expérimenté
    Avatar de Anduriel
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Février 2004
    Messages
    2 290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration

    Informations forums :
    Inscription : Février 2004
    Messages : 2 290
    Points : 1 500
    Points
    1 500
    Par défaut
    Merci pour ta réponse, je l'ai testée dans un cas où elle fonctionne mais pas dans un second. Dans le premier cas (fichier inexistant), je supprime à la suite du SaveAs (d'après le FEX), et ça fonctionne.

    Dans le second cas, si le fichier existe déjà, je veux supprimer tous les onglets. Voila un code test que j'ai fait à part et qui ne fonctionne pas (je n'ai aucune erreur, mais aucun onglet n'est supprimé):

    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
    clc
    path_file = 'mon_fichier.xls';
     
    Excel = actxserver ('Excel.Application');
    ExcelWorkbook = invoke(Excel.Workbooks,'Open',path_file);
     
    % ce qui suit est un test "en dur"
     ExcelWorkbook.Sheets.Count - 1 % 16
     invoke(ExcelWorkbook.Sheets.Item(1),'Delete')
    % ...
    invoke(ExcelWorkbook.Sheets.Item(1),'Delete')
     ExcelWorkbook.Sheets.Count - 1 % toujours 16
    % fin du test
     
    % ce qui suit devrait être le code réel: on supprime le 
    % premier onglet et lorsqu'il en reste 1 seul on le renomme.
    for i=1:ExcelWorkbook.Sheets.Count - 1
       invoke(ExcelWorkbook.Sheets.Item(1),'Delete')
    end
    set(ExcelWorkbook.Sheets.Item(1),'Name','Ma_feuille')
     
    ExcelWorkbook.Close(true);
    Excel.Quit
    Excel.delete
    clear Excel
    Peux tu me dire si le code fonctionne chez toi?
    Merci

  10. #10
    Membre expérimenté
    Avatar de Anduriel
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Février 2004
    Messages
    2 290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration

    Informations forums :
    Inscription : Février 2004
    Messages : 2 290
    Points : 1 500
    Points
    1 500
    Par défaut
    Même le code que j'ai trouvé là:

    http://www.mathworks.com/matlabcentr..._thread/243153

    ne fonctionne pas...

    EDIT: si ça peut aider j'ai remarqué que ça fonctionne à la suite d'un Add, mais pas d'un Open.

    EDIT: J'ai finalement trouvé une solution, j'écrase simplement le fichier au lieu de l'ouvrir et de supprimer les onglets:

    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
    % Ouverture de l'instance Excel
    Excel = actxserver ('Excel.Application');
     
    % Création du fichier xls
    ExcelWorkbook = Excel.workbooks.Add;
     
    % Suppression des feuilles existantes
    % On renomme le premier onglet
    ExcelWorkbook.Sheets.Item(1).Delete;
    ExcelWorkbook.Sheets.Item(1).Delete;
    set(ExcelWorkbook.Sheets.Item(1),'Name','Nom_Feuille')
     
    % xlswrite1()
     
    Excel.Application.DisplayAlerts = 0;
    ExcelWorkbook.SaveAs(path_file, 1);
    Excel.Application.DisplayAlerts = 1;
    Excel.Quit
    Excel.delete
    clear Excel

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

Discussions similaires

  1. ouvrir une nouvelle feuille word en VBA
    Par fa310428 dans le forum VBA Word
    Réponses: 4
    Dernier message: 13/04/2007, 12h27
  2. inserer des nouvelles feuilles dans un classeur excel
    Par chamus dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 29/12/2006, 17h22
  3. [excel] Pb de gestion de boutons sur une nouvelle feuille
    Par kenny49 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 25/08/2006, 19h22
  4. insérer une nouvelle feuille Excel à partir d' Access
    Par Sebastien_INR59 dans le forum Access
    Réponses: 2
    Dernier message: 06/08/2006, 19h47
  5. [VBA-E] : Nouvelle Feuille
    Par forsay1 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 23/05/2006, 14h42

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