Filtrer données de graphique - TCD vs DECALER
Bonjour,
Dans le fichier en PJ onglet DATA, le tableau en B2:L7 présente les données sous la forme de séries en lignes, renseignées par date en colonne. Certains dates correspondent à des jours travaillés (identifiés "O" en ligne 2). A noter qu'il est possible d'avoir des jours non travaillés même si il existe des valeurs non nulles.
Mon objectif est de présenter les valeur des séries de données uniquement pour les jours travaillés dans un graphique.
Le format même des données m'empêche de faire un Graphique croisé dynamique.
C'est ce que j'ai fait dans l'onglet GCD sur la base de mon tableau qui a été inversé en B25:G35
Une des solutions consisterait donc à présenter mes données de façon inversée, sauf que les rapports des activités concernées sont historiquement présentées selon la forme du tableau B2:L7.
Je me dis néanmoins qu'il doit exister 2 solutions, mais je n'arrive pas à les maîtriser :
- ne serait-il pas possible d'indiquer au Graphique Croisé Dynamique que la source de données doit être inversée ?
- ne serait-il pas possible, lorsqu'une graphique est généré sur la base du tableau B2:L7 que les séries de données soient le résultat d'une formule (je pense à la fonction DECALER et/ou un calcul matriciel) qui permette d'ignorer les données correspondant aux jours non travaillés ?
Merci de vos conseils !!
AE
Bonsoir,
Une proposition VBA.
La saisie des données s'effectue dans la feuille Data.
Toute modification est intégrée au TCD et au GCD à l'activation de leur feuille.
Cdlt.
Bonjour,
Merci Jean-Eric et sakman26 pour vos réponses.
Jean-Eric,
Deux questions pour bien comprendre :
- Set lo = Me.ListObjects(1) : tu récupéres l'objet Nom "Tableau1" que tu supprimes, correct ? existe t il une méthode pour retrouver directement un objet par son nom ou faut il boucler sur la liste des objets et tester l'attribut DisplayName ?
- Tu inverses le tableau de transition 'arr' à la fin. Je me suis dit qu'il serait possible de le remplir ainsi en inversant les index le lignes et de colonnes, mais j'ai une erreur lors du second ReDim. Je n'ai pas vu de restriction concernant les redimensionnement selon les lignes ; je rate qqchose ?
For I = 3 To UBound(tbl, 1)
For J = 2 To UBound(tbl, 2)
ReDim Preserve arr(k + 1, 4)
arr(k, 0) = tbl(2, J)
arr(k, 1) = tbl(1, J)
arr(k, 2) = tbl(I, 1)
arr(k, 3) = tbl(I, J)
k = k + 1
Next J
Next I
Set lo = Me.ListObjects(1)
With lo
If Not .DataBodyRange Is Nothing Then .DataBodyRange.Delete
Set rCell = .InsertRowRange.Cells(1)
End With
rCell.Resize(UBound(arr, 2), 4).Value = arrsakman26
J'avoue ne pas comprendre les formules et les calculs intermédiaires donnés dans le gestionnaire de noms.
Peux-tu me donner quelques explications ?
A tous,
Question en apparté : étant donné qu'avec un tableau inversé je pourrais traiter directement mes données, ne serait-il pas possible de créer une fonction personnelle d'inversion de tableau qui puisse être appelée au moment de la définition des données sources d'un tableau croisé dynamique ?
Merci à vous,
AE