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

Macros et VBA Excel Discussion :

VBS syntax error avec la fonction PivotCache d'Excel


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Inscrit en
    Janvier 2008
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 4
    Par défaut VBS syntax error avec la fonction PivotCache d'Excel
    Boujour,

    Je dois transférer une macro VBA d'Excel en code VBS. Après quelques ajustements, je reste avec un problème de syntaxe dans l'utilisation de la fonction PivotCache.Add. J'ai parcouru le forum et essayé toutes les solutions proposées, mais rien y fait. Je vous laisse mon script pour que quelqu'un puisse m'aider à trouver mon erreur...

    Je suis en:

    Windows XP SP2
    MS Excel 2003
    Microsoft (R) Windows Script Host Version 5.6

    et l'erreur se situe à la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .PivotCaches.Add(SourceType:=xlDatabase, SourceData:="Manual_Data!R1C1:R3C10").CreatePivotTable TableDestination:="'Data'!R1C1", TableName:="TabXdyn", DefaultVersion=xlPivotTableVersion10
    avec le message "Erreur de compilation Microsoft VBScript: ')' attendu"

    Merci d'avance
    Fichiers attachés Fichiers attachés

  2. #2
    Membre chevronné

    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    453
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 453
    Par défaut
    Premièrement, ton paramètre "SourceData" attend un objet PivotCache et non un PivotTable.

    Si ça ne résoud rien, peut être devrais-tu recevoir le résultat de la création de PivotTable.PivotCache dans une variable et t'en servir comme argument...

  3. #3
    Futur Membre du Club
    Inscrit en
    Janvier 2008
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 4
    Par défaut
    Bonjour,

    Mon problème est que normalement la table dynamique est crée suite à une requête SQL sur un DB2 (site central ZOS) mais ne connaissant pas trop VBS, j'ai préféré faire un test avec l'enregistrement d'une macro dans Excel. C'est le résultat de cette macro enregistré par Excel que je met dans la pièce jointe. J'ai vu des exemples de connection de type xlExternal ou il n'y avait pas le paramètre sourceData. il faudra que j'essaie directement sur ma base DB2.

    Merci quand même

  4. #4
    Futur Membre du Club
    Inscrit en
    Janvier 2008
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 4
    Par défaut
    Re-bonjour,

    J'ai essayé demodifier mon code pour tenter une connection vers mon DB2 (absent) mais j'ai encore cette erreur de syntaxe à la ligne " With .PivotCaches.Add(SourceType:=xlExternal)" ou le script me dis qu'il attend une ")"


    Je met le code ci-dessous:

    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
     
    ' Définition des variables utilisées dans le script
    ' -------------------------------------------------
    Option Explicit
    Dim xlApp, xlBook, xlSheet, xlChart, xlptCache
    Dim Db2Id, Db2Prefix, UserId, Password, SqlToExecute
    Dim RowToPut, ColumnToPut, DataToPut
     
    ' Initialisation des variables
    ' ------------------------
    Db2Id = "I0D0"
    Db2Prefix = "I0PREF1"
    UserId="..."
    Password="..."
    SqlToExecute ="SELECT * FROM " & db2Prefix & ".MVS_LPAR_M_USER;"
     
    ' Ouverture d'Excel
    ' -----------------
    Set xlApp = WScript.CreateObject("Excel.Application")
    xlApp.Visible = True
    set xlBook = xlApp.Workbooks.Add 
     
    With xlBook
    ' Creation de la feuille Data pour recevoir les résultats de la requete
    ' ---------------------------------------------------------------------
      set xlsheet = .sheets.add
      xlsheet.name = "Data"
     
    ' Accès au DB2 et exécution de la requête SQL
    ' -------------------------------------------
      With .PivotCaches.Add(SourceType:=xlExternal)
        .Connection = "ODBC;DSN=" & Db2Id & ";UID=" & UserId & ";PWD=" & Password & ";MODE=SHARE;DBALIAS=" & Db2Id & ";"
        .CommandType = xlCmdSql
        .CommandText = SqlToExecute
        .CreatePivotTable TableDestination:="'Data'!R1C1", TableName:="TabXdyn", DefaultVersion=xlPivotTableVersion10
        .Refresh
      End With
    End With
     
    ' Répartition des données dans le tableau dynamique
    ' -------------------------------------------------
    With xlSheet.PivotTables("TabXdyn").AddFields
      .RowFields= RowToPut
      .ColumnFields=ColumnToPut
      With .PivotFields(DataToPut)
        .Orientation = xlDataField
        .NumberFormat = "0.00"
      End With
     End With
     .ShowPivotTableFieldList = false
    End With
     
    ' Creation de la feuille Graphe pour recevoir le graphe du tableau dynamique de la feuille Data
    ' ---------------------------------------------------------------------------------------------
      set xlChart = .Charts.Add
      With xlChart
        .Name = "Graphe"
        .SetSourceData Source=Sheets("Data").Range("A1")
        .Location WHERE=xlLocationAsNewSheet
        .saveas "E:\TDS\TDS.mht"
      End With
     
    ' Fermture de la feuiille Excel
    ' -----------------------------
     xlBook.close
     
    xlApp.Quit
     
    Err_Procedure:
    set xlBook = Nothing
    set xlApp =Nothing
    xlApp.Quit
    Merci d'avance

  5. #5
    Futur Membre du Club
    Inscrit en
    Janvier 2008
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 4
    Par défaut Solution du Pb
    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
    Dim "toutes les variables..."
     
    xlCmdSql = 2
    xlDataField = 4
    xlSum = -4157
    SqlToExecute = "SELECT Field1, Field2,..., Fieldn FROM Table WHERE ... GROUP 
    BY... ;"
     
    Set xlApp = WScript.CreateObject("Excel.Application")
    xlApp.Visible = True
    set xlBook = xlApp.Workbooks.Add 
     
    set xlsheet = xlBook.sheets.add
     
    Set xlPvtCache = xlBook.PivotCaches.Add(xlExternal)
    With xlPvtCache
        .Connection = "ODBC;DSN=" & Db2Id & ";UID=" & UserId & ";PWD=" & Password & 
    ";MODE=SHARE;DBALIAS=" & Db2Id & ";"
        .CommandType = xlCmdSql
        .CommandText = SqlToExecute
    End With
     
    Set xlPvtTable = xlPvtCache.CreatePivotTable(xlsheet.range("A1"),"TabXdyn",1)
     
    ' Maybe you need to force the name of the returned fields of sthe SQL 
    request by this kind of code:
    ' xlPvtTable.PivotFields(1).name = "SqlField1"      = RowFieldsToShow
    ' xlPvtTable.PivotFields(2).name = "SqlField2"      = ColumnFieldsToShow
    ' xlPvtTable.PivotFields(3).name = "SqlField5"      = DataToShow
     
    xlPvtTable.PivotFields(RowFieldsToShow).Orientation = xlRowField
    xlPvtTable.PivotFields(ColumnFieldsToShow).Orientation = xlColumnField
    With xlPvtTable.PivotFields(DataToShow)
        .Name = DataToShow
        .Orientation = xlDataField
        .Function = xlSum
        .NumberFormat = "0.00"
    End With
     
    set xlChart = xlbook.Charts.Add
    With xlChart
        .SetSourceData xlsheet.Range("A1")
        .Location xlLocationAsNewSheet
    End With
    .
    .
    .

    Et ça fonctionne !!!

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

Discussions similaires

  1. fatal error avec la fonction eval()
    Par ren84 dans le forum Langage
    Réponses: 5
    Dernier message: 25/04/2013, 10h31
  2. Eclipse pense à une syntax error avec un typedef opaque
    Par Gui13 dans le forum Eclipse C & C++
    Réponses: 6
    Dernier message: 27/10/2009, 14h32
  3. Syntax error avec jQuery
    Par nicko_73 dans le forum jQuery
    Réponses: 5
    Dernier message: 23/10/2009, 09h23
  4. syntax error sur ma fonction
    Par darkwall_37 dans le forum Débuter
    Réponses: 14
    Dernier message: 30/04/2009, 09h03
  5. Syntax error avec un script KSH
    Par Neuromancien2 dans le forum Shell et commandes GNU
    Réponses: 1
    Dernier message: 19/05/2008, 16h44

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