Ciao,
sono contento per te, è sempre bello fare bella figura con i figli 
Per quello che mi chiedi credo che la soluzione più semplice sia di aggiungere, nella macro, una cancellazione preventiva dei check-box presenti, in modo da poterli poi reinserire su tutti i prodotti trovati, compresi quelli nuovi.
Oltre questo però occorre anche fare qualche piccola modifica che ho notato riguardando il codice, praticamente la macro che ti ho postato andrebbe modificata così:
codice:
Sub Macro1()
Sheets("Prodotti").Activate
ActiveSheet.OLEObjects.Delete
i = 0
Altezza = 10
For Each casella In Range("G5:G500")
If casella.Value <> "" Then
i = i + 1
Sommità = casella.Top + ((casella.Offset(1, 0).Top - casella.Top - Altezza) / 2) + 0.75
ActiveSheet.OLEObjects.Add(ClassType:="Forms.CheckBox.1", Link:=False, _
DisplayAsIcon:=False, Left:=10, Top:=Sommità, Width:=10, Height:=Altezza). _
Select
ActiveSheet.OLEObjects(i).Object.Caption = ""
ActiveSheet.OLEObjects(i).Name = casella.Row
End If
Next
[A1].Select
End Sub
Ti spiego cosa ho fatto.
Come prima istruzione ho aggiunto la Activate del foglio Prodotti, per evitare che, se eseguita per errore da un altro foglio, inserisca i check su quest'altro.
Poi ho aggiunto la Delete preventiva che ti dicevo per eliminare i vecchi check-box prima di inserire i nuovi.
Poi ho spostato l'impostazione dell'altezza dei check-box fuori dal ciclo per evitare che venga inutilmente ripetuta trecento volte visto che ne basta una sola.
E infine ho semplificato il puntamento ai check per settare la Caption e il Name perché in alcuni casi andava in errore.
Prendi quindi questa come base per riportare le tue variazioni.
Un ultima cosa, visto che i prodotti sono diventati 16 e magari cambieranno anche in futuro ti conviene rendere più parametrico il codice del pulsante, così:
codice:
Private Sub CommandButton1_Click()
Righe_Anagrafica = 8
Numero_Prodotti = 16
For i = Righe_Anagrafica + 1 To Righe_Anagrafica + Numero_Prodotti
Sheets("Ordini").Rows(i).Clear
Next
i = 0
For Each chk In Sheets("Prodotti").OLEObjects()
If chk.Object.Value Then
i = i + 1
If i > Numero_Prodotti Then
MsgBox "Troppi prodotti selezionati" & vbCrLf & "Copiati solo i primi " & Numero_Prodotti
Exit For
End If
Sheets("Prodotti").Range(Sheets("Prodotti").Cells(chk.Name, 2), Sheets("Prodotti").Cells(chk.Name, 10)).Copy Destination:=Sheets("Ordini").Cells(i + Righe_Anagrafica, 1)
End If
Next
End Sub
in modo da impostare una volta per tutte, all'inizio, il numero di righe occupate dall'anagrafica (che adesso sono 8) e il numero di prodotti (che adesso sono 16) e non toccare più nulla, infatti la If e la MsgBox ora fanno riferimento a Numero_Prodotti invece che a un valore fisso e anche l'ultima istruzione, la copy, comincia a scrivere dalla riga seguente a quella indicata in Righe_Anagrafica.
In questo modo sarà più semplice modificarla se un domani cambierà qualcosa.
Ciao e buon lavoro