Intanto grazie per la risposta.

Ho provveduto a fare come mi hai suggerito tu, ma il risultato non cambia. Ma ......
ho fatto mille tentativi ed ho scoperto (non il problema) ma quello che accade.
Mi spiego:

prima di iniziare il ciclo di lettura provvedo ad azzerare la tabella richiamando questa sub:

codice:
 Private Sub azzera_tab(ByVal comando As String)
Dim objconn As OleDbConnection
        Dim objcomm As OleDbCommand
        objconn = New OleDbConnection(stringaconn)
        If objconn.State = ConnectionState.Open Then objconn.Close()
        objconn.Open()
        objcomm = New OleDbCommand(comando, objconn)
        Dim risputente As Integer
        Try
            risputente = objcomm.ExecuteNonQuery()
            If risputente = 0 Then
                objconn.Close()
            End If
        Catch es As Exception
            MessageBox.Show("Errore di connessione al DB" + Chr(13) + Chr(13) + "(" + es.Message + ")")
            objconn.Close()
        End Try
End sub
in la variabile "comando" contiene, in questo caso, la stringa

codice:
DELETE * FROM FIEL
ebbene, se blocco il programma subito dopo questa istruzione la tabella è vuota, ma quando poi la popolo, mi sono accorto che le righe che mancano sono sempre le prime del file csv (quindi se su 1015 ne trovo 1.000 quelle mancanti sono sempre le prime 15 e cosi' via).
Ma non basta.
Se apro il file DB.mdb cliccandoci sopra e seleziono tutti i record, li cancello manualmente e lo chiudo, l'elaborazione mi da il valore giusto. (prova fatta una ventina di volte sempre con risultati esatti...)

Quindi deduco che il problema potrebbe essere nella cancellazione (ma non capisco come visto che "vedo" la tabella vuota) .....

Spero che questa ulteriore informazioni aiuti a dipanare la matassa.

Grazie