Question 1 - Pour changer le nombre de colonnes, il suffit de modifier le code que je t'ai envoyé qui ne prenait en compte que les 3 colonnes de ton exemple. Ce sont les dangers de prendre des exemples simplifiés. Mieux vaut proposer un fichier réel "dépersonnalisé". Dans l'exemple ci-dessous tu peux mettre autant de lignes et de colonnes que tu veux.
Sub Dissocier()
Dim table() As Variant, nL As Long, nC As Long
Dim i As Long, j As Long, k As Long, compt As Long
Dim ws1 As Worksheet, ws2 As Worksheet
Set ws1 = Sheets("liste")
nL = ws1.UsedRange.Rows(ws1.UsedRange.Rows.Count).Row
nC = ws1.Range("A1").CurrentRegion.Columns.Count
ReDim table(nL, nC)
For j = 1 To nL
For i = 1 To nC
table(j, i) = Cells(j, i)
Next i
Next j
' On remplit les feuilles recap
For i = 1 To 3
compt = 0
Set ws2 = Sheets(i + 1)
For j = 1 To UBound(table)
If table(j, nC) = "onglet" Or Val(table(j, nC)) = i Or table(j, nC) = "" Then
compt = compt + 1
For k = 1 To nC
ws2.Cells(compt, k) = table(j, k)
Next k
End If
Next j
Next i
End Sub
Question 3 - On balaye le tableau (table) de la 1re ligne à la dernière et on lit la valeur de la colonne "'onglet".
S'il n'y a ni 1, ni 2, ni 3 on recopie la ligne dans tous les onglets. Si on a 1, 2 ou 3, on copie la ligne uniquement dans l'onglet correspondant.