Récupération valeur cellules dans plusieurs TCD par macro
Bonjour à tous,
Je viens vers vous car j'ai un petit problème, je cherche au sein d'une ou deux macro, pouvoir récupérer au sein d'un tableau dans une feuille nommé "BILAN" les noms des feuilles qui m'intéressent mais également si la feuille contient ce nom la valeur d'une cellule.
Voilà la structure du projet :
1 ère macro transforme une source de données en TCD
2 -ème macro copie le TCD et la feuille en X exemplaires puis la renomme automatiquement MIX-1, MIX-2,....,MIX-X (X est rempli par l'utilisateur en général il ne dépasse pas 10)
Etape 3 : l'utilisateur rajoute des segments à chaque feuille ce qui lui permet de sélectionner les items/articles dont il a besoin de sorte a que le TCD lui fasse un bilan financier de l'assemblage de ces différents articles. On garde donc le même format pour tous les TCD cependant leurs contenus diffère en fonction des choix de l'utilisateur.
Etape 4 : Utilisation d'une 3 -ème macro qui parcourt les différentes feuilles nommées MIX-X et récupération de la valeur d'une cellule le total afin de comparer les différents assemblages
Ci-dessous la forme de mon TCD et la cellule en rouge que je cherche à copier
Je cherche donc a remplir un tableau dans la feuille "BILAN" de la forme :
Avec la colonne critère qui référence les différents noms de feuilles contenant les TCD et en face dans coût de production la valeur comprise dans le TCD
Pour récupérer les noms des feuilles j'ai codé une macro qui fonctionne :
Cependant je n'arrive pas à récupérer la valeur de la cellule du TCD.
Quand je mets en direct dans le tableau = cellule Excel me renvoie la formule suivante
MIX-1 ||||||||| =LIREDONNEESTABCROISDYNAMIQUE("Somme de Total T1 [e TOTAL]";'MIX-1'!$A$3)
MIX-2 ||||||||| =LIREDONNEESTABCROISDYNAMIQUE("Somme de Total T1 [e TOTAL]";'MIX-2'!$A$3)
.....
MIX-X ||||||||| =LIREDONNEESTABCROISDYNAMIQUE("Somme de Total T1 [e TOTAL]";'MIX-X'!$A$3)
Quand je passe dans l'enregistreur de macro il me retourne le code suivant :
Lorsque je réitère avec mon MIX-2, MIX-3, ect il n'y a que la partie 'MIX-1' qui change ma question est : comment puis-je transformer ça en variable de sorte a utiliser une boucle for et faire varier cette variable pour copier la valeur de la cellule à partir de mes différentes feuilles.
Je ne sais vraiment pas comment je peux faire pour automatiser ceci et j'ai besoin de votre aide.
Je vous remercie de m'avoir lu et par avance si vous pouvez m'aider.
Thomas
Bonjour,
Proposition (non testée puisque le fichier n'est pas disponible)
Sub SnameList()
Dim f1 As Worksheet
Dim i As Long, Lig As Long
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Set f1 = Sheets("BILAN")
Lig = 4
For i = 1 To Sheets.Count
If Left(Sheets(i).Name, 3) = "MIX" Then
f1.Cells(Lig, "B") = Sheets(i).Name
f1.Cells(Lig, "D").FormulaR1C1 = "=GETPIVOTDATA(""Somme de Total T1 [e TOTAL]"",'" & Sheets(i).Name & "'!R3C1)"
Lig = Lig + 1
End If
Next i
Set f1 = Nothing
End SubCdlt
Bonjour,
la méthode GetPivotData demande de référencer le TCD.
Ce n'est pas une fonction de feuille de calcul (WorksheetFunction).
Comme exprimé par Arturo83, un fichier serait utile pour une aide adaptée.
Faire F1 dans l'éditeur VBE sur GetPivotData pour l'aide Excel.
Cdlt.
Je tiens à te remercier Arturo je viens de tester et cela marche parfaitement.
Merci également Jean-Eric pour tes explications sur mes erreurs sur la fonction.
Ce projet est ma première expérience VBA du coup je galère un peu et je n'avais pas trop compris le fonctionnement de cette fonction mais je saurais pour les prochaines fois.
Encore merci à vous pour votre aide, je me doute que ce n'est pas évident quand il n'y a pas le fichier sous les yeux mais pour son fonctionnement dans le code de certaines macros, il y a des données que je ne peux pas diffuser et nécessaire au fonctionnement du fichier j'ai donc essayé de détailler au maximum mon problème en évitant la diffusion du fichier. Mais je sais que ce n'est pas pratique encore désolé mais je ne pouvais vraiment pas le diffuser.
Encore merci !
Thomas.
PS : Je passe le sujet en résolu