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

Modules Perl Discussion :

[Win32::OLE] Lancer une macro Excel


Sujet :

Modules Perl

  1. #1
    Membre averti Avatar de philouelgeek
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    60
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2010
    Messages : 60
    Par défaut [Win32::OLE] Lancer une macro Excel
    Salut à tous,

    Je souhaite utiliser le module Win32::Ole afin d'ouvrir un fichier Excel existant et de lancer un traitement, mais lorsque j'exécute mon code, il me sort l'erreur suivante :

    OLE exception from "Microsoft Excel":

    'Modele_Resultats_Analyse
    .xls' introuvable. VÚrifiez l'orthographe du nom du classeur et la
    validitÚ de l'emplacement.

    Si vous essayez d'ouvrir le fichier Ó partir de la liste des fichiers les
    plus rÚcents, assurez-vous que le fichier n'a pas ÚtÚ renommÚ, dÚplacÚ ou
    supprimÚ.

    Win32::OLE(0.1709) error 0x800a03ec
    in METHOD/PROPERTYGET "Open" at Analyse_AM_REAL.pl line 227


    Voici 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
    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
    ## MODULES
    use strict;
    use warnings;
    use Cwd; 
    use Tk; #Interface Graphique
    use Tk::Dialog; # Boite de dialogue
    use utf8;
    use Encode;
    use File::Basename;
    use Win32::OLE;
     
     
    ## VARIABLES
        # Scalaires
        my $localpath = cwd();
        chomp($localpath);
        my $file_name_path ='Modele_Resultats_Analyse.xls';
        my $ex;
        my $workbook;
        my $sheet;
     
    ## PROGRAMME PRINCIPAL
       # Création de l'objet OLE utilisant Excel 
        $ex = Win32::OLE->GetActiveObject('Excel.Application') || Win32::OLE->new('Excel.Application', 'Quit');
     
     
        $ex->{DisplayAlerts}=0;
        # Creation du classeur
        $workbook = $ex -> Workbooks->Open($file_name_path);
        # Creation des nouvelles feuilles
        for (my $i=1; $i<8;$i+=1)
            {
                $workbook->Worksheets->Add;
            }
     
        ##################################
        # Des traitements sont effectués #
        ##################################
     
        $ex->Run("ThisWorkbook.Mise_En_Forme_Classeur");    
     
        # On sauve et on quitte
        $workbook->SaveAs($localpath.'/Resultats_Analyse.xls');
        $workbook->Close;
    Auriez-vous une idée ?

    Merci d'avance
    Philippe.

  2. #2
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 822
    Par défaut
    Essaye ces 3 changements :
    1. Charges les modules ainsi
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      use Win32::OLE qw(in with);
      use Win32::OLE::Const 'Microsoft Excel';
    2. modifie le $file_name_path et met le chemin complet
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      my $file_name_path ='C:/REPERTOIRE/Modele_Resultats_Analyse.xls';
    3. Dans la méthode Run, met le nom de la macro.
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      $ex->Run("NOM_DE_LA_MACRO");

  3. #3
    Membre averti Avatar de philouelgeek
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    60
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2010
    Messages : 60
    Par défaut
    J'ai ajouté les élément mais il me sort toujours l'erreur

    Can't call method "Worksheets" on an undefined value at Analyse.pl line 31.

    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
    45
    ## MODULES
    use strict;
    use warnings;
    use Cwd;
    use Tk; #Interface Graphique
    use Tk::Dialog; # Boite de dialogue
    use utf8;
    use Encode;
    use File::Basename;
    use Win32::OLE qw(in with);
    use Win32::OLE::Const 'Microsoft Excel';
     
     
    ## VARIABLES
        # Scalaires
        my $localpath = cwd();
        chomp($localpath);
        my $file_name_path ='C:/Scripts/Modele_Resultats_Analyse.xls';
        my $ex;
        my $workbook;
        my $sheet;
     
    ## PROGRAMME PRINCIPAL
       # Création de l'objet OLE utilisant Excel
        $ex = Win32::OLE->GetActiveObject('Excel.Application') || Win32::OLE->new('Excel.Application', 'Quit');
     
     
        $ex->{DisplayAlerts}=0;
        # Creation du classeur
        $workbook = $ex -> Workbooks->Open($file_name_path);
        # Creation des nouvelles feuilles
        for (my $i=1; $i<8;$i+=1)
            {
                $workbook->Worksheets->Add;
            }
     
        ##################################
        # Des traitements sont effectués #
        ##################################
     
        $ex->Run("Mise_En_Forme_Classeur");    
     
        # On sauve et on quitte
        $workbook->SaveAs($localpath.'/Resultats_Analyse.xls');
        $workbook->Close;

  4. #4
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 822
    Par défaut
    Sans cette ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $workbook->Worksheets->Add;
    Ton code fonctionne il ?

  5. #5
    Membre averti Avatar de philouelgeek
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    60
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2010
    Messages : 60
    Par défaut
    Non il me marque Can't call method "SaveAs" on an undefined value at Analyse.pl line 44.

  6. #6
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 822
    Par défaut
    Je pense que Win32::OLE a du mal à comprendre les chemins en / et préfére les \. Donc après correction et modification de ton programme, teste ce 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
    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
    #!/usr/bin/perl
     
    ## MODULES
    use strict;
    use warnings;
    use Cwd;
    use Tk;            #Interface Graphique
    use Tk::Dialog;    # Boite de dialogue
    use utf8;
    use Encode;
    use File::Basename;
    use Win32::OLE qw(in with);
    use Win32::OLE::Const 'Microsoft Excel';
     
    ## VARIABLES
    # Scalaires
    my $localpath      = getcwd();
    my $file_name_path = 'C:\Scripts\Modele_Resultats_Analyse.xls';
    my $file_result    = "$localpath/Resultats_Analyse.xls";
     
    ## PROGRAMME PRINCIPAL
    # Création de l'objet OLE utilisant Excel
    my $Excel = Win32::OLE->GetActiveObject('Excel.Application')
      || Win32::OLE->new( 'Excel.Application', 'Quit' );
    $Excel->{DisplayAlerts} = 0;
     
    # Creation du classeur
    my $workbook = $Excel->Workbooks->Open($file_name_path) or ("");
     
    # Creation des nouvelles feuilles
    for ( my $i = 1; $i < 8; $i += 1 ) {
      $workbook->Worksheets->Add;
    }
     
    ##################################
    # Des traitements sont effectués #
    ##################################
    $Excel->Run("Mise_En_Forme_Classeur");
     
    # On sauve et on quitte
    print "Sauvegarde de $file_result\n";
    $workbook->SaveAs($file_result);
    $workbook->Close;

  7. #7
    Membre averti Avatar de philouelgeek
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    60
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2010
    Messages : 60
    Par défaut
    Nickel ça marche

    Le seul truc c'est qu'il ne me lance pas la macro

    Je vais continuer à chercher.

  8. #8
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 822
    Par défaut
    Pour ta macro, as tu changé cette ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $Excel->Run("Mise_En_Forme_Classeur");
    en remplaçant Mise_En_Forme_Classeur par le nom de ta macro ?

  9. #9
    Membre averti Avatar de philouelgeek
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    60
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2010
    Messages : 60
    Par défaut
    Oui mais c'est bon ça fonctionne j'avais fait une erreur dans le nom de la macro

    @++
    Et encore merci

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

Discussions similaires

  1. lancer une macro excel depuis une appli access
    Par LostIN dans le forum Access
    Réponses: 1
    Dernier message: 22/08/2006, 11h10
  2. Lancer une macro Excel a partir de php
    Par youcef81 dans le forum Langage
    Réponses: 1
    Dernier message: 21/08/2006, 12h43
  3. Lancer une macro Excel depuis Access
    Par pascal913 dans le forum Access
    Réponses: 12
    Dernier message: 31/07/2006, 15h31
  4. Lancer une macro Excel depuis Access
    Par marcobosio dans le forum Access
    Réponses: 6
    Dernier message: 05/06/2006, 20h51

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