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

Macros et VBA Excel Discussion :

conversion MatLab vers VBA


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2011
    Messages : 1
    Par défaut conversion MatLab vers VBA
    Bonjour tout le monde,

    j'ai fais un programme matlab mais je voudrais le "convertir" en VBA pour pouvoir l'utiliser sous excel (car il n'y a pas matlab à mon stage).
    Je ne connais pas du tout VBA et je voudrais savoir si il est possible que vous me donnier les fonctions equivalentes à celles que j'ai écris ci dessous en langage matlab.

    Le principale probleme est je pense le lancement du solveur d'excel... :euh:

    Merci d'avance

    Voici mon main:

    Code matlab : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    beta1=5; %on definit les paramètres initiaux à tester
    beta2=4;
    vecteurDeBeta=[beta1 beta2];
    %%%%%%%%%%%%%%%%%%%%%%%%%
    %je lance ma fonction qui me permet d'avoir l'erreur à minimiser
    MonErreurAminimiser=erreur(vecteurDeBeta);
    %%%%%%%%%%%%%%%%%%%%%%%%%
    %on lance une optimisation pour avoir les paramètres optimisés, c'est à dire ceux
    %qui minimisent l'erreur
    vecteurDeParametreOptimises=solveur(vecteurDeBeta,@erreur(vecteurDeBeta),1e-6);
    %je donne au solveur les parametres initiaux, un pointeur vers la fonction qui
    %calcul l'erreur, et enfin la limite en dessous de laquelle je veux que l'erreur se trouve
    Voici la fonction erreur:

    Code matlab : 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
    function MonErreurAminimiser=erreur(vecteurDeBeta)
     
    delete('1990.csv'); % on efface le fichier 1990.csv du repertoire
    %on va remplacer les paramères du fichier beta.inp par ceux ci
    delete('beta.inp'); %on supprime le fichier beta existant
    %on réécrit un nouveau inp où il y aura nos paramètres à tester
    fichierBeta = fopen('beta.inp','wt');
    %on écrit trois ligne avec beta=valeur de notre parametre à écrire
    fprintf(fichierBeta,'beta=%g\n'), vecteurDeBeta(1));
    fprintf(fichierBeta,'beta=%g\n'), vecteurDeBeta(2));
    fclose(fichierBeta);%on a fini on ferme le fichier
    %on lance notre calcul
    dos('ansys=dynamique.inp');
    %on attend l'écriture du fichier résultat
    f=which('1990.csv'); %cherche le fichier .csv ds le repertoire
    while isempty(f) %temps que variable f est vide on continue à attendre
        f=which('1990.csv'); %regarder si le fichier est apparu
    end; %si le fichier est apparu on sort de la boucle
    %-------------
    %on recupére les données expérimentales qui se trouve dans excel
    ToutesColonnesExp = load('experimental.xls');
    %je choisie la 2eme colonne et toute ses lignes
    donneesExp = ToutesColonnesExp(:,2);
    %je recupére les données du calcul
    ToutesColonnesNum = load('1990.csv');
    %je concerve que la onzieme colonne de la ligne 2 à la dernière
    donneesNum = ToutesColonnesExp(2:end,11);
    %-------------
    %je calcul l'erreur entre les 2 colonnes, pour cela je fais une boucle sur
    %toutes les lignes et je soustrais les résultats expérimentaux aux Num
    erreur=0;
    for i=1:1:length(donneesExp)
    erreur=erreur+(donneesExp(i)-donneesNum(i))*(donneesExp(i)-donneesNum(i));
    end
    %------------
     
    MonErreurAminimise=erreur;
    end

    j'espere que vous pourrez m'aidez...

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    2 051
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 2 051
    Par défaut
    moi aussi ça pourrait m'intéresser,

    apparemment il est possible de faire des manipulations à la main et VBA enregistre les fonctions que l'on a fait manuellement...

    ca risque d'etre un peu long de retouver tout cela mais c'est faisable je pense...

  3. #3
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2010
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mars 2010
    Messages : 75
    Par défaut
    Bonjour,
    je suis sur le même problème y a t'il quelqu'un qui a réussi cette manipulation ?

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    2 051
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 2 051
    Par défaut
    personnellement je ne me suis pas penché sur le problème, d'autant plus que je n'utilise pratiquement jamais excel...

    bon courage

  5. #5
    Membre émérite 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
    Par défaut
    Il faudrait que tu détailles un peu plus:
    - type des variables
    - dimensions des tableaux

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    vecteurDeParametreOptimises=solveur(vecteurDeBeta,@erreur(vecteurDeBeta),1e-6);
    Que fait la fonction solveur en Matlab, elle appelle le solveur d'Excel?

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    2 051
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 2 051
    Par défaut
    Citation Envoyé par issoram Voir le message
    Que fait la fonction solveur en Matlab, elle appelle le solveur d'Excel?
    ça je peux y répondre :

    => la fonction qui a été appelée "solveur" n'existe pas dans matlab

    => en fait, l'auteur du sujet à mis "solveur" car il y a différents solver possible comme par exemple "fminsearch"

    "fminsearch" est une fonction qui prend en parametre d'entrée X (qui est un vecteur de taille n) et ensuite cherche à minimiser le residu donnée par la fonction "erreur"

    voici le fichier d'aide de matlab qui explique fminsearch:
    http://www.mathworks.fr/help/techdoc...minsearch.html

    sous matlab il existe aussi le solveur lsqnonlin :
    http://www.mathworks.fr/help/toolbox...lsqnonlin.html

    bon courage

    ps: je ne vois pas du tout comment faire sous excel mais ça m'intéresse si quelqu'un sait faire

    ==> par contre, excel peut il lancer des logiciels extérieurs comme il est avec matlab dans le premier message ?

  7. #7
    Membre émérite 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
    Par défaut
    Ok,

    Du coup effectivement l'usage du solveur Excel pour "remplacer" une fonction de minimisation Matlab, ça risque d'être compliqué!

    Pour lancer un logiciel extérieur via VBA oui c'est possible, il faut aller voir du côté de la dll shell32 et la fonction shellExcecute. Il y'a bien longtemps je l'avais utilisée pour lancer des calculs (d'optimisation comme quoi.... ) via Scilab (frère jumeau gratuit de Matlab).
    Il y'a peut être d'autres dll d'ailleurs.

    Bon courage.

  8. #8
    Expert confirmé
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Par défaut
    Bonjour,

    Je n'utilise pas Matlab mais il n'y aurait pas une référence dédié dans les références de l'éditeur VBA ?

  9. #9
    Membre expérimenté
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    207
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 207
    Par défaut
    Citation Envoyé par 21did21 Voir le message
    ==> par contre, excel peut il lancer des logiciels extérieurs comme il est avec matlab dans le premier message ?
    Apparemment oui: Matlab COM Automation Server

    Citation Envoyé par issoram Voir le message
    Pour lancer un logiciel extérieur via VBA oui c'est possible, il faut aller voir du côté de la dll shell32 et la fonction shellExcecute
    On peut lancer Matlab depuis un shell. Pour lancer une commande ou un script complet, il faut utiliser:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    matlab -r "statement" 'starts MATLAB and executes the specified MATLAB statement. Any required file must be on the MATLAB search path or in the startup directory.
    Mais je ne sais pas comment on récupère le résultat (faudrait voir s'il est redirigé dans le shell déjà...).


    Sinon j'ai déjà vu une fois du Matlab "interfacé" avec du VBA et c'était fait en bricolant...
    Dans le cas en question, le programme Matlab avait été compilé en langage machine (d'abord en C peut-être, je ne me souviens plus exactement) et l'exécutable était appelé depuis Excel. Les échanges de données entre les 2 se faisaient via un fichier texte.

Discussions similaires

  1. Conversion code MATLAB vers VBA
    Par viejo dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 03/07/2012, 18h06
  2. Conversion MATLAB vers Scilab
    Par mainak29 dans le forum Scilab
    Réponses: 3
    Dernier message: 24/02/2011, 05h06
  3. Conversion MATLAB vers Visual C++
    Par dey84 dans le forum MATLAB
    Réponses: 4
    Dernier message: 23/12/2010, 22h21
  4. [COMPILER] Conversion MATLAB vers C++
    Par milach dans le forum MATLAB
    Réponses: 5
    Dernier message: 07/05/2008, 11h47
  5. Conversion Vb6 Vers Vba
    Par thunderpat dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 29/03/2007, 11h49

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