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 :

Utilisation de getpivotdata avec VBA


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Homme Profil pro
    Superviseur de Hotline
    Inscrit en
    Décembre 2013
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Superviseur de Hotline
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2013
    Messages : 28
    Points : 12
    Points
    12
    Par défaut Utilisation de getpivotdata avec VBA
    Bonjour,

    J'utilise un TCD avec comme source un cube OLAP.

    J'arrive à lire les données en utilisant la formule ci dessous dans une cellule:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     =LIREDONNEESTABCROISDYNAMIQUE("[Measures].[Nb appels répondus]";$B$6;"[Détail Demi-Heure].[Demi-Heure]";"[Détail Demi-Heure].[Demi-Heure].&[3]";"[Temps].[Jour]";"[Temps].[Jour].&[2014-10-03T00:00:00]")
    J'ai utilisé l'enregistreur de macro qui me donne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
         ActiveCell.FormulaR1C1 = _
            "=GETPIVOTDATA(""[Measures].[Nb appels répondus]"",R81C2,""[Détail Demi-Heure].[Demi-Heure]"",""[Détail Demi-Heure].[Demi-Heure].&[7]"",""[Temps].[Jour]"",""[Temps].[Jour].&[2014-06-16T00:00:00]"")"
    Le pb est que dans ma cellule je veux la valeur est non pas la "fonction" Getpivotdata....

    J'essaye donc d'utiliser en vba l'expression pivottables.getpivotdata mais sans succès :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Dim Ws As Worksheet, sh As Worksheet, I, J, K, C As Range, DDate
     
    Set Ws = Sheets("YYY")
    Set sh = Sheets("XXX")
     
    DDate = Format(Date - 7, "yyyy-mm-dd") & "T00:00:00"
     
    For I = 1 To 25
            sh.Cells(I, "D").Value = Ws.PivotTables("Tableau croisé dynamique4").GetPivotData("Nb appels répondus", "Demi-Heure", I, "Jour", DDate)
    Next I
    J'ai une erreur 1004 : erreur définie par l'application ou par l'objet.

    tout aide serait la bienvenue :-)

  2. #2
    Membre éprouvé Avatar de issoram
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2009
    Messages
    665
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2009
    Messages : 665
    Points : 929
    Points
    929
    Par défaut
    Bonjour,

    Il y a 2 erreurs dans la ligne de code utilisant la méthode GetPivotData :

    1. La propriété .Cells(i,j) s'utilise avec 2 entiers en paramètres (erreur de ma part à ne pas prendre en compte, cf. messages ci-dessous)
    2. La méthode GetPivotData renvoie une plage (objet Range) et non une valeur. Le compilateur comprend la syntaxe Plage = valeur sous-entendu Plage.Value = valeur mais dans l'autre sens (Plage1.Value=Plage2) je ne sais pas. Mieux vaut corriger, ne serait-ce que pour une question de cohérence du code)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    sh.Cells(I, "D").Value = Ws.PivotTables("Tableau croisé dynamique4").GetPivotData("Nb appels répondus", "Demi-Heure", I, "Jour", DDate) ' 
    sh.Cells(I, 4).Value = Ws.PivotTables("Tableau croisé dynamique4").GetPivotData("Nb appels répondus", "Demi-Heure", I, "Jour", DDate).Value  '
    Essaie déjà avec ces modifications.

  3. #3
    Invité
    Invité(e)
    Par défaut
    Salut,

    Bien que je n'ai pas essayé, as-tu vérifié que ta fonction renvoie bien une et 1 seule cellule, car sinon, la propriété .Value d'un Range renvoi un tableau 2D.

    A tester (sans garanti de succès):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    For I = 1 To 25
            sh.Cells(I, "D").Value = Ws.PivotTables("Tableau croisé dynamique4").GetPivotData("Nb appels répondus", "Demi-Heure", I, "Jour", DDate).Cells(1,1)
    Next I

    P.S.: Pour les colonnes, il est possible de passer une lettre dans .Cells().

  4. #4
    Membre éprouvé Avatar de issoram
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2009
    Messages
    665
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2009
    Messages : 665
    Points : 929
    Points
    929
    Par défaut
    Bonjour,

    Autant pour moi pour la propriété .cells fonctionnant avec l'indice sous forme de lettre, j'ai appris quelque chose .
    Le problème doit donc bien venir de l'affectation comme l'explique nouveau2.

    Bonne journée

Discussions similaires

  1. Comment utiliser une dll avec VBA
    Par Nicolas_Aplus dans le forum Général VBA
    Réponses: 2
    Dernier message: 14/05/2013, 17h46
  2. [XL-2010] utiliser CENTILE.INCLURE avec VBA ?
    Par beegees dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 31/03/2011, 08h49
  3. Utilisation bibliothèque Lotus avec VBA Access
    Par lerico dans le forum VBA Access
    Réponses: 0
    Dernier message: 20/11/2007, 15h19
  4. Réponses: 5
    Dernier message: 29/05/2006, 14h27
  5. Utilisation de DDERequest avec VBA
    Par queenmum dans le forum Général VBA
    Réponses: 1
    Dernier message: 10/09/2005, 12h24

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