Det her er helt klart en af de udfordringer mange udviklere ville forsøge at kode på en meget mere besværlig måde, end det behøver at være. Sådan som jeg har gjort det, tager FillBackground funktionen to parametrer. 
BgObj er det objekt du vil dække hele baggrunden med - overvej at bruge 
Image frem for 
PictureBox, da den fylder mindre i hukommelsen. 
Mem() er et todimensionelt array, der husker hvilke steder der allerede er blevet dækket af objektet, så hele baggrunden bliver dækket på en sikker måde, uden chance for hverken huller eller overlapninger.
Den der 
Static Mem(100, 100) kunne også være placeret inden i 
sub'en, men så ville det ikke være muligt at genbruge funktionen til at udfylde andre baggrunde. Af samme grund står der 
BgObj(0).Container istedet for 
Form1 eller 
Me.
Hvis du vil se nærmere på hvordan funktionen virker, kan jeg anbefale at du sætter funktionskaldet ind under et knappetryk istedet for i 
Form_Resize hvor den er nu, så du kan se den reagere. Du kan også smide en 
MsgBox ind.
Option Explicit
Private Sub Form_Resize()
    Static Mem(100, 100) As Boolean
    FillBackground Shape1, Mem
End Sub
Public Sub FillBackground(BgObj As Object, ByRef Mem() As Boolean)
    With BgObj(0)
        
        Dim CurX As Integer
        Dim CurY As Integer
        
        For CurX = 0 To Int(.Container.ScaleWidth / .Width)
            
            For CurY = 0 To Int(.Container.ScaleHeight / .Height)
                
                If Mem(CurX, CurY) = False Then
                
                    'Copy the object, set the position, show
                    Load BgObj(BgObj.UBound + 1)
                    BgObj(BgObj.UBound).Move CurX * .Width, CurY * .Height
                    BgObj(BgObj.UBound).Visible = True
                    
                    'Set the memory function
                    Mem(CurX, CurY) = True
                
                End If
                
            Next CurY
            
        Next CurX
        
    End With
End Sub