Je travaille sur l'écriture d'une macro qui supprime toutes les lignes inférieures à .75 d'une valeur trouvée à l'aide d'une formule. Dans un autre thread, ici, j'ai trouvé une boucle qui fonctionne, mais cela prend beaucoup de temps à courir ... alors j'essaie de trouver un moyen sans boucle. Jusqu'à présent, j'ai le code comme vu ci-dessous, mais je reçois un « erreur d'exécution 1004, la méthode « gamme de feuille de calcul de l'objet » a échoué » sur la ligneSuppression de lignes sans boucle répondant à certains critères
ws.Range(Left(rowsToDelete, Len(rowsToDelete) - 1)).Select
Tout le monde a des idées sur une correction? Toute aide est appréciée
Private Sub CommandButton6_Click()
Application.ScreenUpdating = False
Dim ws As Worksheet
Dim i&, lr&, rowsToDelete$, lookFor$, lookFor2$
'*!!!* set the condition for row deletion
lookFor = "#VALUE!"
lookFor2 = "0.75"
Set ws = ThisWorkbook.Sheets("Entry")
lr = ws.Range("H" & Rows.Count).End(xlUp).row
ReDim arr(0)
For i = 1 To lr
If StrComp(CStr(ws.Range("H" & i).Text), lookFor, vbTextCompare) = 0 Or _
CDbl(ws.Range("H" & i).Value) < CDbl(lookFor2) Then
ReDim Preserve arr(UBound(arr) + 1)
arr(UBound(arr) - 1) = i
End If
Next i
If UBound(arr) > 0 Then
ReDim Preserve arr(UBound(arr) - 1)
For i = LBound(arr) To UBound(arr)
rowsToDelete = rowsToDelete & arr(i) & ":" & arr(i) & ","
Next i
ws.Range(Left(rowsToDelete, Len(rowsToDelete) - 1)).Select
Selection.Delete Shift:=xlUp
lr = ws.Range("A" & Rows.Count).End(xlUp).row
ws.Range(lr & ":" & lr).Select
Else
Application.ScreenUpdating = True
MsgBox "No more rows contain: " & lookFor & "or" & lookFor2 & ", therefore exiting"
Exit Sub
End If
If Not Application.ScreenUpdating Then Application.ScreenUpdating = True
Set ws = Nothing
End Sub
vous pouvez utiliser des cellules spéciales pour récupérer toutes les cellules d'erreur de formule et supprimer les lignes dans un hit puis utiliser un filtre automatique et supprimer les lignes .75 dans un autre hit (en utilisant la propriété .Text est lent) – JosieP