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 !

A

ALE37

Guest
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
A
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
 
Merci Soan et Deadpool pour ces compléments d’information mais l’exécution reste toutefois lente. Peut on l’améliorer ? Le nombre important d´onglets dans mon classeur à t il une incidence ?
 
hélas, je n'ai pas trouvé d'autre solution que celle déjà proposée. 😢

(pour le nombre d'onglets, je ne sais pas ; peut-être plutôt les nombreuses lignes ?)

soan
Pas de soucis ! C’est super sympa d’avoir pris le temps de m’aider. Aurais-tu la possibilité de me donner un code qui permettrait de masquer et démasquer ? d’avance merci !
 
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
3 K
Réponses
8
Affichages
1 K
V
  • Question Question
Réponses
2
Affichages
2 K
C
  • Question Question
Réponses
0
Affichages
597
Camille.98
C
T
Réponses
4
Affichages
820
twenchany
T
A
  • Question Question
Réponses
2
Affichages
666
angelis70
A
Retour