altra cosa:
penso ci sia qalche errorino di flusso, aggiungo il codice che secondo me dovrebbe essere inserito (scritto in blu)
codice:
Set Rs = CnRdo.OpenResultset(SqlVisCoCli)
Rs.MoveFirst 'per sicurezza, a volte si impallano i recordset alla prima apertura

If Rs("libero14") <> vbNullString Then
    NumPolizza = Rs("libero14")
Else
    NumPolizza = ""
End If

...

' Modifica Elena - aggiunta nuova colonna - 20030622

MSFlexGridContratti.Row = 1
MSFlexGridContratti.Col = 9
MSFlexGridContratti.Text = Trim(Col30)

'Fine Modifica Elena 20030622

Rs.MoveNext '<-- questo secondo me non c'entra niente 
            '    a meno che non metti tutto il codice 
            '    che c'è sopra in un ciclio  
            '    per ogni record presente nel recordset


Rs.MoveFirst 'se invece il MoveNext qui sopra ti serve allora aggiungi questo movefirst prima di inziare il ciclo

Do While Not Rs.EOF

If Rs("libero14") <> vbNullString Then
    NumPolizza = Rs("libero14")
Else
    NumPolizza = ""
End If

...

MSFlexGridContratti.AddItem strListaCGrid

Rs.MoveNext
Loop

Exit Sub

cmq, per come è scritto il codice, se il recordset (RS) contiene n record ti troverai n righe nella grid è strano trovarne 2 uguali a meno che non sia il contenuto della tabella dalla quale hai tirato fuori il recordset