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

ODS et reporting Discussion :

Grouper des documents EXCEL


Sujet :

ODS et reporting

  1. #1
    Membre averti
    Femme Profil pro
    Inscrit en
    Mai 2011
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 30
    Par défaut Grouper des documents EXCEL
    Bonjour,

    Je souhaiterais savoir si on peut grouper des fichiers excel, pour n'en former. Et chaque fichier correspondrait à un onglet.
    Les liens DDE chez moi ne fonctionne pas. Je passe par un ODS HTML pour créer une mise en forme dans le fichier Excel, car avec l'ODS TAGSET.EXCELXP ça ne fonctionne pas ! Je n'arrive pas à créer de mise en forme comme je veux !

    Donc finalement, pour résumer je voudrais ..

    J'ai 3 fichier excel différents :
    - aaa.xls
    - bbb.xls
    - ccc.xls

    Et je voudrais dans un seul fichier regroupement.xls, les onglets aaa, bbb et ccc.

    En espérant avoir été clair, et que cela est possible !
    Merci

  2. #2
    Membre Expert
    Avatar de MEGAMIND2
    Homme Profil pro
    Paris
    Inscrit en
    Janvier 2011
    Messages
    1 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Paris

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 029
    Par défaut
    Salut,
    Ya pas moyen de regrouper les 3 tables qui ont alimenté les 3 onglets, faire ta mise en forme et ODS par la suite?

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    161
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 161
    Par défaut
    Bonjour,

    Si depuis SAS, tu peux exécuter un scrip VBS,( Notamment si tu as SAS en local) tu peux lancer le code suivant.

    Tu peux aussi bien sur stocker le script VBS sur ton poste et n'éxécuter dans SAS que les 4 dernières lignes.

    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
    %let work = %sysfunc(pathname(WORK)); 
    %let vbs = &work.\loadsheets.vbs; 
     
    filename vbs "&vbs"; 
     
    data _null_; 
      file vbs; 
      input; 
      put _infile_; 
    cards4; 
    path    = WScript.Arguments(0) 
    pattern = WScript.Arguments(1) 
    outfile = WScript.Arguments(2) 
     
    ' convert pattern (presumed to be DOSish) to regex pattern 
     
    regex = Replace (pattern, ".", "\.") 
    regex = Replace (regex, "*", ".*") 
    regex = Replace (regex, "?", ".") 
    regex = "^" & regex & "$" 
     
    ' scan the files in the path, keeping track of which ones 
    ' match the pattern in an array named source 
     
    Set fs = CreateObject("Scripting.FileSystemObject") 
    Set folder = fs.GetFolder (path) 
    Set files = folder.Files 
     
    Set rx = New RegExp 
     
    rx.Pattern = regex 
    rx.IgnoreCase = true 
     
    Dim source() 
    count = -1 
    For Each f in files 
      if rx.Test (f.Name) then 
        count = count + 1 
        ReDim preserve source(count) 
        source(count) = f.Name 
      end if 
    Next 
     
    if count = -1 then WScript.Quit 
     
    ' might want to sort source(), but vbs has no sort function! 
    ' so, forget about it 
     
    ' open excel and make it work for us 
    ' read in each source (html) into a new sheet, 
    ' copy the whole thing and 
    ' paste it into a new sheet in the workbook 
     
    Set xl = CreateObject("Excel.Application") 
    xl.Workbooks.Close 
     
    Set book = xl.Workbooks.Add 
     
    For i = lbound(source) to ubound(source) 
      Set sheet = book.Sheets.Add(,book.Sheets(i+1)) 
     
      sheet.Name = Left (source(i), Len(source(i))-13) 
      Set parse = xl.Workbooks.Open (path &"\"& source(i)) 
      parse.Sheets(1).UsedRange.Copy 
      sheet.Paste 
      xl.CutCopyMode = false ' Clear clipboard so big clipboard dialog will not appear when closing parse 
      parse.Close 
      sheet.Range("A1:A1").Select 
    Next 
     
    book.Sheets(1).Visible = false 
    book.Sheets(1).Activate 
     
    book.SaveAs (outfile) 
    xl.Quit 
    ;;;; 
    run; 
    filename vbs; 
     
    options noxwait xsync xmin; 
    %let vbs = loadsheets.vbs; 
    x cd "&work"; 
    x "&vbs ""H:\12_TDB\tdb_RFA\tx_equipement_cars\rpt"" ""eqpm_cars_eer*&jour..xls"" ""H:\12_TDB\tdb_RFA\tx_equipement_cars\rpt\eqpm_cars_eer_&jour..xls""";
    PS: que veux tu faire avec l'ODS tagsets.excelxp qui fonctionne sous ODS HTML extension XLS.

    Bon courage.

  4. #4
    Membre averti
    Femme Profil pro
    Inscrit en
    Mai 2011
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 30
    Par défaut
    Salut Megamind2;

    Je ne comprends pas réellement ce que tu essaye de me dire !

  5. #5
    Membre averti
    Femme Profil pro
    Inscrit en
    Mai 2011
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 30
    Par défaut
    Salut La2002,

    Avec ODS HTML extension XLs, je peux mettre en forme en choississant le fond de mes cellules ... alors que dans ODS TAGSETS.EXCELXP, quand j'essaye d'ouvrir le fichier Excel il me dit qu'il ne reconnait pas Style ..

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    161
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 161
    Par défaut
    Citation Envoyé par marion.bouilly Voir le message
    Salut La2002,

    Avec ODS HTML extension XLs, je peux mettre en forme en choississant le fond de mes cellules ... alors que dans ODS TAGSETS.EXCELXP, quand j'essaye d'ouvrir le fichier Excel il me dit qu'il ne reconnait pas Style ..
    - As tu la dernière version du tagsets.excelxp ? L'option Style devrait marcher sur les proc classiques : print, tabulate, report...

    - Sinon, peux tu transmettre ton code ?

  7. #7
    Membre averti
    Femme Profil pro
    Inscrit en
    Mai 2011
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 30
    Par défaut
    La2002,

    Je ne sais si j'ai la dernière version de TAGSETS.EXCELXP ! Je suis en SAS V9.2 ! donc normalement je devrais l'avoir ..

    En espérant que tu puisse m'aider.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    ODS TAGSETS.EXCELXP FILE="&rootmain.\SAS\HTML\Contactable.xls";
    	TITLE "Contactable Distribution";
    	PROC TABULATE  DATA=source.base_client_coupon;
    	CLASS TOPMARDMCONT  TOPMAREMCONT TOPMARPHCONT;
    	VAR external_card_number;
    	CLASSLEV TOPMARDMCONT  TOPMAREMCONT TOPMARPHCONT / STYLE=[BACKGROUND=white FOREGROUND=black];
    	TABLE TOPMARDMCONT="Contact Papier"  TOPMAREMCONT="Contact E-MAIL" TOPMARPHCONT="Contact Téléphone" ALL="Total", 
    		  external_card_number= "Customers" 
    		  * (N= 'Effectifs' PCTN= "%");
    	RUN;
    ODS TAGSETS.EXCELXP CLOSE;

  8. #8
    Membre éprouvé
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    161
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 161
    Par défaut
    Marion,

    Lance ce bout de code, tu verras dans la log de quelle version tu possèdes?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ODS tagsets.excelxp  options(doc="help") ;
    Si tu es en 1.116 tu as la dernière, sinon va chercher la dernière version à l'adresse http://support.sas.com/rnd/base/ods/odsmarkup/

    Quant à ton code, il me parait correct.

    Sinon, je ne saurais te dire, tagsets.excelxp peut aussi donner des résultats surprenants suivant les versions d'Excel.

    Et le prgm vbs que je t'ai fourni, as tu essyer de l'adapter à ton besoin. Normalement, tu n'as besoin de toucher que les 4 dernières lignes.
    A+

  9. #9
    Membre averti
    Femme Profil pro
    Inscrit en
    Mai 2011
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 30
    Par défaut
    La2002,
    Quand je copie colle ton code, après le cards4; Tout est surligné en jaune pale ? Est-ce normal ?

    (Je t'avoue que j'ai du mal à comprendre ton code aussi ! :s)

  10. #10
    Membre éprouvé
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    161
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 161
    Par défaut
    Marion,

    Le but du code fourni est d'exécuter un fichier VBS qui exécutera les traitements de groupage de fichier.

    Lignes 1 à 3 =>
    Allouer un fichier vbs dans le répertoire physique de la work. Il est nommé loadsheets.vbs
    J'aurais très bien pu le mettre dans un autre dossier pour éviter de le réécrire à chaque exécution de SAS.


    Lignes 6 à 77 =>Ecriture de l'étape DATA, qui va écrire dans ce fichier vbs.
    Il s'agit d'un code Visual Basic. Je reviens plus tard sur ce code.

    Concernant les 3 dernières lignes :

    %let vbs = loadsheets.vbs;
    x cd "&work";

    C'est une commande DOS, qui va permettre de se placer dans le dossier de la work.(&Work=> défini comme %sysfunc(pathname(WORK)); voir la 1ere ligne.

    x "&vbs ""H:\12_TDB\tdb_RFA\tx_equipement_cars\rpt"" ""eqpm_cars_eer*&jour..xls"" ""H:\12_TDB\tdb_RFA\tx_equipement_cars\rpt\eqpm_cars_eer_&jour..xls""";

    Exécution du programme VBS qui a 3 paramètres :

    1) Le dossier où sont stockés les fichiers à rassembler => H:\12_TDB\tdb_RFA\tx_equipement_cars\rpt

    2) Les fichiers à rassembler => Ici, eqpm_cars_eer*&jour..xls .
    Ainsi tous les fichiers Excel qui commencent par eqpm_cars_eer et qui se termine par la valeur de &jour. Tous ces fichiers doivent être placés dans le dossier du paramètre 1.

    3) le fichier de sortie.
    H:\12_TDB\tdb_RFA\tx_equipement_cars\rpt\eqpm_cars_eer_&jour..xls


    Maintenant, si je reviens sur le code VBS :

    1) on récupère les paramètres

    path = WScript.Arguments(0)
    pattern = WScript.Arguments(1)
    OUTFILE = WScript.Arguments(2)

    2) on fait une recherche de tous les fichiers à rassembler.
    Il y en a "count" fichiers.

    3) on ouvre ensuite un nouveau classeur Excel (Book).

    4) pour chaque fichier à rassembler,
    on ouvre le fichier.
    on copie colle la feuille dans une nouvelle feuille du classeur Excel.
    Le nom de la feuille est
    "sheet.Name = Left (source(i), Len(source(i))-13) ".
    Cela doit être adapté à ton cas.

    on ferme le fichier qui vient d'être copier.


    5) On se place sur la 1ere feuille. (Mais je ne sais plus pourquoi je masquais la 1ere feuille)

    6) On enregistre le classeur crée sous le nom OUTFILE, qui est le 3ème paramètre.

    7) je quitte Excel xl.quit;;;;



    En espérant que cela t'aidera, cela fonctionne bien si tu es en local.

  11. #11
    Membre averti
    Femme Profil pro
    Inscrit en
    Mai 2011
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 30
    Par défaut
    Bonjour La2002,

    Je te remercie d'avoir pris le tps de m'expliquer tout le programme il me semble maintenant un peu plus compréhensible.
    Cependant, j'aurais une question. J'ai changer le chemin où se trouvait les fichiers, les fichiers ainsi que la sortie. Seulement, une fenêtre m'arrive. (voir la pièce jointe !)

    Est-ce que cela t'es déjà arrivé ?
    Je ne comprends pas pk ça me le fait !
    Images attachées Images attachées  

  12. #12
    Membre averti
    Femme Profil pro
    Inscrit en
    Mai 2011
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 30
    Par défaut
    La2002,

    J'ai réussi à régler mon pb.
    Il fallait juste que je donne un nom plus long à mes fichier, car je ne comprends pas ce phénomène, mais chaque onglet se voit réduit de deux lettres à chaque fois. Est-ce que c'est dans le programme que ça fait ça ?

    Je te remercie encore une fois La2002, pour le tps que tu m'as accordé.

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

Discussions similaires

  1. [XL-2007] Personnalisation du ruban pour l'ensemble des documents excel
    Par skulls80 dans le forum Excel
    Réponses: 1
    Dernier message: 07/03/2014, 09h47
  2. Réponses: 5
    Dernier message: 11/08/2008, 15h25
  3. Grouper des données texte avec excel
    Par emule16 dans le forum Excel
    Réponses: 3
    Dernier message: 08/01/2008, 22h15
  4. Réponses: 4
    Dernier message: 27/04/2007, 12h19
  5. Réponses: 3
    Dernier message: 25/07/2005, 09h40

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