Un macro trops lent

Résolu
Bonjour,

J'ai un macro qui est supposé de chercher une valeur dans une colonne (D2:D4555)
mais cela prend une éternité pour être exécuter, j'ai essayé sans sucés d'ajouter "usedrange" pour éviter que excel cherche tous les cellules jusqu'à D4555 je veux qu'il chercher seulement les cellules utilisé puisque la feuille n'est pas était complétée à 100%

voici le macro :

Sub hidecrows()
Dim tempo As Date
Dim rCell As Range

Sheets("checks-sheet").Select

tempo = InputBox(Prompt:="Filter Checks", Title:="Choose a Date", Default:="Enter the date here")

For Each rCell In Range("D2:D4555")
If Not rCell.Value = tempo Then
Rows(rCell.Row).Hidden = True
End If
Next

End Sub

J'ai besoin d'aide SVP, avez vous une idée ?
Un grand merci en avance!

5 réponses

  1. Contributeur
    Salut le forum

    Hamouchka, essaye comme ceci

    Sub hidecrows() 
    Dim tempo As Date 
    Dim firstaddress As String 
    Dim c As Range 
    
    tempo = InputBox(Prompt:="Filter Checks", Title:="Choose a Date", Default:="Enter the date here") 
    
    With Sheets("checks-sheet").Range("D2:D4555") 
        Set c = .Find(tempo, LookIn:=xlValues) 
        If Not c Is Nothing Then 
            firstaddress = c.Address 
            Do 
                 
                Set c = .FindNext(c) 
                c.EntireRow.Hidden = True 
            Loop While Not c Is Nothing And c.Address <> firstaddress 
        End If 
    End With 
    
    End Sub 
    

    Mytå
    0
    1. Merci beaucoup!

      C'est excellent sauf que l'autre macro est supposé de cacher tout se qui n'est pas égale à "tempo" ton macro fais l'inverse! comment je peux le corriger ?

      encore Merci!
      0
      1. Contributeur
        Bonsoir,

        Tu pourrais utiliser le filtre automatique :
        Range("D1:D4555").AutoFilter Field:=1, Criteria1:=CDate(tempo)
        eric
        0
        1. J'ai pas le droit d'utiliser les fonctions d'excel comme autofilter....

          merci
          0
          1. C'est régler les amis voici ce j'ai fait :

            Sheets("checks-sheet").Select
            'selectionner la plage utilisée seulement
            Range(Cells(2, 4), Cells(Rows.Count, 4).End(xlUp)).Select

            'Boucle qui recherche la date de ce jours dans la plage séléctionnée avant
            For Each rCell In Selection
            If Not rCell.Value = Date Then '=Date pour comparer avec la date de jours
            Rows(rCell.Row).Hidden = True
            End If
            Next

            comme ca il prend juste la selection qui contien qlq chose et c beaucoup pluss rapide

            Merci Beaucoup!!!!
            0