Précédent   Forum des professionnels en informatique > Logiciels > Solutions d'entreprise > Business Intelligence > SAS > Macro
Macro Forum d'entraide sur le langage Macro de SAS
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 01/07/2008, 18h24   #1
Invité de passage
 
Inscription : juillet 2008
Messages : 2
Détails du profil
Informations forums :
Inscription : juillet 2008
Messages : 2
Points : 0
Points : 0
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 :
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 :
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
Lendou est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/07/2008, 21h23   #2
Membre Expert
 
Inscription : mars 2005
Messages : 1 028
Détails du profil
Informations forums :
Inscription : mars 2005
Messages : 1 028
Points : 1 278
Points : 1 278
Envoyer un message via Yahoo à bahraoui
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
bahraoui est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/07/2008, 10h46   #3
Membre confirmé
 
Inscription : avril 2008
Messages : 233
Détails du profil
Informations personnelles :
Âge : 36

Informations forums :
Inscription : avril 2008
Messages : 233
Points : 216
Points : 216
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.
green_fr est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/07/2008, 14h59   #4
Invité de passage
 
Inscription : juillet 2008
Messages : 2
Détails du profil
Informations forums :
Inscription : juillet 2008
Messages : 2
Points : 0
Points : 0
Par défaut Solution de contournement

Bonjour,

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


Code :
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 ?
Lendou est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/07/2008, 15h36   #5
Membre Expert
 
Inscription : mars 2005
Messages : 1 028
Détails du profil
Informations forums :
Inscription : mars 2005
Messages : 1 028
Points : 1 278
Points : 1 278
Envoyer un message via Yahoo à bahraoui
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
bahraoui est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/07/2008, 16h11   #6
Nouveau Membre du Club
 
Inscription : avril 2004
Messages : 42
Détails du profil
Informations forums :
Inscription : avril 2004
Messages : 42
Points : 29
Points : 29
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 ...
alexd est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/07/2008, 16h31   #7
Invité de passage
 
Inscription : juillet 2008
Messages : 2
Détails du profil
Informations forums :
Inscription : juillet 2008
Messages : 2
Points : 2
Points : 2
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 :
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
SASSOEUR est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/07/2008, 17h37   #8
Expert Confirmé
 
Avatar de olivier.decourt
 
Homme Olivier Decourt
Formateur en informatique
Inscription : avril 2008
Messages : 1 482
Détails du profil
Informations personnelles :
Nom : Homme Olivier Decourt
Âge : 34
Localisation : France

Informations professionnelles :
Activité : Formateur en informatique
Secteur : Conseil

Informations forums :
Inscription : avril 2008
Messages : 1 482
Points : 2 866
Points : 2 866
@ 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
olivier.decourt est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/07/2008, 09h08   #9
Invité de passage
 
Inscription : juillet 2008
Messages : 2
Détails du profil
Informations forums :
Inscription : juillet 2008
Messages : 2
Points : 2
Points : 2
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
SASSOEUR est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 03h37.


 
 
 
 
Partenaires

Hébergement Web