macro d'exception supprimant des lignes supplémentaires

J'ai une macro qui supprime les lignes que je ne veux pas dans Excel. il supprime les lignes qui ont un time avant 9h30 et après 16h00. Pour une raison quelconque, il supprime également les lignes qui ont le time de 10h00 à 10h09, de 11h00 à 11h09, de 12h00 à 12h09, de 13h00 à 1h00: 09h00, de 14h00 à 14h9, de 15h00 à 15h09.

Aidez-moi donc afin qu'il ne supprime pas ces lignes.

mon code:

Sub DeleteRows() Dim lastRow As Long Dim Cell As Long Dim dt As Date 'Work with the active sheet. With ActiveSheet 'Find the last row of your dataset. lastRow = .Range("A:A").Find("*", searchdirection:=xlPrevious).Row 'Format your time column to a readable time. .Columns("B").NumberFormat = "[$-F400]h:mm:ss AM/PM" 'Loop through the rows, beginning at the bottom. For Cell = lastRow To 2 Step -1 'Piece together the date. dt = Mid(.Cells(Cell, 1), 5, 2) & "/" & _ Mid(.Cells(Cell, 1), 7, 2) & "/" & Left(.Cells(Cell, 1), 4) 'If the date is a Sat or Sun, delete the row. If Weekday(dt) = 1 Or Weekday(dt) = 7 Then .Rows(Cell).EntireRow.Delete 'If the time is before 9:30am or after 4pm, delete the row. ElseIf CInt(Hour(.Cells(Cell, 2)) & Minute(.Cells(Cell, 2))) < 930 Or _ CInt(Hour(.Cells(Cell, 2)) & Minute(.Cells(Cell, 2))) > 1600 Then .Rows(Cell).EntireRow.Delete End If Next Cell End With MsgBox "Done!" 

Vous pouvez essayer de vérifier la valeur par rapport à l' time actuelle:

  'If the time is before 9:30am or after 4pm, delete the row. ElseIf .Cells(Cell, 2) - Int(.Cells(Cell, 2)) < CDate("09:30:00") Or _ .Cells(Cell, 2) - Int (.Cells(Cell, 2)) > CDate("16:00:01") Then .Rows(Cell).EntireRow.Delete 

Notez que la limite supérieure 16:00:01 évite une erreur d'évaluation de la limite (probablement due à l'arrondissement) à 16:00:00 .

À la place d'utiliser

 CInt(Hour(.Cells(Cell, 2)) & Minute(.Cells(Cell, 2))) 

utilisation

 100*Hour(.Cells(Cell, 2)) + Minute(.Cells(Cell, 2)) 

Vous frappez votre problème, car, par exemple, 11:08 est converti en 11 heures et 8 minutes, ce qui, lorsqu'il est concatiné set dans votre code, donne 118 (ce qui correspond à l'état de suppression de less de 930). La version révisée (non testée) devrait la convertir en 1108 et éviter de rencontrer la condition de suppression.