Vous pouvez utiliser le tableau croisé dynamique pour le faire.
Utiliser les éléments comme champ de ligne. Utiliser la date en tant que colonne et champ de données (nombre de dates)
En utilisant VBA
Si l'on suppose que les objets et la date dans la feuille « Sheet1 » à partir de la cellule A1, le tableau croisé dynamique est créé dans une feuille de calcul « Feuil2 » à partir de la cellule A3 dans le classeur actif.
Sub createPivotTableReport()
Set wsData = ActiveWorkbook.Worksheets("Sheet1")
Set wsReport = ActiveWorkbook.Worksheets("Sheet2")
Set rngData = wsData.UsedRange
Set rngReport = wsReport.Range("a3")
Set pvtCache = ActiveWorkbook.PivotCaches.Add(xlDatabase, rngData.Address(True, True, 1, True))
Set pvtTable = pvtCache.CreatePivotTable(rngReport)
pvtFieldsRow = Array("Items")
pvtFieldsCol = Array("Date")
pvtTable.AddFields pvtFieldsRow, pvtFieldsCol
pvtTable.PivotFields("Date").Orientation = xlDataField
End Sub
Note:
Dans certaines versions (nouvelles?) D'Excel, la ligne
Set pvtCache = ActiveWorkbook.PivotCaches.Add(xlDatabase, rngData.Address(True, True, 1, True))
peut être changé pour
Set pvtCache = ActiveWorkbook.PivotCaches.Add(xlDatabase, rngData)
Ou peut-être mon ancienne version d'Excel est juste mauvais. Je ne sais pas.
J'ai aussi posté une solution .vbs ici:
http://gallery.technet.microsoft.com/ScriptCenter/en-us/dde1e5e2-f5f6-4053-84fb-b820f01f1fdf