Ciao Gibra , grazie per la risposta.
Prima cosa , anche se non sono stato molto chiaro hai capito benissimo cio che intendevo.

Ti dico , non sono un esperto, e sinceramente cio che ho imparato oltre che sui libri base, e' stato qui .

Per assurdo avendo determinate conoscenze e volendo sviluppare applicativi per lo piu gestionali ( come avrai intuito) ho deciso di cominciare ( anche se non sono ancora in grado di farlo) piccoli programmini atti piu che altro a farmi capire le problematiche che potrei riscontrare nella creazione di applicazioni anche piu complesse.
Quando qualcosa non riesce , mi informo, leggo , chiedo e quando risolvo metto nel cassetto.
Detto cio, mi trovo daccordo che :

Do While X < cn.Execute(rps).RecordCount
che esegue la query ad ogni iterazione (non ha alcun senso!).
Piuttosto dovresti fare così:
codiceim nRec as long
nRec = rps.RecordCount
Do While X < nRec
'...
Loop

e ancora piu giusto :

Do While Not rps.EOF
cn.Execute("UPDATE articoli SET esistenza = esistenza + qta-da-recuperare.... WHERE ....")
rps.movenext
Loop
Rem Ora posso eliminare il documento
cn.Execute("DELETE * FROM tabella where IDDocumento = " & idDocumento)

Per cio che concerne le transazioni, non lo sapevo anche se comunque avevo pensato ad uno spegnimento accidentale del pc e avrei dovuto capire come fare nel caso succedesse.
Studiero'

Grazie Gibra a presto .

P.s. come si mettono i riquadri :|