RE,
Les données ont été mises sous de tableaux (dynamiques).
La procédure événementielle [ALT F11 ; voir module Feuil3 (Calculs)] consolide les données des feuilles Inventaire et Restore dans un tableau unique.
Le tableau croisé dynamique est ensuite actualisé et le champ Libellé trié en ordre ascendant.
Quelques explications ci-dessous.
Cdlt.
Option Explicit
'Procédure événementielle module Feuil3 (Calculs)
Private Sub Worksheet_Activate()
Dim ws As Worksheet, wsTable As Worksheet
Dim lo As ListObject
Dim rCell As Range
Dim n As Long
Application.ScreenUpdating = False
'------------------------------------------------------------------------------
'RAZ tableau source du tableau croisé dynamique (TCD)
'Me = feuille active (soit la feuille Calculs)
Set lo = Me.ListObjects(1)
With lo
If Not .DataBodyRange Is Nothing Then .DataBodyRange.Delete
'Cellule de destination
Set rCell = .InsertRowRange.Cells(2)
End With
'------------------------------------------------------------------------------
'Mise à jour tableau source du TCD
'Copie des données Inventaire et Restore dans un tableau unique
For Each ws In ActiveWorkbook.Worksheets
If ws.Name <> Me.Name Then
'Nombre de lignes du tableau
n = ws.ListObjects(1).ListRows.Count
ws.ListObjects(1).DataBodyRange.Copy
rCell.PasteSpecial xlPasteValues
Application.CutCopyMode = False
'Ajout origine des données
rCell.Offset(, -1).Resize(n).Value = ws.Name
'Prochaine cellule de destination
Set rCell = lo.HeaderRowRange.Cells(2).Offset(lo.ListRows.Count + 1)
End If
Next ws
'------------------------------------------------------------------------------
'Mise à jour TCD
With Me.PivotTables(1)
'Actualisation
With .PivotCache
.MissingItemsLimit = xlMissingItemsNone
.Refresh
End With
'Tri
.PivotFields("Libellé").AutoSort _
xlAscending, _
.PivotFields("Libellé").SourceName
End With
'------------------------------------------------------------------------------
Application.Goto Me.Cells(1)
'------------------------------------------------------------------------------
MsgBox "Mise à jour effectuée...", vbInformation, "Calculs"
'------------------------------------------------------------------------------
Set rCell = Nothing
Set lo = Nothing
End Sub