Try placing the following in your example file; it creates a new sheet each time and populates it:
Sub blah()
Set SourceSht = Sheets("CopyFrom")
SourceLr = SourceSht.UsedRange.Rows.Count
'create new sheet and set up headers:
With Sheets.Add(After:=Sheets(Sheets.Count))
SourceSht.Range("D1:D" & SourceLr).AdvancedFilter Action:=xlFilterCopy, CopyToRange:=.Range("A1"), Unique:=True
NewShtLr = .UsedRange.Rows.Count
.Range("A2:A" & NewShtLr).Copy
.Range("B1").PasteSpecial Transpose:=True
.Columns(1).ClearContents
'populate columns in the new sheet:
For Each cll In .Range("B1").Resize(, NewShtLr - 1).Cells
SourceSht.Range("A1").AutoFilter Field:=4, Criteria1:=cll.Value
SourceSht.Range("A2:A" & SourceLr).Copy cll.Offset(1)
Next cll
End With
SourceSht.Range("B1").AutoFilter
End Sub