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