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

Macro Discussion :

Exporter une table SAS sous un classeur Excel contenant des données et des macros VBA


Sujet :

Macro

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Juillet 2008
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Exporter une table SAS sous un classeur Excel contenant des données et des macros VBA
    Bonjour,

    Besoin : Exporter une table SAS sur une feuille Excel contenant déjà des données (écraser les anciennes données Excel)
    Difficulté : il y a des macros sur cette feuille Excel

    Programme sas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    %macro export (fic=);
    PROC EXPORT DATA=work_rm.&fic 
                OUTFILE="Chemin où se trouve le fichier Excel"
                DBMS=EXCEL REPLACE;
         SHEET="&fic"; 
    RUN;
    %mend; 
    %export (fic=Nom fichier Excel);
    Lorsque ma feuille Excel n'a pas de macro, la macro EXPORT fonctionne bien. Au contraire, lorsque ma feuille Excel contient une macro --> Erreur

    Log sas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    ERROR: DBMS type EXCEL not valid for export.
    NOTE: The SAS System stopped processing this step because of errors.
    NOTE: PROCEDURE EXPORT used (Total process time):
          real time           0.01 seconds
          user cpu time       0.00 seconds
          system cpu time     0.00 seconds
          Memory                            14k
          Page Faults                       6
          Page Reclaims                     14
          Page Swaps                        0
          Voluntary Context Switches        1
          Involuntary Context Switches      0
          Block Input Operations            0
          Block Output Operations           0
    Pistes de contournement ??? (a voir)
    * Lorsque le fichier Excel cible est vide, l'exportation fonctionne bien
    --> Comment faire pour supprimer les valeurs d'une feuille Excel à partir de SAS ?
    --> Comment executer une macro Excel à partir de SAS (cette macro effacerait les données de la feuille Excel)

    Merci pour votre aide

  2. #2
    Membre émérite

    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Mars 2005
    Messages
    1 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 364
    Points : 2 329
    Points
    2 329
    Par défaut
    les liens DDE et une bonne solution.
    mais il faut les maitriser.
    Consultez les FAQs et les anciens postes avant de poser vos questions. Merci

  3. #3
    Membre actif

    Profil pro
    Inscrit en
    Avril 2008
    Messages
    233
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 233
    Points : 254
    Points
    254
    Par défaut
    Si je ne me trompe pas, il n'y a pas de possibilité d'utiliser le DDE dans SAS Guide v4. Au moins mes collègues qui l'ont fait sous SAS v8 galèrent pour passer tout sous XML de Excel.

  4. #4
    Nouveau Candidat au Club
    Inscrit en
    Juillet 2008
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Solution de contournement
    Bonjour,

    J'ai réussi à trouver une solution de contournement : (ça vaut ce que ça vaut !!!)


    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
    46
    /* Déclaration des macros-variables*/
    %let lib= work_rm;	/*Librairie où se situe la table SAS*/
    %let rep= P:\Analyses diverses\Proc Export\; 	/* Répertoire du fichier Excel (cible) */
    %let fic= honoraires.xls; 	/*Nom du fichier Excel*/
     
    /* le premier paramètre (tab) est obligatoire. Par défaut, si la variable "feuil" n'est pas renseignée, la feuille 
    doit avoir le même nom que la table SAS. De plus, si la feuille n'existe pas, elle sera créée.*/
     
    %macro export (tab,feuil);
     
    %if &feuil= %then %let feuil=&tab.;
    %let nomficq = %BQUOTE(")&rep.&fic.%BQUOTE(");
     
    filename cmds DDE "EXCEL|SYSTEM"; 
    options noxwait noxsync; 
     
    data _null_; /* Ouverture de Excel*/
    rc=system('start excel');
    run; 
     
    data _null_; /* Ouverture du fichier Excel*/
    file cmds; 
    put "[open(&nomficq)]"; 
    run;
     
    filename zone_xls dde "excel|[&fic]&feuil.!L1C1:L65536C256" notab;
        data _null_ ; /* la feuille est remise à blanc*/
            file zone_xls ;
          put " ";
        run ;
     
    data _null_; /* Sauvegarde + quitter Excel*/
    file cmds ; 
    put "[Save()]"; 
    put "[Quit()]"; 
    run;
     
    PROC EXPORT DATA=&lib..&tab.
                OUTFILE="&rep.&fic."
                DBMS=EXCEL REPLACE;
         SHEET="&feuil."; 
    RUN;
     
    %mend;
     
    %export (tab=, feuil=);
    Néanmoins, il y a un bugg SAS :

    Dans certains (je n'arrive pas à savoir lesquels), SAS exporte la table sous une nouvelle feuille intitulé NomSouhaité1.

    Exemple : sheet="toto" (dans la proc export) --> Résultat la feuille s'intitule "toto1"
    sheet="toto20" (dans la proc export) --> Résultat la feuille s'intitule "toto201"

    Quelqu'un a-t-il déjà rencontré cette anomalie ?
    Fais-je une erreur dans mon programme SAS ?

  5. #5
    Membre émérite

    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Mars 2005
    Messages
    1 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 364
    Points : 2 329
    Points
    2 329
    Par défaut
    Je ne comprends pas ce que tu fais:

    tu utilises les liens DDE pour ecrire dans ton fichier et à la fin tu utilises un proc export!!!!
    Consultez les FAQs et les anciens postes avant de poser vos questions. Merci

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 52
    Points : 52
    Points
    52
    Par défaut
    Bonjour,

    je suis d'accord avec bahraoui, c'est très étrange.
    J'ai déja utilisé la proc export sur des fichier Excel avec macro, et sur des feuille ayant déja un contenu et je n'ai jamais rencontré ce soucis...

    Ton pb initial vient peut-être du fichier Excel initial et non de SAS, as-tu vérifié que ce n'est pas un pb de sécurité de macro sous Excel, ou un truc du genre ...

  7. #7
    Candidat au Club
    Inscrit en
    Juillet 2008
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    Bonjour,

    Je rencontre à peu près le même problème (même message d'erreur, procédure arrêtée) mais avec une proc import et sans même que ma procédure soit inclue dans une macro !

    Rien de plus simple apparemment, une simple importation à partir d'une table excel normale, j'ai déjà fait cette manipulation à plusieurs reprises par le passé sans rencontrer aucun problème mais là je viens d'installer SAS sur un nouveau PC, c'est peut-être dû à problème d'accès.

    Voilà ce que me retourne la log :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    68   PROC IMPORT DATAFILE = "P:\Rotor-simpl.xls"
    69   OUT = work.rrotor
    70   DBMS=EXCEL
    71   REPLACE;
    ERROR: DBMS type EXCEL not valid for import.
    NOTE: The SAS System stopped processing this step because of errors.
    NOTE: PROCEDURE IMPORT used (Total process time):
          real time           0.00 seconds
          cpu time            0.00 seconds
     
    72   SHEET="Feuil1$";
    73   GETNAMES=YES;
    74   RUN;
    Merci de m'aider, je n'ai vraiment aucune idée.
    J'ai essayé d'autres valeurs dans DBMS (XLS ,EXCEL3, 4, EXCEL2000, ...)

    Désolé de "parasiter" ce sujet. Je pense qu'il y a des chances pour que les 2 problèmes soient liés.

    Merci d'avance

  8. #8
    Expert confirmé
    Avatar de olivier.decourt
    Homme Profil pro
    Formateur R/SAS/statistiques
    Inscrit en
    Avril 2008
    Messages
    2 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Activité : Formateur R/SAS/statistiques
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 064
    Points : 4 478
    Points
    4 478
    Par défaut
    @ SASSOEUR :
    ton souci vient de l'absence de licence SAS/ACCESS TO PC FILES, ou du fait que ce module n'est pas installé sur ton PC.
    Solutions de contournement : PROC EXPORT format DLM ou lien DDE et FILE/PUT dans une étape Data.

    Olivier
    Bon courage.
    Olivier

  9. #9
    Candidat au Club
    Inscrit en
    Juillet 2008
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    Merci infiniment.

    Du coup, j'ai un peu (beaucoup) honte d'avoir dérangé pour si peu.

    Dans un premier temps, j'ai contourné le problème en important les tables sur une autre version plus complète que j'avais sous le coude sur un PC perso. Je n'ai qu'une dixaine de tables à importer individuellement.
    Je me pencherai plus tard sur des solutions plus "sérieuses".

    P.S. @ olivier.decourt : Va voir tes MP

Discussions similaires

  1. Chargement d'encodage d'une table SAS sous guide
    Par celroca dans le forum Outils BI
    Réponses: 1
    Dernier message: 17/06/2014, 11h10
  2. Réponses: 1
    Dernier message: 12/09/2013, 14h31
  3. Réponses: 1
    Dernier message: 10/04/2012, 18h04
  4. Exporter une table SAS avec ods tagset ?
    Par ludo35 dans le forum ODS et reporting
    Réponses: 1
    Dernier message: 29/04/2011, 12h40
  5. Réponses: 3
    Dernier message: 24/03/2006, 10h20

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