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
| Sub test()
'Réf. 111101.xlsm mikeactuaire
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("source.xlsm").Activate
'la feuille Feuil2 contient les données du TCD
With Sheets("Feuil2")
'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 deux feuilles (données et TCD) dans un classeur vierge
Sheets(Array("Feuil1", "Feuil2")).Copy
'on travaille sur le nouveau classeur
With Sheets("Feuil2")
'Plage représente les données du TCD. J'ai utilisé les colonnes A et B...
'à modifier
Set Plage = .Range(.[A1], .Cells(.Rows.Count, 2).End(xlUp)) 'j'utilise les colonnes A et B
.[H1] = .[A1]
.[H2] = Item
'filtre élaboré en colonne I sur le nom de client
Plage.AdvancedFilter xlFilterCopy, .[H1:H2], .[I1]
.[A:B].ClearContents
'copie du résultat du filtre en colonne A et B
.[I:J].Cut .[A:B]
.[H1:H2].ClearContents
'Plage d=représente les nouvelles données du TCD correspondant au nom de client
Set Plage = .Range(.[A1], .Cells(.Rows.Count, 2).End(xlUp))
'on ajuste le TCD à la nouvelle plage de données
Sheets("Feuil1").PivotTables(1).ChangePivotCache _
ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
"Feuil2!" & Plage.Address, Version:=xlPivotTableVersion12)
'enregistrement du classeur (au format XL97-2003)
ActiveWorkbook.SaveAs "c:\temp\" & Item, xlExcel8
ActiveWorkbook.Close
End With
Next Item
Set Dico = Nothing
End Sub |
Partager