Boucle rapide en VBA Excel 2010

Bonjour à tous,

Je suis débutant et j'aimerai faire une boucle pour masquer les lignes. J'ai testé ce code qui permet de tester si la valeur de la cellule (ligne i,colonne 4) est vide.

Si c'est le cas, on masque la ligne mais je n'arrive pas à accélérer la vitesse du traitement qui est de 20 sec. Comment je peux faire pour l'accélérer et comment faire si on ne connaît pas la valeur de de fin de la colonne.

Merci d'avance de vos réponse

Bonne journée

Private Sub Worksheet_Change(ByVal Target As Range)
Dim Debut As Integer
Dim fin As Integer
Dim colNb As Integer

Debut = 7
fin = 150
colNb = 4
    For i = Debut To fin
        If Cells(i, colNb).Value = "" Then
            Rows(i).Hidden = True
            Cells(i, colNb).EntireRow.Hidden = True
            Debut = i + 1
        Else
            Rows(i).Hidden = False
            Cells(i, colNb).EntireRow.Hidden = False
            Debut = i + 1
        End If
    Next i
End Sub

Bonjour,

Un essai en passant par un tableau VBA, le traitement est plus rapide :

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim Debut As Integer
    Dim fin As Integer
    Dim colNb As Integer
    Dim tablo, Plage As Range

    Debut = 7
    fin = 150
    colNb = 4
    ' on affiche toutes les lignes
    Range(Cells(Debut, colNb), Cells(fin, colNb)).EntireRow.Hidden = False
    ' on récupère la colonne de données sous VBA = traitement d ela boucle plus rapide car pas d'accès à la feuille pour chaque cellule
    tablo = Range(Cells(Debut, colNb), Cells(fin, colNb))
    ' on boucle sur ce tableau en "recalant" les valeurs de début et de fin
    For i = Debut - 6 To fin - 6
        ' on test si la valeur est égale à rien
        If tablo(i, 1) = "" Then
            ' si le range "Plage est non vide"
            If Not Plage Is Nothing Then
                ' on ajoute cette cellule à la plage
                Set Plage = Union(Plage, Cells(i + 6, colNb))
            Else
                ' sinon la plage est égale à la première cellule dont le test est vrai
                Set Plage = Cells(i + 6, colNb)
            End If
        End If
    Next i
    ' si la plage est différente de rien, alors on masque les lignes
    If Not Plage Is Nothing Then Plage.EntireRow.Hidden = True
End Sub

@ bientôt

LouReeD

bonjour LouReeD(), xavier T,

utiliser un filtre, cela ne fonctionne pas ? cela est immédiatement

Bonjour,

Merci LouReed pour cette solution.

Bonne journée

Merci pour ce retour !

BsAlv bonjour, je suis resté "vieux jeu", vu que nous sommes sur un forum Excel VBA ! Et partant du principe que l'auteur de la question est parti sur un code VBA... Mais il est vrai que de lancer un filtre cela est rapide également !

Bonne fin de journée @ vous.

@ bientôt

LouReeD

Rechercher des sujets similaires à "boucle rapide vba 2010"