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
Bonjour Ale,
Une solution simple parmi d'autres est de mettre en dernière colonne (AY) un filtre qui permet de masquer les lignes. Sur chaque cellule est noté "Utilisée" si la ligne est non vide. donc si on filtre sur "Utilisée" n'apparaissent que les bonnes lignes.
Bonjour Sylvanu, effectivement je n'y avais pas pensé! C'est une solution simple. Je cherchais une possibilité en VBA à l'origine. Dans l'immédiat je vais recourir à cette solution. Encore merci!
 
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
 
Bonsoir ALE37, sylvanu,

dans le code VBA de ton post #4 il y a :

Else: Cells(i, 11).EntireRow.Hidden = False

attention au caractère : qui se met parfois automatiquement juste à droite du Else !

car dans ce cas, ça signifie : « sinon ne rien faire du tout » !

et ce qui est à droite Cells(i, 11).EntireRow.Hidden = False

est indépendant du If donc exécuté de façon inconditionnelle !

mais si le code VBA te donne toujours correctement les résultats attendus,
c'est que le : malencontreux est seulement dans ton post #4,
pas dans ton vrai code VBA ! 🍀

soan
 
Dernière édition:
Bonsoir Soan, merci pour ces remarques. Je vais vérifier mais il s’agit probablement d’un problème de retranscription lors de mon copier coller. La macro fonctionne bien mais je la trouve lente pour masquer les lignes. Existe t il un code pour accélérer cette procédure ?
 
Bonjour ALE37, sylvanu,

change ainsi la ligne du Dim :

Dim derLig&, i%: Application.ScreenUpdating = 0

la même chose avec balises de code :

Dim derLig&, i%: Application.ScreenUpdating = 0

c'est inutile d'ajouter Application.ScreenUpdating = -1 car
c'est fait automatiquement avant la sortie de la sub.

remarque : 0 : idem que False ; et -1 : idem que True

soan
 
Dernière édition:
Bonjour Soan,
Ce n'est pas tout à fait vrai.
C'est le cas avec les versions VBA actuelles, mais MS précise bien :
VB:
Une fois l'exécution de la macro terminée, songez à redéfinir la propriété ScreenUpdating sur True.
Donc même si on le fait régulièrement, il est quand même bon de le préciser à quelqu'un qui ne connait pas.
 
@sylvanu

moi, je n'ai jamais eu de problème en faisant comme je l'ai décrit ; mais bien sûr, s'il y a un MsgBox avant la sortie de sub et qu'on veut voir des résultats à jour en arrière-plan de la boîte de dialogue, alors là oui, il faut mettre Application.ScreenUpdating = True !

c'est pour ça que je n'ai jamais compris la recommandation de Microsoft que tu as indiquée ! quelle en est donc l'utilité ? vu que c'est dans un manuel de Microsoft qu'il était indiqué ce que j'ai écrit : mise à True automatique avant la sortie de la sub ; en fait, je crois que Microsoft a mis ça par prudence, envers ceux qui ne connaissent pas bien le VBA : ça évite que des débutants se demandent pourquoi des résultats en arrière-plan d'une boîte de dialogue MsgBox ne sont pas à jour s'ils ont omis de mettre avant la mise à True en question ; maintenant, chacun fait comme il préfère ! 🙂



autre exemple : Microsoft recommande avec raison de sauvegarder le Registre Windows avant toute modification ; mais quand tu es absolument sûr et certain de la modification que tu vas faire, c'est inutile de sauvegarder le Registre ! c'est juste une précaution que Microsoft prend pour se prémunir des fausses manips d'utilisateurs "béotiens". 😜​

soan
 
Dernière édition:
Bonjour ALE37, sylvanu,

change ainsi la ligne du Dim :

Dim derLig&, i%: Application.ScreenUpdating = 0

la même chose avec balises de code :

Dim derLig&, i%: Application.ScreenUpdating = 0

c'est inutile d'ajouter Application.ScreenUpdating = -1 car
c'est fait automatiquement avant la sortie de la sub.

remarque : 0 : idem que False ; et -1 : idem que True

soan
Oui j’avais essayé déjà avec Screen Updating mais il y avait peu de changement dans le rafraîchissement. Je vais essayer la méthode proposée et je te redis ça !
 
Bonsoir ALE37, sylvanu,

dans le code VBA de ton post #4 il y a :

Else: Cells(i, 11).EntireRow.Hidden = False

attention au caractère : qui se met parfois automatiquement juste à droite du Else !

car dans ce cas, ça signifie : « sinon ne rien faire du tout » !

et ce qui est à droite Cells(i, 11).EntireRow.Hidden = False

est indépendant du If donc exécuté de façon inconditionnelle !

mais si le code VBA te donne toujours correctement les résultats attendus,
c'est que le : malencontreux est seulement dans ton post #4,
pas dans ton vrai code VBA ! 🍀

soan
En effet ce n'est pas une erreur de saisie...A priori celà me donne quand même les bons résultats mais merci pour l'info!
 
@ALE37

ton fichier en retour. 🙂

j'ai bien optimisé ton code VBA, et j'ai testé la macro ; c'est OK ! 😊

code VBA (10 lignes) :

VB:
Option Explicit

Sub masqueligne()
  Dim 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
    Rows(i).Hidden = Cells(i, "AX") = 0
  Next i
End Sub

merci de me donner ton avis. 😉

soan
 

Pièces jointes

- 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
871
Réponses
2
Affichages
1 K
Réponses
1
Affichages
1 K
Réponses
3
Affichages
741
Retour