Macro masquer des lignes

Bonjour,

Avec l'aide des contributeurs de ce forum, j'ai mis en place une macro qui permet de masquer les lignes d'un tableur si le contenu des cellules d'une certaine colonne est égal à 0.

Mais, mon tableur contenant de nombreuses lignes, j'aimerais accélérer un peu l'exécution de cette tâche.

Il s'agit d'un tableur contenant des paragraphes (pour faire des devis).

Certains de ces paragraphes sont assez rarement utilisés, aussi aimerais-je pouvoir les masquer par défaut.

Jusque là, je sais faire.

Mais ce que je n'arrive pas à faire, c'est modifier la macro de départ pour qu'elle cesse de scruter le contenu des cellules des paragraphes masqués, faute de quoi le processus de masquage prend tout autant de temps, que les paragraphes soient déjà masqués ou pas.

Actuellement, la macro est rédigée ainsi :

Sub MasquerLignesVides()

Dim Cel As Range

For Each Cel In Range("P22:P111")

If Cel.Value <> "" And Cel.Value = 0 Then

Cel.EntireRow.Hidden = True

End If

Next

End Sub

J'ai ajouté de petits boutons permettant de masquer d'un seul coup (ou au contraire afficher si besoin) la dizaine de lignes de chaque paragraphe peu utilisé. Par exemple :

Sub masquer_80_93()

Rows("80:93").EntireRow.Hidden = True

Range("L64").Select

End Sub

Sub montrer_80_93()

Rows("80:93").EntireRow.Hidden = False

Range("L64").Select

End Sub

Dans la toute 1ère macro ci-dessus, je comprends que :

For Each Cel In Range("P22:P111")

If Cel.Value <> "" And Cel.Value = 0 Then

Cel.EntireRow.Hidden = True

... demande à excel de regarder le contenu de chaque cellule de la colonne P de la ligne 22 à la ligne 111.

Ce que je voudrais, donc, c'est modifier ceci pour que désormais ça dise quelque chose comme :

Pour chaque cellule de la colonne P contenue dans une ligne non masquée, de la ligne 22 à 111, si le contenu est égal à zéro, alors masquer la ligne (sinon ignorer, puisque de toute façon la ligne est DEJA masquée).

Comment traduire ça en langage macro ?

Merci d'avance pour votre aide, si toutefois ceci est possible bien sûr.

Flo

Bonjour Flodariege, bonjour le forum,

Essaie avec ce bout de code qui devrait aller plus vite :

Sub MasquerLignesVides2()
Dim TV As Variant 'déclare la variable TV (Tableau de Valeurs)
Dim PL As Range 'déclare la variable PL (Plage de Lignes)
Dim I As Byte 'déclare la variable I (Incrément)

Set PL = Range("A1") 'initialise la plage PL (une seule cellule)
TV = Range("P22:P111") 'définit le tableau de valeurs TV
For I = 1 To UBound(TV, 1) 'boucle sur toutes les lignes I du tableau de valeurs TV
    If TV(I, 1) <> "" And TV(I, 1) = 0 Then 'condition : si la valeur est non vide et contient zéro
        'redéfinit la plage PL (la ligne I + 21 si PL ne contient qu'une seule cellule, sinon l'union de PL et de la ligne I + 21)
        Set PL = IIf(PL.Cells.Count = 1, Rows(I + 21), Application.Union(PL, Rows(I + 21)))
    End If 'fin de la condition
Next I 'prochaine ligne de la boucle
PL.EntireRow.Hidden = True 'masque les lignes de la plage PL
End Sub

MERCIIIIIIIIIIIIIIIIIII !

Fabuleux ! Tu viens de me faire gagner un temps précieux, et d'améliorer considérablement le confort de travail !

merci, merci !!

Bon WE.

Flo

Rechercher des sujets similaires à "macro masquer lignes"