XL 2016 Macro permettant de masquer des lignes si pas de valeur dans une plage

arnaudguerin

XLDnaute Nouveau
Bonjour à tous,

j'ai besoin de votre aide afin de créer un bouton avec une macro permettant de masquer des lignes si aucune valeur n'apparait dans une plage donnée.
Ci-joint mon fichier pour exemple.
Merci beaucoup pour votre aide

Cordialement

Arnaud
 

Pièces jointes

  • Classeur pour Exemple.xlsm
    131.6 KB · Affichages: 13
Solution
C'est ici que cela ce passe :

Dans cette formule :
A est le point de départ des lignes à masquer
15 correspond au (nombre de ligne de ton sous-détail
B correspond au nombre total de ligne à masquer

Donc B = A (Numéro de ligne départ des lignes à masquer) + 15 (nombre de ligne de ton sous-détail)

Contrainte TOUTES LES LIGNES du sous-détail doivent avoir le même nombre de lignes

Si tu mets 25 lignes remplace le 15 par 25
==> B=A + 25

@Phil69970

Phil69970

XLDnaute Barbatruc
Bonjour Arnaud
Tu peux regarder ce code.

VB:
'https://forum.excel-pratique.com/excel/cacher-ou-afficher-diverses-lignes-d-une-plage-86188#p499379
'Code de MFerrand.
Sub MasquerLignes()
Dim lgn, i%

lgn = Array(17, 20, 28, 31, "36:292") '<== les lignes à masquer

Application.ScreenUpdating = False
With Worksheets("Sous-Détails de Prix")
    .Rows.Hidden = False
    For i = 0 To UBound(lgn)
        .Rows(lgn(i)).Hidden = True
    Next i
End With
End Sub

@Phil69970
 

arnaudguerin

XLDnaute Nouveau
Bonjour Phil et merci pour ton aide.

Le code ne marche que pour les lignes 17,20,28,31 et masque tous les sous-détails alors que je cherche à masquer les lignes seulement si aucune valeur n'est rentrée dans la plage E16:E31 et également les sous-détails correspondant mais pas l'ensemble.
En gros, si je rentre des valeurs dans la plage E16:E31, je souhaite masquer les lignes où il n'y a pas de valeur ainsi que les numéros de sous-détails correspondant.
J'aimerai attribuer ce code à un bouton qui masque les lignes non renseignées par la plage E16:E31 et un autre qui affiche tout.
Je ne sais pas si c'est très clair :)
Voir mes commentaires en rouge dans la feuille pour être plus concret
Merci
 

Phil69970

XLDnaute Barbatruc

Pièces jointes

  • Exemple V2.xlsm
    135.6 KB · Affichages: 9

arnaudguerin

XLDnaute Nouveau
Bonjour Phil
C'est exactement ça :)

Est-il possible d'améliorer une chose ?
Je m'aperçois que la macro prend en charge les lignes de 16 à 31, si je souhaite insérer une autre ligne au milieu (copier et insérer) comme dans mon exemple en rouge le N° 2000 alors la dernière ligne avec le N°16 ne sera pas prise en compte. C'est possible de faire une plage de valeur B16:B31 à la place ?
voir le fichier comme exemple.
Enfin étant novice dans le domaine, peux-tu m'expliquer comment faire pour copier tes boutons et ta macro dans un autre fichier.

En tous cas, félicitations car tu as très bien cerné ma demande.
Merci beaucoup

Arnaud
 

Pièces jointes

  • Exemple V3.xlsm
    139.2 KB · Affichages: 4

arnaudguerin

XLDnaute Nouveau
Merci Phil pour ton retour,

si je souhaite augmenter le nombre de ligne de mes sous-détails à 25 par exemple au lieu de 15, je dois modifier quelle partie du code ?
Je suis désolé mais c'est vraiment du chinois pour moi ;(
Merci

Private Sub CmdAfficherLignes_Click()
Application.ScreenUpdating = False
Worksheets("Sous-Détails de Prix").Rows.Hidden = False
End Sub

Sub CmdMasquerLignes_Click()
Application.ScreenUpdating = False

Dim VarSousDetail%, i%, j%, A%, B%, Derlig%
Dim Cel As Range

Derlig = Range("B15").End(xlDown).Row
For i = 16 To Derlig
For Each Cel In Range("E" & i)
VarSousDetail = Range("B" & i).Value
If Cel.Value = "" Then
Rows(i).EntireRow.Hidden = True
A = (Derlig + 6) + ((VarSousDetail - 1) * 16)
B = A + 15
For j = A To B
Rows(j).EntireRow.Hidden = True
A = A + 1
Next j
End If
Next Cel
Next i
End Sub
 

Phil69970

XLDnaute Barbatruc
C'est ici que cela ce passe :

Dans cette formule :
A est le point de départ des lignes à masquer
15 correspond au (nombre de ligne de ton sous-détail
B correspond au nombre total de ligne à masquer

Donc B = A (Numéro de ligne départ des lignes à masquer) + 15 (nombre de ligne de ton sous-détail)

Contrainte TOUTES LES LIGNES du sous-détail doivent avoir le même nombre de lignes

Si tu mets 25 lignes remplace le 15 par 25
==> B=A + 25

@Phil69970
 

Discussions similaires

Statistiques des forums

Discussions
312 108
Messages
2 085 361
Membres
102 874
dernier inscrit
Petro2611