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] get(Excel.Activesheet,'Range',x) => error code: 0x800A03EC


Sujet :

MATLAB

  1. #1
    Futur Membre du Club
    Inscrit en
    Août 2013
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Août 2013
    Messages : 9
    Points : 6
    Points
    6
    Par défaut [Excel] get(Excel.Activesheet,'Range',x) => error code: 0x800A03EC
    J'ai un problème avec Matlab lorsque j'utilise get(Excel.Activesheet,'Range',x).

    Si je fais comme ci-dessous:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    x = 'D4,D16,D28,D40,D52,D64,D76,D88,D100,D112,D124,D136,D148,D160,D172,D184,D196,D208,D220,D232,D244,D256,D268,D280,D292,D304,D316,D328,D340,D352,D364,D376,D388,D400,D412,D424,D436,D448,D460,D472,D484,D496,D508,D520,D532,D544,D556,D568,D580,D592,D604,D616,D628'
     
    Range = get(Excel.Activesheet,'Range',x);
    Aucun problème!

    Mais si j'ajoute une valeur de plus a X:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    x = 'D4,D16,D28,D40,D52,D64,D76,D88,D100,D112,D124,D136,D148,D160,D172,D184,D196,D208,D220,D232,D244,D256,D268,D280,D292,D304,D316,D328,D340,D352,D364,D376,D388,D400,D412,D424,D436,D448,D460,D472,D484,D496,D508,D520,D532,D544,D556,D568,D580,D592,D604,D616,D628,D640'
     
    Range = get(Excel.Activesheet,'Range',x);
    Matlab me donne cette erreur:
    ??? Error: Object returned error code: 0x800A03EC
    La raison est que dans le premier exemple ma chaîne de caractère fait moins de 255 lettres alors que dans le deuxième exemple elle en fait plus de 255.

    Si cela peut aider, mon objectif est de tracer un graphique excel depuis matlab avec ses valeurs en utilisant quelque chose comme ça par la suite:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    NewSeries = invoke(Excel.ActiveChart.SeriesCollection,'NewSeries');
    NewSeries.XValues  = X_Range;
    NewSeries.Values = Y_Range;
    Je sais que ce type d'erreur est souvent lie a la version de excel que l'on utilise, mais je ne pense pas que ce soit mon cas puisque j'utilise la nouvelle version de excel(.xlsx). De plus j'utilise Matlab 7.9.0 R2009b

    Savez vous comment résoudre mon problème?
    Merci d'avance!

    PS: Désole pour les fautes, notamment les accents sur les 'a', j'ai actuellement un clavier allemand, donc sans accents -_-

  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 : 52 883
    Points
    52 883
    Par défaut
    C'est effectivement une limite.

    Pour la contourner, tu peux copier les données des différentes cellules de la plage dans une plage de cellules contigües ailleurs sur la feuille. Tu pourras ensuite simplement utiliser une plage du type A1:A100 ou utiliser la propriété CurrentRegion des objets Range

    Ce n'est pas très joli, mais ça fonctionnera
    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
    Futur Membre du Club
    Inscrit en
    Août 2013
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Août 2013
    Messages : 9
    Points : 6
    Points
    6
    Par défaut
    Merci pour ta réponse Dut/Jerome!

    En effet cela fonctionne, mais apporte aussi plusieurs problèmes:

    => Jusqu’à il y a peu je faisais mes plots avec matlab et je les enregistrais sur mon rapport excel. Le problème de cette méthode est que si je veux sélectionner une valeur particulière (manuellement) sur mon graphe (chart) je ne peux pas (ben oui c'est une image...) , idem si je veux modifier une valeur dans mon tableau excel, ça n'a aucun effet sur mon graph. Du coup je ne veux plus d'image matlab, je veux un graphe généré par excel (depuis matlab).
    Le problème de ta solution qui consiste a copier les valeurs dans une autre plage de cellules, est que si je modifie une valeur dans mon tableau initial ça n'influe pas sur mon graphe puisqu'il est crée a partir d'autres cellules.
    (Je ne sais pas si je suis clair, si besoin demandes moi de reformuler.)
    Est ce que tu as une solution pour ce problème?
    Est il possible de lie la nouvelle plage de cellules a l'ancienne? (Ainsi en modifiant l'original, on modifie automatiquement la nouvelle plage de cellules, et donc le graphique.)

    => Un second problème (moins grave) est que vu que j'applique cette méthode de nombreuses fois, sur un très gros tableau de données, je crée donc beaucoup de "nouvelles plages de cellules" (une pour chaque graphe) et que par la suite je ne peux pas supprimer ces plages de cellules (sinon je vire les données du graphe aussi...). Du coup ça fait un excel vraiment moche avec pleins de tableaux dans tous les sens alors que j'ai déjà un beau tableau récapitulatif (celui d'origine).
    Pour ce problème la je doute fort qu'il y ai une solution, mais c'est beaucoup moins grave que le premier problème.

    Au fait, je n'ai pas encore eu le temps de le faire, mais je te remercie pour le super tuto que tu as fais (http://briot-jerome.developpez.com/m...tion/sommaire/) il m'est d'une grande aide!

    Encore une fois, je ne sais pas si je suis très clair dans ma façon d'exprimer mon problème (c'est clair dans ma tete ), du coup si tu ne comprends pas une partie n’hésites pas a me demander de reformuler.

    Encore merci pour ton aide!

  4. #4
    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 : 52 883
    Points
    52 883
    Par défaut
    Il faut utiliser des formules pour lier les valeurs de différentes cellules.

    Pour un meilleur rendu esthétique, tu peux aussi cacher certaines colonnes (ou lignes). Mais si tu souhaites tracer des valeurs cachées, il faudra veiller à ce que la propriété PlotVisibleOnly de l'objet Chart soit à False.

    Voici un exemple "simple" :

    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
    y = rand(15,1);
    ActiveSheet.Range('A1:A15').Value = y;
     
    k = 1;
    for n = 1:2:15
     
        range = sprintf('A%d',n);
        val = ActiveSheet.Range(range).Value;
     
        range = sprintf('B%d',k);
        ActiveSheet.Range(range).Value = val;
     
        range = sprintf('C%d',k);
        formula = sprintf('=A%d',n);
        ActiveSheet.Range(range).Formula = formula;
     
        range = sprintf('D%d',k);
        formula = sprintf('=A%d',n);
        ActiveSheet.Range(range).Formula = formula;
     
        k = k+1;
     
    end
     
    ActiveSheet.Columns.Item(4).Hidden = true;
     
    range = ActiveSheet.Range('F1:J15');
    ActiveSheet.ChartObjects.Add(range.Left,range.Top,range.Width,range.Height);
    newChart = ActiveSheet.ChartObjects(1).Chart;
    xlXYScatterLines = 74;
    newChart.ChartType = xlXYScatterLines;
    range = ActiveSheet.Range('C1:C8');
    newChart.SetSourceData(range);
    newChart.HasLegend = false;
     
    range = ActiveSheet.Range('K1:O15');
    ActiveSheet.ChartObjects.Add(range.Left,range.Top,range.Width,range.Height);
    newChart = ActiveSheet.ChartObjects(2).Chart;
    xlXYScatterLines = 74;
    newChart.ChartType = xlXYScatterLines;
    newChart.PlotVisibleOnly = false;
    range = ActiveSheet.Range('D1:D8');
    newChart.SetSourceData(range);
    newChart.HasLegend = false;
    Il ne faut modifier que les valeurs de la colonne A et voir les répercutions de ces modification sur les colonnes B, C et D et sur les deux graphiques.

    J'espère que le code est suffisamment clair.

    Citation Envoyé par ydeseved Voir le message
    je te remercie pour le super tuto que tu as fais (http://briot-jerome.developpez.com/m...tion/sommaire/) il m'est d'une grande aide!
    Ton avis, tes remarques ou tes critiques sont les bienvenues dans cette discussion
    Images attachées Images attaché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)

  5. #5
    Futur Membre du Club
    Inscrit en
    Août 2013
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Août 2013
    Messages : 9
    Points : 6
    Points
    6
    Par défaut
    Merci pour ta reponse.

    Je test ca des que j'ai un peu de temps et je reviens te dire si j'ai encore des problemes (ce sera surement le cas ).

    Bon weekend!

  6. #6
    Futur Membre du Club
    Inscrit en
    Août 2013
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Août 2013
    Messages : 9
    Points : 6
    Points
    6
    Par défaut
    Tout fonctionne a merveille!

    Merci beaucoup pour ton aide Dut/Jérôme!

    Je repasserai par ici, si je rencontre d'autres problèmes avec le contrôle d'excel via Matlab!

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

Discussions similaires

  1. [VBA - Excel - Word] Problème avec Range(Cells(1,1),Cells(10,10))
    Par Tanoffy dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 08/10/2014, 11h07
  2. [Python 2.X] [win32com]Excel SetValue Error -2146827284 (== 0x800A03EC)
    Par DonKnacki dans le forum Bibliothèques tierces
    Réponses: 0
    Dernier message: 25/07/2014, 14h26
  3. [Excel 2007] ActiveSheet.Range
    Par Ambrocbt dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 03/10/2011, 17h52
  4. [MFC/Excel] Comment utiliser un Range ?
    Par SmOkEiSBaD dans le forum MFC
    Réponses: 2
    Dernier message: 14/05/2008, 14h00
  5. [MFC][Excel] Intégration excel et MFC!
    Par fadoua dans le forum MFC
    Réponses: 2
    Dernier message: 22/12/2003, 10h51

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