Bonsoir,
Bonsoir, Dan
un essai
par contre, je n'extrais que les noms/Prénoms, et les numéros de cadeaux, ton exemple n'étant pas représentatif....
Tu enregistres dans un répertoire dédié, les fichiers vont se créer dans ce répertoire...
Le code :
Sub Repartir()
Dim Fl1 As Worksheet, Fl2 As Worksheet
Dim Cel As Range, PremCel As Range, DerCel As Range
Dim LePath As String, LeNom As String
Application.ScreenUpdating = False
LePath = ThisWorkbook.Path & "\"
Set Fl1 = Sheets("Feuil1")
Set Fl2 = Sheets("Feuil2")
Fl2.Cells.Clear
Fl1.Columns(3).SpecialCells(xlCellTypeConstants, 23).EntireRow.Hidden = True
Fl1.Columns(2).SpecialCells(xlCellTypeVisible).Copy Fl2.Range("A1")
Fl2.Columns(1).SpecialCells(xlCellTypeBlanks).EntireRow.Delete
Fl1.Cells.EntireRow.Hidden = False
For Each Cel In Fl2.Range("A1:A" & Fl2.[A65000].End(xlUp).Row)
Set c = Fl1.Columns(2).Find(Cel)
Set PremCel = c.End(xlDown)
LeNom = Mid(PremCel.Offset(1, 1), InStr(1, PremCel.Offset(1, 1), " ") + 1, _
Len(PremCel.Offset(1, 1)) - InStr(1, PremCel.Offset(1, 1), " "))
Set DerCel = PremCel.End(xlDown).Offset(, 2)
Range(PremCel, DerCel).Name = "base"
Sheets("Dest").Copy After:=Sheets(Sheets.Count)
ActiveSheet.Name = LeNom
Fl1.Range("base").AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Range( _
"A1:B1"), Unique:=False
ActiveSheet.Cells.EntireColumn.AutoFit
ActiveSheet.Move
Application.DisplayAlerts = False
ActiveWorkbook.SaveAs LePath & LeNom & ".xls"
ActiveWorkbook.Close False
Next Cel
Fl2.Cells.Clear
Fl1.Select
End Sub
le fichier :
https://www.excel-pratique.com/~files/doc2/fichier_source_v1.xls