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

SAS Base Discussion :

Fermer un seul fichier


Sujet :

SAS Base

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2013
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2013
    Messages : 5
    Points : 2
    Points
    2
    Par défaut Fermer un seul fichier
    Bonjour à tous,

    Voici mon problème : j'ai un programme qui créé un fichier Excel (proc export) à partir de SAS (ici pas de soucis), ce que je cherche à avoir c'est un bout de code qui va fermer le fichier pour que je puisse relancer le traitement qui créé le fichier (dans le cas où l'on relance le programme une deuxième fois).
    Le fichier Excel a toujours le même nom et est créé à un endroit précis.

    J'ai déjà ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    FILENAME cmds DDE 'excel|system';  
    DATA _null_;                                                                                                                                                                                                                                                    
    FILE cmds;                                                                                                                                                                                                                                                      
    put '[close("C:\export_excel.xls")]';                                                                                                                       
    run;   
    filename cmds clear;
    Le problème ici c'est que je ne ferme que le classeur et non pas la fênetre Excel. J'ai essayé de mettre :
    put '[quit]';
    à la place du close. Mais dans ce cas je ferme tous les fichiers Excel ouverts alors que je ne veux fermer QUE le fichier export_excel.xls

    Savez vous s'il existe une fonction du genre :
    put '[quit("C:\export_excel.xls")]';

    Au final, je cherche un code qui fonctionnerait de la manière suivante :

    Si export_excel.xls est ouvert alors
    alors fermer uniquement export_excel
    sinon
    on ne fait rien


    Merci d'avance pour vos réponses.
    Unipre

  2. #2
    Membre actif
    Homme Profil pro
    Analyste - Information médicale
    Inscrit en
    Mars 2012
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Analyste - Information médicale
    Secteur : Santé

    Informations forums :
    Inscription : Mars 2012
    Messages : 72
    Points : 255
    Points
    255
    Par défaut
    Bonjour,

    Pourquoi tu dois fermer le fichier créé par proc export ?

    (avec option "replace" dans export tu écraseras tes données)

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2013
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2013
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    Bonjour,
    oui j'ai essayé put "[QUIT()]" ; mais cette commande ferme toutes les fenêtres Excel alors que je ne veux pas toutes les fermées. Je veux juste fermer export_excel.xls

  4. #4
    Membre actif
    Homme Profil pro
    Analyste - Information médicale
    Inscrit en
    Mars 2012
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Analyste - Information médicale
    Secteur : Santé

    Informations forums :
    Inscription : Mars 2012
    Messages : 72
    Points : 255
    Points
    255
    Par défaut
    Pardon j'ai changé mon msg précédent, j'avais lu trop vite

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2013
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2013
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    Avec replace si le fichier est ouvert j'ai une fenêtre qui s'ouvre pour me demander si je veux remplacer le fichier existant. Si je met "oui" alors j'ai deux fichiers dont un en lecture seule. De plus, j'ai un bout de code qui fait de la mise en forme ensuite et là ça plante aussi.

  6. #6
    Membre actif
    Homme Profil pro
    Analyste - Information médicale
    Inscrit en
    Mars 2012
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Analyste - Information médicale
    Secteur : Santé

    Informations forums :
    Inscription : Mars 2012
    Messages : 72
    Points : 255
    Points
    255
    Par défaut
    OK, mais je pige pas pourquoi ton fichier resterait ouvert ?
    Lorsque tu fais un proc export, il ne s'ouvre pas.

    Ensuite si tu ouvres avec DDE pour faire des modifs, tu le fermes avec le , non ?

  7. #7
    Membre éprouvé
    Homme Profil pro
    Ingénieur Pilotage
    Inscrit en
    Avril 2009
    Messages
    405
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur Pilotage
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2009
    Messages : 405
    Points : 1 063
    Points
    1 063
    Par défaut
    Pourquoi ne pas éxecuter une macro VBA via lien DDE avec le code vba suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Windows.Application.Quit
    En sachant que tu est bien sur le fichier Excel concerné.

    Essaies aussi le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    file CMDS;
     put "[File.close()]"
    sachant que tu as déjà ouvert le fichier auparavant ex :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    file CMDS;
    put "[open(""C: \pharmSug\&datnmout..xls"")]";
    I always thought that the person who specialized in using just SAS PROCS should
    be known as the SAS Proctologist.

  8. #8
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2013
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2013
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    Je vais vous montrer concrètement ce que je fais :

    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
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
     
     
    FILENAME cmds DDE 'excel|system';                                                                                                                              
    DATA _null_;                                                                                                                                                                                                                                                    
    FILE cmds;                                                                                                        
    put '[close("C:\export_excel.xls")]';                                                                                                                                                                                                             
    run;                                                                                                                                                                                                                                                            
     
    filename cmds clear;                                                                                                                                                                                                                                                         
     
               PROC EXPORT DATA=export                                                                                                                                                                                                                              
                OUTFILE="C:\export_excel.xls"                                                                                                                                                                                                         
                DBMS=excel                                                                                                                                                                                                                                          
                REPLACE;                                                                                                                                                                                                                                            
                       options noxwait noxsync;                                                                                                                                                                                                                                                                                                                                                                                              
                      run;              
     
     
    ID = open ('export');                                                                                                                                                                                                                                           
     
    N=attrn(ID,'NVARS');                                                                                                                                                                                                                                            
    NOBS=attrn(ID,'NOBS');                                                                                                                                                                                                                                          
     
    M=trim(left(N));                                                                                                                                                                                                                                                
     
     
     
     
    hostcl = loadclass('sashelp.fsp.hauto');                                                                                                                                                                                                                        
    call send(hostcl, '_NEW_', excelobj, 0,'Excel.Application');                                                                                                                                                                                                    
    call send(excelobj, '_Setproperty', 'Visible', 'true');                                                                                                                                                                                                         
    call send(excelobj,'_getproperty','Workbooks',wbsobj);                                                                                                                                                                                                          
    call send(wbsobj,'_do','open',"C:\export_excel.xls");                                                                                                                                                                                             
    call send(excelobj, '_GET_PROPERTY_', 'ActiveSheet',wsobj1);                                                                                                                                                                                                    
    call send(excelobj,'_GET_PROPERTY_', 'ActiveWorkbook',awbobj1);                                                                                                                                                                                                 
     
        /*                                                                                                                                                                                                                                                          
    call send(wbsobj,'_do','Add');                                                                                                                                                                                                                                  
    call send(excelobj, '_GET_PROPERTY_', 'ActiveSheet',wsobj);                                                                                                                                                                                                     
    call send(excelobj,'_GET_PROPERTY_', 'ActiveWorkbook',awbobj);                                                                                                                                                                                                  
                                                                                                                                                                                                                                                                    
               */                                                                                                                                                                                                                                                   
     
    do col=1 to N;                                                                                                                                                                                                                                                  
     
          /*** Libellés de colonnes ***/                                                                                                                                                                                                                            
          LABEL=varlabel(ID,col);                                                                                                                                                                                                                                   
          PUT LABEL=;                                                                                                                                                                                                                                               
          call send(wsobj1,'_compute','Cells',1,col,retcell);                                                                                                                                                                                                       
     
          call send(retcell,'_compute','Font',retfont);                                                                                                                                                                                                             
          call send(retfont,'_set_property_','name',"GILL SANS MT");                                                                                                                                                                                                
          call send(retfont,'_set_property_','size',"8");                                                                                                                                                                                                           
          call send(retfont,'_set_property_','Fontstyle',"Gras");                                                                                                                                                                                                   
          call send(retfont,'_set_property_','colorindex',"9");                                                                                                                                                                                                     
          call send(retcell,'_Setproperty','Value',LABEL);                                                                                                                                                                                                          
     
          /*** Ajustement des colonnes ***/                                                                                                                                                                                                                         
          Call send(wsobj1,'_compute','columns',col,retcol2);                                                                                                                                                                                                       
          call send(retcol2,'_compute','Font',retfont);                                                                                                                                                                                                             
          call send(retfont,'_set_property_','name',"Trebuchet MS");                                                                                                                                                                                                
          call send(retfont,'_set_property_','Size',"8");                                                                                                                                                                                                           
     
          Call send(retcol2,'_do','Select');                                                                                                                                                                                                                        
          Call send(retcol2,'_do','Autofit');                                                                                                                                                                                                                       
     
          if varname(ID,col)="total" then do;                                                                                                                                                                                                                       
             call send(retcol2,'_SET_PROPERTY_','Numberformat',"# ##0,00");                                                                                                                                                                                         
          end;                                                                                                                                                                                                                                                      
     
    end;                                                                                                                                                                                                                                                            
     
    Call send(wsobj1,'_compute','cells',2,1,retcell);                                                                                                                                                                                                               
    call send(retcell,'_do','Select');                                                                                                                                                                                                                              
     
    call send(excelobj,'_GET_PROPERTY_', 'ActiveWindow',awinobj);                                                                                                                                                                                                   
     
    call send(awinobj,'_set_property_','FreezePanes', 1 );                                                                                                                                                                                                          
     
     
     
    call send(excelobj,'_GET_PROPERTY_', 'ActiveWorkbook', awbobj1);                                                                                                                                                                                                
    call send(awbobj1, '_DO', 'Save');                                                                                                                                                                                                                              
     
    call send(awbobj1, '_DO', 'Close');                                                                                                                                                                                                                             
    call send(excelobj, '_TERM_');                                                                                                                                                                                                                                  
     
    rc=close(ID);                                                                                                                                                                                                                                                   
     
     
     x "'C:\export_excel.xls'";
    D'abord je ferme le fichier s'il est ouvert, ensuite je fais l'export puis la mise en forme.

    Mes problèmes sont que:
    - Si l'on est sur un autre fichier excel alors il y a bug. Ouverture en double
    - Il y a en fenêtre Excel vide qui reste ouverte.

    Merci

  9. #9
    Membre actif
    Homme Profil pro
    Analyste - Information médicale
    Inscrit en
    Mars 2012
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Analyste - Information médicale
    Secteur : Santé

    Informations forums :
    Inscription : Mars 2012
    Messages : 72
    Points : 255
    Points
    255
    Par défaut
    Je n'ai pas trouvé comment fermer un seul fichier en fermant la fenêtre

    Pourquoi ne pas faire un intermédiaire :
    - écrire dans un nouveau fichier texte (tu es donc sûr que l'édition et la mise en forme du fichier sera bonne)
    - tu essaies ensuite de copier ce fichier via une instruction dos du type
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    x "copy ""fic_cree"" ""fic_remplace""";
    Si la copie ne marche pas (fichier cible déjà ouvert) tu auras alors la macro-variable SYSRC à 1, si la copie s'est bien passé alors SYSRC vaudra 0, ce qui te permet de tester que la copie s'est bien passée (au pire de fermer le fichier manuellement et de faire la copie...)

  10. #10
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2013
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2013
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    Bonjour,

    Finalement, comme je ne trouvais aucun moyen de fermer un fichier Excel spécifique sans fermer tous les fichiers ouverts. J'ai décidé d'utiliser une boite de dialogue pour permettre à l'utilisateur de choisir où il désire enregistrer le ficheir et sous quel nom.
    Maintenant, si l'utilisateur veut toujours remplacer un fichier qui est déjà ouvert, se sera de sa faute et pas de la mienne.

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

Discussions similaires

  1. [Conception][HSQLDB] Comment gérer une BD comme un seul fichier ?
    Par calogerogigante dans le forum Persistance des données
    Réponses: 7
    Dernier message: 14/03/2006, 15h45
  2. fermer une seule fenêtre
    Par comme de bien entendu dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 14/03/2006, 09h45
  3. [VB4]Décompresser un seul fichier
    Par Whombat dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 07/03/2006, 02h24
  4. enregistrer deux fichier dans un seul fichier
    Par Bourak dans le forum Langage
    Réponses: 9
    Dernier message: 05/11/2005, 09h48

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