XL 2019 Masquer lignes entièrement vide

  • Initiateur de la discussion Initiateur de la discussion ALE37
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

ALE37

XLDnaute Junior
Bonjour le forum,

Je souhaiterai pouvoir masquer (et démasquer) toutes les lignes entièrement vides (zéro, formules ou pas) dans cette matrice Excel.
Dans l'exemple de la ligne 14 à 159. J'ai fouillé un peu partout dans le forum mais je n'ai pas trouvé mon bonheur.
Quelqu'un pourrait il me proposer une solution ?
D'avance merci pour votre aide.
 

Pièces jointes

Solution
Je reviens sur le sujet. Finalement un collègue m'a proposé la solution suivante en VBA, extrêmement rapide.
Ci joint le code pour ceux qui seraient intéressés.

Sub masqueligne()
Dim i As Integer, derLig As Long
derLig = Cells(Rows.Count, 1).End(xlUp).Row 'ou 1 = le numéro de la colonne à tester pour savoir quelle est la deniere ligne utilisée
For i = 11 To derLig 'alors si on veux faire commencer l'opération à partir d'une ligne autre que 1 et on change le nombre
If Cells(i, 50) = "" Or Cells(i, 50) = 0 Then '(on teste sur la colonne 50 dans l'exemple, soit AX, car il s'agit d'un cumul, ligne i)
Cells(i, 11).EntireRow.Hidden = True
Else: Cells(i, 11).EntireRow.Hidden = False
End If
Next i
End Sub
@Deadpool

* c'est pas une function, c'est une sub ! 😉 et il s'agit de la sub masqueligne()

* effectivement, j'avais mis Application.ScreenUpdating = 0 (en 1ère ligne)
c'est idem que : Application.ScreenUpdating = False

* et quand ça quitte la sub : oui, ça se repositionne automatiquement à True
➯ inutile de mettre : Application.ScreenUpdating = -1

* je pense que c'est fait implicitement par l'instruction End Sub ; mais pas seulement : si y'a une sortie de la sub par Exit Sub ça doit sûrement faire pareil, que ce Exit Sub soit seul ou dans : If .. Then Exit Sub

soan
 
@Deadpool

* c'est pas une function, c'est une sub ! 😉 et il s'agit de la sub masqueligne()

* effectivement, j'avais mis Application.ScreenUpdating = 0 (en 1ère ligne)
c'est idem que : Application.ScreenUpdating = False

* et quand ça quitte la sub : oui, ça se repositionne automatiquement à True
➯ inutile de mettre : Application.ScreenUpdating = -1

* je pense que c'est fait implicitement par l'instruction End Sub ; mais pas seulement : si y'a une sortie de la sub par Exit Sub ça doit sûrement faire pareil, que ce Exit Sub soit seul ou dans : If .. Then Exit Sub

soan
Merci pour l'info ... car vu que c'est un paramètre de "Application" j'avais un doute sur le fait qu'il revienne tout seul à sa valeur True.
 
@Deadpool

si tu veux, je peux te faire ce parallèle :

dans un programme en BASIC, quand il y a l'instruction END, tu te dis : END = FIN, donc ça termine le programme ; c'est exact, n'est-ce pas ? mais en réalité, ça ne fait pas que ça ! car s'il y avait eu des fichiers ouverts, END les ferme avant de quitter le programme (pour retourner au DOS) ; et ça fait aussi plusieurs autres choses, comme par exemple libérer la mémoire (la RAM).

en VBA, le .ScreenUpdating est dépendant de Application, oui ; donc dans le même style qu'au paragraphe ci-dessus, le End Sub doit exécuter implicitement une instruction Application.ScreenUpdating = True (la valeur numérique de True est -1).​

soan
 
Bonjour ALE37,

Image.jpg


j'ai utilisé une autre méthode pour masquer les lignes.
ça devrait être plus rapide ; à toi de tester. 😉



code VBA (14 lignes) :

VB:
Option Explicit

Sub masqueligne()
  Dim plg As Range, derLig&, i%: Application.ScreenUpdating = 0
  derLig = Cells(Rows.Count, 1).End(3).Row 'dernière ligne, selon colonne A
  For i = 11 To derLig 'de la ligne 11 à la dernière ligne
    If Cells(i, "AX").Value = 0 Then
      If plg Is Nothing Then Set plg = Rows(i) _
        Else Set plg = Union(plg, Rows(i))
    End If
  Next i
  If Not plg Is Nothing Then plg.EntireRow.Hidden = -1
End Sub

soan
 

Pièces jointes

@ALE37

Lis d'abord mon post précédent. 🙂

Image.jpg


autre version du fichier précédent, avec un seul
bouton pour masquer / démasquer les lignes.



code VBA (18 lignes) :

VB:
Option Explicit

Sub masqueligne()
  Dim plg As Range, dlg&, lg1&, i%: Application.ScreenUpdating = 0
  dlg = Cells(Rows.Count, 1).End(3).Row 'dernière ligne, selon colonne A
  For i = 11 To dlg 'de la ligne 11 à la dernière ligne
    If Cells(i, "AX").Value = 0 Then
      If plg Is Nothing Then
        Set plg = Rows(i): lg1 = i
      Else
        Set plg = Union(plg, Rows(i))
      End If
    End If
  Next i
  If Not plg Is Nothing Then _
    plg.EntireRow.Hidden = Not Rows(lg1).Hidden
End Sub

soan
 

Pièces jointes

Bonjour ALE37,

Regarde la pièce jointe 1141452

j'ai utilisé une autre méthode pour masquer les lignes.
ça devrait être plus rapide ; à toi de tester. 😉



code VBA (14 lignes) :

VB:
Option Explicit

Sub masqueligne()
  Dim plg As Range, derLig&, i%: Application.ScreenUpdating = 0
  derLig = Cells(Rows.Count, 1).End(3).Row 'dernière ligne, selon colonne A
  For i = 11 To derLig 'de la ligne 11 à la dernière ligne
    If Cells(i, "AX").Value = 0 Then
      If plg Is Nothing Then Set plg = Rows(i) _
        Else Set plg = Union(plg, Rows(i))
    End If
  Next i
  If Not plg Is Nothing Then plg.EntireRow.Hidden = -1
End Sub

soan
Bonjour Soan, extrêmement rapide en effet! C'est top. Merci!!!
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
30
Affichages
2 K
Réponses
8
Affichages
870
Réponses
2
Affichages
1 K
Réponses
1
Affichages
1 K
Réponses
3
Affichages
741
Retour