Performance: Dropdown & Pivot-Tabellen
24.03.2023 16:41:41
Lilly
Hallo liebes Forum,
in den letzten Tagen habe ich viele Beiträge gelesen und versucht, die Frage für mein Problem optimal zu stellen, um auf die richtigen Forum-Treffer zu kommen...
Leider habe ich mich etwas verloren und hoffe, dass ihr mir Hinweise darüber geben könnt, wie ich meine Datei optimieren kann.
Worum geht es?
Es ist ein Projekt über ein Event, bei dem Helfer organisiert werden sollen.
Mit dieser Datei möchte ich den Teamleiter unterstützen, für jeden einzelnen Tag einen Plan zu erstellen und zu jeder Schicht und jedem Bereich nur die konkret verfügbaren Helfer auswählen zu können.
https://www.herber.de/bbs/user/158416.xlsm
Was ist mein Problem?
Performance!
Soweit habe ich es geschafft, für Tag 1 und Tag 2 entsprechend die Tabellen für die Planung vorzubereiten (Tabs "Tag 1" und "Tag 2", Tabellen "PlanungTag1" und "PlanungTag2") und die einzelnen Bereiche mit Datenvalidierung zu versehen (Dropdown-Listen).
Diese verweisen mittels OFFSET() auf die entsprechenden Tabs "pivots_Tag 1"/ "pivots_Tag 2", die Pivot-Tabellen für den konkreten Tag und zu jedem Bereich liefern. Damit erzeuge ich die eindeutigen Listen mit Namen, die sich beim Refresh anpassen und alphabetisch sortiert werden.
Bei jedem Eintrag auf Seiten "Tag 1" - "Tag 10" soll auf dem Tab "Personal" die Gesamtanzahl der gebuchten Schichten pro Person berechnet werden.
Wenn die Kapazitätsgrenze von der Person erreicht ist, darf sie nirgendwo mehr in der Dropdown-Liste erscheinen, da sie nicht mehr verfügbar ist.
Dies bedeutet, dass momentan nach jedem Eintrag die PowerQuery-Transformationen durchlaufen (Tab "MATRIX" also aktualisiert wird) und dann alle Pivot-Tabellen für alle 10 Tage aktualisiert werden (es wären also 150 Pivot-Tabellen, wenn ich die Datei komplett weiter entwickeln würde).
Ich habe einige Ansätze probiert, von:
ThisWorkbook.RefreshAll
bis hin zu
Private Sub Worksheet_Change(ByVal Target As Range)
Dim pvt As PivotTable
ThisWorkbook.Connections(3).Refresh
For Each pvt In Sheets("pivots_Tag 1").PivotTables
'If Not Intersect(Target, Range("rngT1B1")) Is Nothing Then
pvt.RefreshTable
'End If
Next
End Sub
und hätte gern als Ziel, dass der Benutzer dieser Datei nicht mehrere Sekunden pro Klick /Eintrag warten muss, bis sich die Dropdown-Listen anpassen.
Habt ihr vielleicht einen Tipp zur Verbesserung?
Soll ich die Daten grundsätzlich anders aufbereiten?
Ich hoffe, dass meine Erklärung verständlich ist und würde mich sehr über einen Hinweis freuen!
Herzlichen Dank im Voraus!
Zusätzliche Erläuterungen:
"Personal":
Hier werden die Stammdaten abgebildet.
Es wird die Anzahl der verfügbaren Schichten (Spalte X) als feste Zahl reingeschrieben, unabhängig vom Datum der An-/Abreise, denn in der Regel wird jede Person nur eine Schicht pro Tag liefern müssen, aber manche VIP-Helfer werden öfters gebraucht.
In Spalte Y werden die insgesamt gebuchten Schichten für diese Person von allen Tabs ("Tag 1" bis "Tag 10") berechnet.
Daraus ergibt sich Spalte Z mit frei verfügbaren Kapazitäten. Sobald die Summe auf 0 sinkt, hat die Person ihre Kapazitätsgrenze erreicht und ihr Name erscheint gar nicht mehr in den Spalten AA bis AJ und damit ist sie nicht mehr für die Dropdown-Listen verfügbar - in PoweQuery werden die Daten über diese Person nicht weiter verarbeitet.
Die Daten werden im Tab "MATRIX", Tabelle "Matrix_Personal_Bereiche" angezeigt.