ADODB - Range.Delete dans une boucle de RecordSet désynchronise le RecordSet
Bonjour à tous,
Je vais tenté d'être plus explicite.
Je dois détruire les lignes Excel qui sont sélectionnées dans un recordset clone. Imaginons que j'ai trois lignes sélectionnées via SQL dans un recordSet et que l'un des champs correspond à un incrément (dans mon exemple colonne 4 nommé Nr) donc unique.
Je boucle sur mon recordset et pour chaque incrément de mon enregistrement courant, je recherche dans la colonne 4 la valeur ayant celle du recordSet!Nr et je détruis la ligne dans l'onglet. J'ai donc le code suivant:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| '--- With string variables
sSql = "SELECT now(), Nr " & _
" FROM mononglet AS A " & _
" WHERE True" & _
" AND [Responsable] = 'Toto'"
'--- Run the SQL SELECT
oRSetActive.Open sSql, goADODBCnx, adOpenKeyset
If oRSetActive.EOF Then oRSetActive.Close: GoTo Exit_
Set oRSetClone = oRSetActive.Clone
'oRSetActive.Close
'oShtArchive.Cells(lLastRowArchive + 1, 1).CopyFromRecordset oRSetClone
Debug.Print oRSetClone.RecordCount
oRSetClone.MoveFirst
Do While Not oRSetClone.EOF
Debug.Print oRSetClone.RecordCount & " - " & oRSetClone![Nr]
lRowDel = oShtActive.Columns(4).Find(oRSetClone![Nr]).Row
oShtActive.Rows(lRowDel).EntireRow.Delete
oRSetClone.MoveNext '------------------> Au 1er MoveNext, ça positionne le curseur sur le 3ième enregistrement et cela est dû à .Delete
Loop |
Citation:
oRSetClone.MoveNext
Au 1er MoveNext, positionne le curseur sur le 3ième enregistrement et cela est dû à Entire.Delete car si mets en commentaire EntireRow.Delete alors à la première itération du MoveNext, le curseur se positionne bien sur le 2ième enregistrement
Une explication?