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 :

Contrôle d'Excel par MATLAB via Automation [Tutoriel]


Sujet :

MATLAB

  1. #1
    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 160
    Points
    53 160
    Par défaut Contrôle d'Excel par MATLAB via Automation
    Contrôle d'Excel par MATLAB via Automation

    Contrôle d'Excel par MATLAB via Automation est constitué des articles suivants :

    1. Généralités ;
    2. Connexion ;
    3. Les objets et leur manipulation ;
    4. Gestion des feuilles ;
    5. Les plages de cellules ;
    6. Limites ;
    7. Écriture de données et mise en forme ;
    8. Lecture de données.

    Grâce à ces articles contenant de nombreux exemples, vous apprendrez à interfacer efficacement Excel et MATLAB sous Windows.

    Ces articles sont principalement destinés aux développeurs MATLAB quel que soit leur niveau.

    En plus de l'apprentissage des techniques d'interfaçage, ils peuvent également initier le développeur MATLAB à l'environnement VBA (Excel, Word, PowerPoint…).

    Les développeurs VBA pourront également y trouver des informations utiles afin de se familiariser avec MATLAB.
    Lien : http://briot-jerome.developpez.com/matlab/tutoriels/excel-automation/sommaire/

    N'hésitez pas à donner vos avis et à apporter des commentaires sur cet article à la suite de ce message

    Vous pouvez également noter cet article en utilisant l'outil de notation de cette discussion dans la barre de menu en haut à droite





    Retrouver les meilleurs cours et tutoriels pour apprendre Microsoft Office Excel
    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)

  2. #2
    FLB
    FLB est déconnecté
    Modérateur
    Avatar de FLB
    Homme Profil pro
    Ing. Aérospatiale
    Inscrit en
    Juin 2003
    Messages
    770
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Ing. Aérospatiale
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2003
    Messages : 770
    Points : 1 185
    Points
    1 185
    Par défaut
    Salut Dut,
    merci pour ce riche article!
    Je me permet de partager 2 liens, qui sont annexes au sujet présenté. Ils pointent vers le site undocumentedmatlab.com, par Yair Altman :
    Comment modifier actxserver pour utiliser une instance excel déjà démarrée, qui pourra alléger vos traitements de nombreuses fiches excels
    Utiliser un équivalent de xlswrite sous linux ou mac, sans passer par le format csv (par exemple).
    Florent

  3. #3
    Membre éprouvé Avatar de issoram
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2009
    Messages
    665
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2009
    Messages : 665
    Points : 929
    Points
    929
    Par défaut
    Merci pour cet article intéressant, très instructif et bien construit.

    Bonne continuation

  4. #4
    Expert confirmé
    Avatar de duf42
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Novembre 2007
    Messages
    3 111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Formateur en informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 111
    Points : 4 661
    Points
    4 661
    Par défaut

    Le tuto est vraiment bien fait, bien construit et bien détaillé, bravo.
    Simulink & Embedded Coder

    Au boulot : Windows 7 , MATLAB r2016b
    A la maison : ArchLinux mais pas MATLAB

  5. #5
    Modérateur
    Avatar de le fab
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    1 880
    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 880
    Points : 3 426
    Points
    3 426
    Par défaut
    lu en diagonale, mais super article !
    faut que je m'y plonge un de ces 4 pour améliorer la solution bâtarde que j'avais apporté à un problème rencontré lors de la migration en 64 bits
    d'ailleurs à l'époque j'avais difficilement trouvé de l'aide sur les objet COM sur le net ! (et je ne connaissait pas l'option « Référence du développeur » dans Excel)

    bref, top!

  6. #6
    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 160
    Points
    53 160
    Par défaut
    Citation Envoyé par Dut Voir le message
    Il faut mettre le chemin absolu et non pas relatif vers le fichier xlsx.

    Donc par ../../../ mais D:\...\...\...\

    J'ai ajouté cette remarque dans le tutoriel : Connexion - Ouvrir un fichier existant
    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)

  7. #7
    Membre régulier
    Inscrit en
    Décembre 2012
    Messages
    97
    Détails du profil
    Informations forums :
    Inscription : Décembre 2012
    Messages : 97
    Points : 87
    Points
    87
    Par défaut
    Article très clair et vraiment très bien détaillé avec lequel il a été aisé de me faire la main sur le sujet et qui m'a été d'un grand secours.

    Un grand bravo et encore merci !

    Edit : petite coquille au Chapitre IV - Comparaison avec xlswrite de l'Ecriture des Données et Mise en Forme :

    Ce code présente troisdeux inconvénients que nous allons développer dans les chapitres suivants.

  8. #8
    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 160
    Points
    53 160
    Par défaut
    Un 8ème article vient compléter la série : Gestion des feuilles
    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)

  9. #9
    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 160
    Points
    53 160
    Par défaut
    Citation Envoyé par Adjen Voir le message
    Edit : petite coquille au Chapitre IV - Comparaison avec xlswrite de l'Ecriture des Données et Mise en Forme :
    C'est corrigé

    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)

  10. #10
    Nouveau Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2013
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2013
    Messages : 1
    Points : 1
    Points
    1
    Par défaut mise en forme conditionnelle
    Tout d'abord un grand merci pour ce tutoriel qui est vraiment très bien réalisé!

    Peut être qu'une question n'a pas sa place ici, mais je désire en poser une à propos de la mise en forme conditionnelle. Je cherche à utiliser une échelle de couleur. En suivant votre modèle j'arrive à :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    colsc = range.FormatConditions.Add(xlColorScale);%où la cst VB xlColorScale=3
    ou encore :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    colsc = range.FormatConditions.AddColorScale(ColorScaleType);  %où la cst VB ColorScaleType=2 pour une échelle à 2 couleurs
    maintenant je voudrais inverser cette échelle qui va du rouge pour les faibles valeurs au jaune pour les grandes valeurs pour un soucis de représentativité

    j'ai tenté d'utiliser quelque chose comme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    colsc.ColorScaleCriteria(1).FormatColor.Color = 65535;
    colsc.ColorScaleCriteria(2).FormatColor.Color = 255;
    en m'appuyant sur les codes VB mais sans résultat. J'ai le message d'erreur suivant :
    No appropriate method, property, or field FormatColor for class
    Interface.00024494_0000_0000_C000_000000000046.
    Le message parle par lui même. FormatColor n'est pas le champs approprié sous MATLAB. Quel champs ou simplement quelle formulation serait donc approprié(e)?
    Merci par avance pour vos lumières! ^^

  11. #11
    Futur Membre du Club
    Homme Profil pro
    Ingénieur
    Inscrit en
    Novembre 2011
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur

    Informations forums :
    Inscription : Novembre 2011
    Messages : 12
    Points : 8
    Points
    8
    Par défaut
    Merci pour ce tutoriel, que je lis d'ailleurs pour la seconde fois.

    Je me permets juste de signaler un infime détail, il manque une simple quote ' section III-B-2 dans le code suivant juste après Feuil3 sur la première ligne.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    >> sheet = Excel.Worksheets.Item('Feuil3);
    >> sheet.Name = 'Mesures';
    Sinon super boulot!

  12. #12
    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 160
    Points
    53 160
    Par défaut
    Citation Envoyé par Basto92 Voir le message
    Je me permets juste de signaler un infime détail, il manque une simple quote ' section III-B-2
    C'est corrigé
    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)

  13. #13
    Futur Membre du Club
    Homme Profil pro
    Ingénieur
    Inscrit en
    Novembre 2011
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur

    Informations forums :
    Inscription : Novembre 2011
    Messages : 12
    Points : 8
    Points
    8
    Par défaut
    J'ajouterais également que pour la section III-A que l'explication de semble pas parfaitement claire, voir même peut-être fausse. En tous cas, je pense que cela pourrait être amélioré...
    Car, selon moi c'est deux commandes ne permettent pas d'activer une plage de cellule, comme c'est indiqué.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    range = Excel.ActiveSheet.Range('B3').get('Resize',3,2);
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    range = get(Excel.ActiveSheet.Range('B3'),'Resize',3,2);
    D'après mes tests, il vaudrait mieux compléter le code et écrire quelque chose comme ce qui suit pour activé une plage de cellules.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    range = Excel.ActiveSheet.Range('B3').get('Resize',3,2);
    range.Address
    Excel.ActiveSheet.Range(range.Address).Select
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    range = get(Excel.ActiveSheet.Range('B3'),'Resize',3,2);
    range.Address
    Excel.ActiveSheet.Range(range.Address).Select
    Je ne suis pas spécialiste du VBA Excel et je découvre, alors je peux me tromper, si quelqu'un peut me confirmer ou m'infirmer en expliquant.


    1ère ajout:

    J'ajoute même que pour la section d'après cette ligne de code ne semble elle aussi pas fonctionner.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Excel.ActiveSheet.Cells
    Mais le code suivant si.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    range=Excel.ActiveSheet.Cells
    range.Address
    Excel.ActiveSheet.Range(range.Address).Select
    Désolé pour le double poste, j'ai rechargé la page et cela semble avoir dysfonctionné et créé deux messages.



    2ème ajout:

    Pour simplifier les codes de je propose et clarifier ceux de l'auteur, il faut juste ajouter ".Select" à ceux de l'auteur pour bien sélectionner un plage de cellules.

  14. #14
    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 160
    Points
    53 160
    Par défaut
    Voici un argument contre le .Select :

    Citation Envoyé par Pierre Fauconnier
    En VBA pour Excel, on n'aime pas trop le SELECT, car il ralentit l'exécution du code, puisque la méthode SELECT "singe" la sélection d'une cellule par l'utilisateur. Il est de loin préférable de s'en passer chaque fois que l'on peut, et de travailler avec un objet de type Range.
    C'est pour cela que .Select n'apparait quasiment jamais dans cette série de tutoriels
    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)

  15. #15
    Futur Membre du Club
    Homme Profil pro
    Ingénieur
    Inscrit en
    Novembre 2011
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur

    Informations forums :
    Inscription : Novembre 2011
    Messages : 12
    Points : 8
    Points
    8
    Par défaut
    Ah très bien, j'ai sans doute manqué cette remarque, si elle présente dans le tutoriel. Néanmoins comme souvent il y des images qui montrent la sélection par exemple en résultat afin de checker l'avancement en parallèle du tutoriel sur sa propre machine, et cela porte donc un peu à confusion.

    Je ne vais pas tout relever sur ce forum, mais j'ai noter d'autres lignes de codes proposées qui malheureusement ne fonctionnement pas lorsque je les exécute.
    Peut-être un problème de versions des logiciels, ou bien des évolutions du VBA... Notament souvent il faut ajouter le mot clé Workbook, par exemple pour les premières commandes du dernier chapitre.

    Exemple de mon 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
    Excel = actxserver('Excel.Application');
    Excel.Visible = true;
    xlspath = '...';
    xlsfile = 'data.xlsx';
    Workbook=Excel.Workbooks.Open(fullfile(xlspath,xlsfile));
    
    num = Workbook.ActiveSheet.Range('B2').Value;
    str = Workbook.ActiveSheet.Range('C2').Value;
    bool = Workbook.ActiveSheet.Range('D2').Value;
    
    Workbook.Close(false);
    Excel.Quit;
    delete(Excel)
    clear Excel
    Bref, quoi qu'il en soit ce tuto' est très bien réalisé, en j'en remercie tout les contributeurs.

  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 160
    Points
    53 160
    Par défaut
    Merci pour tes remarques. Je vais essayer de reprendre cette série de tuto pour éviter ces problèmes de compréhension.

    N'hésite pas à m'envoyer tes relevés d'erreur par MP si tu trouves cela plus simple.
    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
    Candidat au Club
    Femme Profil pro
    Ingénieur validation
    Inscrit en
    Juillet 2014
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Ingénieur validation
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2014
    Messages : 7
    Points : 3
    Points
    3
    Par défaut
    Bonjour,

    Merci pour votre article, il est très bien fait.

    Cordialement

    Souad

  18. #18
    Nouveau Candidat au Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2016
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2016
    Messages : 1
    Points : 1
    Points
    1
    Par défaut
    Merci beaucoup de ce tuto clair et complet, il m'a bien aidé !

    M.

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