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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 LoopAu 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 enregistrementoRSetClone.MoveNext
Une explication?
Partager