Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2019 Masquer lignes entièrement vide

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

  • Test_masquer ligne entierement vides.xlsm
    73.7 KB · Affichages: 8
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

soan

XLDnaute Barbatruc
Inactif
@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_CC

XLDnaute Accro
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.
 

soan

XLDnaute Barbatruc
Inactif
@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
 

ALE37

XLDnaute Junior
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 ?
 

soan

XLDnaute Barbatruc
Inactif
hélas, je n'ai pas trouvé d'autre solution que celle que j'ai déjà proposée.

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

soan
 

ALE37

XLDnaute Junior
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 !
 

soan

XLDnaute Barbatruc
Inactif
Bonjour ALE37,



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

  • Test_masquer ligne entierement vides.xlsm
    77.5 KB · Affichages: 3

soan

XLDnaute Barbatruc
Inactif
@ALE37

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



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

  • Test_masquer ligne entierement vides.xlsm
    79.1 KB · Affichages: 1

ALE37

XLDnaute Junior
Bonjour Soan, extrêmement rapide en effet! C'est top. Merci!!!
 

Discussions similaires

Réponses
30
Affichages
2 K
Réponses
2
Affichages
1 K
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…