Vous êtes nouveau sur Developpez.com ? Créez votre compte ou connectez-vous afin de pouvoir participer !

Vous devez avoir un compte Developpez.com et être connecté pour pouvoir participer aux discussions.

Vous n'avez pas encore de compte Developpez.com ? Créez-en un en quelques instants, c'est entièrement gratuit !

Si vous disposez déjà d'un compte et qu'il est bien activé, connectez-vous à l'aide du formulaire ci-dessous.

Identifiez-vous
Identifiant
Mot de passe
Mot de passe oublié ?
Créer un compte

L'inscription est gratuite et ne vous prendra que quelques instants !

Je m'inscris !

Astuce SAS : Lancer une macro VBA excel à partir de SAS base
Par id301077

Le , par id301077

0PARTAGES

0  0 
Bonjour,

Je voudrais automatiser mon traitement excel à partir de SAS. J'ai une macro qui se presente ainsi:

Code : Sélectionner tout
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
Sub test()
'
' test Macro
' Macro recorded 16/12/2009 by jaliouu
'

'
    Range("A1").Select
    ActiveCell.FormulaR1C1 = "=TODAY()"
    Range("A2").Select
    Columns("A:A").ColumnWidth = 13.29
    Rows("1:1").RowHeight = 26.25
    Range("A1").Select
    Selection.Font.Bold = True
    Range("C1").Select
    ActiveCell.FormulaR1C1 = "STATISTICS on production of manufactured"
    Range("C1:R1").Select
    With Selection
        .HorizontalAlignment = xlCenter
        .VerticalAlignment = xlBottom
        .WrapText = False
        .Orientation = 0
        .AddIndent = False
        .IndentLevel = 0
        .ShrinkToFit = False
        .ReadingOrder = xlContext
        .MergeCells = False
    End With
    Selection.Merge
    Selection.Font.Bold = True
    With Selection.Font
        .Name = "Arial"
        .Size = 14
        .Strikethrough = False
        .Superscript = False
        .Subscript = False
        .OutlineFont = False
        .Shadow = False
        .Underline = xlUnderlineStyleNone
        .ColorIndex = xlAutomatic
    End With
    Range("C2").Select
    ActiveCell.FormulaR1C1 = "To use the database"
    Range("C2:R2").Select
    With Selection
        .HorizontalAlignment = xlCenter
        .VerticalAlignment = xlBottom
        .WrapText = False
        .Orientation = 0
        .AddIndent = False
        .IndentLevel = 0
        .ShrinkToFit = False
        .ReadingOrder = xlContext
        .MergeCells = False
    End With
    Selection.Merge
    Selection.Font.Underline = xlUnderlineStyleSingle
    Range("A3").Select
    ActiveCell.FormulaR1C1 = "PRODCOME code"
    Range("B3").Select
    ActiveCell.FormulaR1C1 = "UNIT"
    Range("C3").Select
    ActiveCell.FormulaR1C1 = "Flag EU27"
    Range("C4").Select
    Columns("C:C").ColumnWidth = 10
    Range("D3").Select
    ActiveCell.FormulaR1C1 = "flag eu25"
    Range("E3").Select
    ActiveCell.FormulaR1C1 = "value eu25"
    Columns("F:F").Select
    Range("F3").Activate
    Columns("E:E").ColumnWidth = 9.71
    Range("F3").Select
    ActiveCell.FormulaR1C1 = "base EU25"
    Range("G3").Select
    ActiveCell.FormulaR1C1 = "Belgium"
    Range("H3").Select
    ActiveCell.FormulaR1C1 = "Bulgaria"
    Range("H4").Select
    ActiveCell.FormulaR1C1 = "ALL VALUE AND VOLUMES ARE"
    Range("H5").Select
    ActiveCell.FormulaR1C1 = "ALL CONFIDENTIEL DATA"
    Range("H6").Select
    ActiveCell.FormulaR1C1 = "(:C)=confidentiel, (:CE)=Confidentiel"
    Range("H7").Select
End Sub
Comment puis je faire pour l executer de SAS?

Merci

Une erreur dans cette actualité ? Signalez-le nous !

Avatar de datametric
Rédacteur https://www.developpez.com
Le 16/12/2009 à 16:27
connais-tu le DDE ?

je crois me souvenir que c'est possible par ce biais.

Si tu es dans EGUIDE+Serveur c'est quasiment impossible.
0  0 
Avatar de RemiBousquet
Membre éclairé https://www.developpez.com
Le 16/12/2009 à 17:39
Dans l'idée il faut
1- Démarrer Excel (ici le code "optimisé"
Code : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
options noxwait noxsync;
filename sys dde "Excel|system";
data _NULL_ ;
    length FID RC STOP 8 ;
    FID = FOPEN("SYS","S");                         
    if FID = 0 then do ;                            
        RC = SYSTEM("start excel");                 
        STOP = datetime() + 10 ;                    
        do while (FID = 0) ;                        
            FID = FOPEN("SYS","S");                 
            if (Datetime() > STOP) then FID = 1 ;   
        end ;
    end ;
    RC = fclose(FID);
run ;
2- Ouvrir ton fichier Excel
Code : Sélectionner tout
1
2
3
4
5
data _null_;
    file SYS;
    put "[ERROR(false)]"; /* Pour éviter message sur MàJ */
    put "[open(""&CHEMIN.\&FICHIER."",,TRUE)]";
run;
3- Lancer ta macro Excel
Code : Sélectionner tout
1
2
3
4
data _NULL_ ;
    file sys;
    put "[run(""NomMacro"")]";
run;
Le tout peut être, si besoin, complété en fermant le fichier Excel, en quittant Excel, etc.
0  0 
Avatar de datametric
Rédacteur https://www.developpez.com
Le 16/12/2009 à 19:33
il connaît maintenant
0  0 
Avatar de id301077
Membre du Club https://www.developpez.com
Le 17/12/2009 à 15:48
Merci beaucoup ca marche. Et pour fermer excel?

Merci
0  0 
Avatar de RemiBousquet
Membre éclairé https://www.developpez.com
Le 17/12/2009 à 17:04
Pour fermer le fichier Excel :
Code : Sélectionner tout
1
2
3
4
data _null_;
    file SYS;
    put "[close()]";
run;
Pour quitter Excel (pas forcément recommandé!)
Code : Sélectionner tout
1
2
3
4
data _null_;
    file SYS;
    put "[QUIT()]";
run;
Pour avoir toutes les commandes du langage X4ML :
--> rechercher sur le net l'aide du langage, un fichier qui s'appelle MacroFun.exe
0  0 
Avatar de id301077
Membre du Club https://www.developpez.com
Le 17/12/2009 à 18:07
Merci ca m'a vraiment aidé.

Merci à tous
0  0