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

 Delphi Discussion :

passage d'une macro excel vers delphi


Sujet :

Delphi

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    279
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations forums :
    Inscription : Septembre 2006
    Messages : 279
    Points : 99
    Points
    99
    Par défaut passage d'une macro excel vers delphi
    bonjour à tous;
    J'ai un fichier Excel contenant une macro mon but est de d'intégrer le traitement de cette macro dans delphi lors du click sur un bouton donné en créant un nouveau fichier Excel.

    Alors est que je dois traduire tout le code VB en Delphi ou il y a une autre solution à faire?

    une autre question j'aimerais bien créer mon fichier Excel meme si Microsoft Office n'est pas installé dans le poste. Est il possible ?

    Merci infiniment et bonne journée.

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 45
    Points : 49
    Points
    49
    Par défaut voir le tutoriel qui vas bien ;)
    Si la macro est déja presente dans le classeur, tu devrait trouver ton bonheur là:
    http://delphi.developpez.com/faq/?pa...cellancermacro

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    279
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations forums :
    Inscription : Septembre 2006
    Messages : 279
    Points : 99
    Points
    99
    Par défaut
    Merci pour ta réponse, mais je cherche pas à exécuter la macro contenu dans Excel je veux créer un nouveau fichier et le remplir par le même résultat que la macro donnera .
    Donc est ce que je dois traduire tout le code VB de la macro en Delphi ou bien il y a une autre façon pour se faire??

    Merciiiiiiiiii

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 45
    Points : 49
    Points
    49
    Par défaut
    Donc, si je comprend bien, tu par de rien et tu veut
    -Creer un fichier excel vierge
    -Lancer un traitement corespondant à une macro Excel
    C'est ça?

    une solution "propre" serait soit de traduire chaque ligne VBA en Delphi.
    Si ça inclu des appel aux comande OLE (genre mise en page du document Excel), ça va etre beaucoup plus lent que l'original

    Une autre solution "propre" serait de
    -lancer excel avec un classeur vierge
    -Lancer l'execution d'un code VBA. Tu à la possibilité depuis Delphi de lancer tout un bloc de code VBA, mais je ne retrouve plus comment faire

    Solution malpropre : à coté de ton programme delphi, tu met un document Excel contenant ta macro.
    -Tu copie ce fichier vers sa destination final
    -tu ouvre la fichier "final" avec excel
    -tu lance la macro depuis delphi

    Solution "malpropre", mais en plus propre :
    Tu inclu ton fichier Excel dans l'executable grace aux ressources. Voir le tutoriel suivant:
    http://delphicool.developpez.com/ressources/

    Si excel n'est pas installé, aucune de ces methode ne fonctionent

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    279
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations forums :
    Inscription : Septembre 2006
    Messages : 279
    Points : 99
    Points
    99
    Par défaut
    Merci infiniment vous avez compris mon besoin.
    Ma question maintenant si j'utilise la 2ème solution

    Solution malpropre : à coté de ton programme delphi, tu met un document Excel contenant ta macro.
    -Tu copie ce fichier vers sa destination final
    -tu ouvre la fichier "final" avec excel
    -tu lance la macro depuis delphi

    car je veux créer un nouveau fichier , est il possible avec delphi de ce faire en lui associant une macro lors de la création ???




    Veuillez m'expliquer encore plus SVP

    Sinon pour la denière solution vous pouvez me donner une idée générale ??


    Merciiiiii

  6. #6
    Membre confirmé
    Homme Profil pro
    Enseignant
    Inscrit en
    Août 2008
    Messages
    666
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2008
    Messages : 666
    Points : 643
    Points
    643
    Par défaut
    Citation Envoyé par zanoubya Voir le message
    bonjour à tous;
    J'ai un fichier Excel contenant une macro mon but est de d'intégrer le traitement de cette macro dans delphi lors du click sur un bouton donné en créant un nouveau fichier Excel.

    Alors est que je dois traduire tout le code VB en Delphi ou il y a une autre solution à faire?

    une autre question j'aimerais bien créer mon fichier Excel meme si Microsoft Office n'est pas installé dans le poste. Est il possible ?

    Merci infiniment et bonne journée.
    Si ta macro est déjà présente dans ce fichier Excel, tu peux la lancer comme ça(en faisant une connexion OLE):
    Essaye ça:
    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
    var
    OleApplication : Variant;
    begin
    {Connection OLE avec excel}
    OleApplication := CreateOleObject('Excel.Application');
        Try
        OleApplication.WorkBooks.Open('C:\MOnFichier.xls'); //Chargement du fichier
        OleApplication.Visible := False; //On masque excel
        OleApplication.Run('Start'); //On Lance la macro "Start"
        Finally
        {Fermeture du fichier excel}
        OleApplication.Run('Finish'); //On lance la macro "Finish"
        OleApplication.Quit; //On ferme excel
        end;
    end;
    Autre solution, tu peux ajouter du code VB directement dans dans fichier Excel. Tu coderas ça comme ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    procedure TForm1.Button1Click(Sender: TObject);
    const
      vbext_ct_StdModule = 1;
    var
      objModule : OleVariant;
    begin
      ExcelApplication1.Workbooks.Open('C:\Ton fichier Excel.xls',EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,0);
      objModule:=ExcelApplication1.VBE.ActiveVBProject.VBComponents.Item('Module1');
      objModule.CodeModule.InsertLines(1,'Public sub HiThere()');//on ajoute du code VB dans ce fichier
      objModule.CodeModule.InsertLines(2,'ShowMsg("Bonjour!")');
      objModule.CodeModule.InsertLines(3,'End Sub');
      ExcelApplication1.ActiveWorkBook.Save(0);
    end;
    Non testé!

    A+

    NABIL74

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    279
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations forums :
    Inscription : Septembre 2006
    Messages : 279
    Points : 99
    Points
    99
    Par défaut
    Bonjour;
    Merci pour la réponse.
    Dans votre exemple ça suppose que j'ai déjà le fichier Excel et j'ai que le garder et exécuter sa macro .
    Moi je cherche à éviter ce fichier en créant un nouveau qui aura comme contenu le résultat de la macro existante dans le premier fichier.

    En effet cette macro récupère des données de la base et les affiche dans la feuille de mon classeur et elle doit avoir des paramètres en entrée.

    J'espère que vous comprenez mon souci

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    279
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations forums :
    Inscription : Septembre 2006
    Messages : 279
    Points : 99
    Points
    99
    Par défaut
    Citation Envoyé par zanoubya Voir le message
    Bonjour;
    Merci pour la réponse.
    Dans votre exemple ça suppose que j'ai déjà le fichier Excel et j'ai que le garder et exécuter sa macro .
    Moi je cherche à éviter ce fichier en créant un nouveau qui aura comme contenu le résultat de la macro existante dans le premier fichier.

    En effet cette macro récupère des données de la base et les affiche dans la feuille de mon classeur et elle doit avoir des paramètres en entrée.

    J'espère que vous comprenez mon souci

    D'autre part j'ai testé votre 2eme exemple qui écrit le code VB directement dans la fichier Excel il s'exécute mais dans mon fichier je vois aucun code VB dedans

    Alors qu'est ce que vous me proposez?

  9. #9
    Membre confirmé
    Homme Profil pro
    Enseignant
    Inscrit en
    Août 2008
    Messages
    666
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2008
    Messages : 666
    Points : 643
    Points
    643
    Par défaut
    salut,

    D'autre part j'ai testé votre 2eme exemple qui écrit le code VB directement dans la fichier Excel il s'exécute mais dans mon fichier je vois aucun code VB dedans
    Si, il est dedans.

    Pour le voir: sous Excel 2007:dans l'onglet "Développeur=> Visualiser le code=> Projet-VB Project => Modules: tu as ton "module1" avec le code VB que tu as ajouté.

    sinon si tu travailles sous Excel 2003, tu peux le voir:=>Options=> Macro => sécurité .

    Bonne chance.

    NABIL74

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    279
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations forums :
    Inscription : Septembre 2006
    Messages : 279
    Points : 99
    Points
    99
    Par défaut
    Bonjour ;
    Alors j'ai une erreur en exécutant le programme : l'indice n'appartient pas à la sélection et le compilateur se positionne sur la ligne contenant le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
       objModule:=ExcelApplication1.VBE.ActiveVBProject.VBComponents.Item('Module1');
    Sinon est il possible de transformer le code de la marco en dll et l'appeler depuis delphi? si oui comment ce faire?

    Merci

  11. #11
    Membre confirmé
    Homme Profil pro
    Enseignant
    Inscrit en
    Août 2008
    Messages
    666
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2008
    Messages : 666
    Points : 643
    Points
    643
    Par défaut
    salut,
    voilà je viens de tester le code suivant, il permet d'ajouter une macro(module) dans le fichier Excel que tu pourrais par la suite lancer:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    procedure TForm1.Button1Click(Sender: TObject);
    var
      Module: Variant;
    begin
      ExcelApplication1.Visible[0] := True;
    ExcelApplication1.Workbooks.Open('D:\Test.xls',EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,0);
    {create the module}
      Module := ExcelApplication1.VBE.ActiveVBProject.VBComponents.Add(1);
      Module.CodeModule.InsertLines(1,'Public sub test()');
      Module.CodeModule.InsertLines(2,'ShowMsg("Bonjour")');
      Module.CodeModule.InsertLines(3,'End Sub');
      ExcelApplication1.ActiveWorkbook.Save(0);
    end;
    pour transformer ça en dll, fais un tour dans la FAQ, tu trouveras ton bonheur:http://delphi.developpez.com/faq/?pa...pelfonctiondll

    Bonne chance


    NABIL74

  12. #12
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    279
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations forums :
    Inscription : Septembre 2006
    Messages : 279
    Points : 99
    Points
    99
    Par défaut
    ca marche maintenant merciiiiiiiiiiiii

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

Discussions similaires

  1. Macro : Exporté donnée d'une cellule Excel vers Word
    Par roidurif dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 22/03/2011, 18h13
  2. Passage d'une macro de Excel à outlook
    Par Chipss dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 12/10/2010, 11h44
  3. erreur d'execution '13' dans une macro Excel lors du passage 2003->2007
    Par Bobsinglar dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 07/10/2008, 15h16
  4. Réponses: 3
    Dernier message: 20/07/2007, 08h58
  5. Porter une macro Excel vers OpenOffice
    Par totofweb dans le forum Applications et environnements graphiques
    Réponses: 3
    Dernier message: 13/07/2004, 13h20

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