1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64
| Sub Macro()
' Keyboard Shortcut: Ctrl+Shift+M
Dim Dico As Object, c As Range, Plage As Range
Set Dico = CreateObject("Scripting.Dictionary")
'le classeur "source.xlsm" doit être ouvert au démarrage de la macro
'c'est le classeur qui contient les données à copier
Workbooks("Grants P7 2011-12.xlsm").Activate
'la feuille DTL TX contient les données du TCD
With Sheets("DTL TX")
'on élimine les doublons en utilisant un dictionnaire
For Each c In .Range(.[A2], .Cells(.Rows.Count, 1).End(xlUp))
If Not Dico.exists(c.Value) Then
Dico.Add c.Value, c.Value
End If
Next c
End With
'boucle sur chaque nom de client
For Each Item In Dico.items
'on copie les feuilles (données et TCD) dans un classeur vierge
Sheets(Array("Balances", "DTL TX", "TX DTL By Dr & Acc", "Total Activity By Period", "CIHR Grouping")).Copy
'on travaille sur le nouveau classeur
With Sheets("DTL TX")
'Plage représente les données du TCD. J'ai utilisé les colonnes A à M
Set Plage = .Range(.[A1], .Cells(.Rows.Count, 13).End(xlUp)) 'j'utilise les colonnes A à M
.[N1] = .[A1]
.[N2] = Item
'filtre élaboré en colonne I sur le nom de client
Plage.AdvancedFilter xlFilterCopy, .[N1:N2], .[O1]
.[A:M].ClearContents
'copie du résultat du filtre en colonne A et B
.[O:AA].Cut .[A:M]
.[N1:N2].ClearContents
'Plage =représente les nouvelles données du TCD correspondant au nom de client
Set Plage = .Range(.[A1], .Cells(.Rows.Count, 13).End(xlUp))
'on ajuste le TCD à la nouvelle plage de données
Sheets("TX DTL By Dr & Acc").PivotTables("PivotTable2").ChangePivotCache _
ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
Plage.Address, Version:=xlPivotTableVersion12)
Set Plage = .Range(.[A1], .Cells(.Rows.Count, 13).End(xlUp))
Sheets("Balances").PivotTables("PivotTable1").ChangePivotCache _
ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
Plage.Address, Version:=xlPivotTableVersion12)
Set Plage = .Range(.[A1], .Cells(.Rows.Count, 13).End(xlUp))
Sheets("Total Activity By Period").PivotTables("PivotTable3").ChangePivotCache _
ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
Plage.Address, Version:=xlPivotTableVersion12)
'ActiveSheet.PivotTables(1).RefreshTable
'enregistrement du classeur (au format XL07)
ActiveWorkbook.SaveAs "C:\Documents and Settings\mmeyer\Desktop\Test\" & Left(Item, 4) & ".xlsx"
ActiveWorkbook.Close
End With
Next Item
Set Dico = Nothing
End Sub |
Partager