Analyse de Scenario avec un tableau croisé dynamique

Bonjour, je refais appel à vous car j'ai un problème dans mon fichier.

Contenu fichier :

Feuille 1 : Base de données dont certaines colonnes sont liées par des calculs

Feuille 2 : Résultats

Dans la feuille 2 se trouve la cellule que je veux faire varier [B9].

Un tableau croisé dynamique où je veux noter extraire le résultat [B45]

J'ai créé des scénarios dans l'analyse de scénarios pour automatiser le changement de valeur de B9 et lire les différents résultats mais il y a une erreur dans le code...

Le but final est d'obtenir un tableau regroupant les différentes valeurs testées B9 et les résultats B45 correspondant.

Quelqu'un pourrait m'aider ?

Merci d'avance

Bonjour,

Une proposition à étudier.

Cdlt.

Merci pour la réponse !

Serait il possible de ne pas afficher seulement le résultat (ici moyenne du TCD) mais l'ensemble des valeurs de celui-ci comme dans mon tableau initial ?

J'ai compris une partie du code, et j'ai pu l'adapter pour tester davantage de scenarios

Merci d'avance

Re,

Ton fichier en retour.

Cdlt.

Merci encore Jean Eric, tu es une grande aide pour moi !

J'ai modifié ton code pour avoir une matrice de résultat et plus seulement la cellule B45.

Je pense qu'une boucle aurait été plus propre mais je suis déjà content de moi ...

J'ai à refaire ce type d'opération dans un autre classeur.

Comment puis je adapter ce code en sachant que :

  • je ne sais pas créer le bouton "test" que vous avez fait
  • il y aura plusieurs TCD. (j'imagine que je dois mettre le nom du tableau à la place du "1" dans "PivotTables(1).PivotCache.Refresh" ?

J'ai compris comment fonctionnait le numéro des cellules et je les adapterai au besoin

Merci d'avance !

End Sub

Re,

Pourquoi ne pas joindre ton nouveau classeur?

Cdlt.

le fichier est trop volumineux pour être transféré...

Il y a bcp de TCD et c'est assez compliqué à expliquer ma démarche.

J'ai conscience que cela ne vous aide pas...

Re,

Pour la création du bouton, consulte ce lien :

https://support.office.com/fr-fr/article/Affecter-une-macro-à-un-bouton-Formulaire-ou-Commande-d58edd7d-cb04-4964-bead-9c72c843a283

Dans la procédure on avait Pivottables(1) car la feuille active comportait un unique TCD. Si la feuille en contient plusieurs, il faut effectivement les nommer [PivotTables("Tableau croisé dynamique1")], par exemple.

Sinon tu faire une boucle pour actualiser tous les TCDs de la feuille active.

Public Sub DEMO()
Dim pt As PivotTable
Dim tbl As Variant
Dim i As Long, j As Long
    j = 5
    With ActiveSheet
        For Each pt In .PivotTables
            pt.PivotCache.Refresh
        Next pt
        tbl = Application.Transpose(.Cells(9, 5).Resize(, 5).Value)
        For i = LBound(tbl) To UBound(tbl)
            .Cells(9, 2).Value = tbl(i, 1)
            .Cells(11, j).Value = .Cells(45, 2).Value
            'Etc...
            '
            '
            j = j + 1
        Next i
    End With
End Sub

Merci infiniment Jean Eric,

on touche au but, j'ai pu appliquer cela à mes tableaux sans créer d'erreur VBA.

Le seul problème maintenant c'est que le dernier code envoyé n'actualise pas la valeur "résultat".

J'affiche x fois le même résultat comme si les tableaux n'étaient pas actualisés.

Après divers tests, je me suis rendu compte que la macro ne testait que la dernière valeur

Une idée ?

j'ai essayé de déplacer la boucle d'actualisation dans l'autre comme ci dessous mais ca ne marche pas

[i]Public Sub DEMO()
Dim pt As PivotTable
Dim tbl As Variant
Dim i As Long, j As Long
    j = 5
    With ActiveSheet
        tbl = Application.Transpose(.Cells(9, 5).Resize(, 3).Value)
        For i = LBound(tbl) To UBound(tbl)
            .Cells(9, 2).Value = tbl(i, 1)
            .Cells(11, j).Value = .Cells(45, 2).Value
            For Each pt In .PivotTables
                pt.PivotCache.Refresh
            Next pt
            j = j + 1
        Next i
    End With
End Sub[/i]

Re,

Tu modifies la cellule B9 puis on actualise tous les TCDs.

Ensuite tu récupères les résultats qui t'intéressent...

Cdlt.

Public Sub DEMO()
Dim pt As PivotTable
Dim tbl As Variant
Dim i As Long, j As Long
    j = 5
    With ActiveSheet
        tbl = Application.Transpose(.Cells(9, 5).Resize(, 3).Value)
        For i = LBound(tbl) To UBound(tbl)
            .Cells(9, 2).Value = tbl(i, 1)
            For Each pt In .PivotTables
                pt.PivotCache.Refresh
            Next pt
            .Cells(11, j).Value = .Cells(45, 2).Value
            'Code
            '
            '
            j = j + 1
        Next i
    End With
End Sub
Rechercher des sujets similaires à "analyse scenario tableau croise dynamique"