Masquer lignes vides via cellules sélection

Résolu/Fermé
el-doyon Messages postés 42 Date d'inscription mardi 13 octobre 2009 Statut Membre Dernière intervention 3 février 2017 - 1 nov. 2009 à 19:33
 el-doyon - 2 nov. 2009 à 15:47
Bonjour,
dans un tableau j'ai 6 cellules de sélection via listes déroulantes ; cellules sur la même lignes de C11 à H11 qui entraînent l'apparition progressive d'info dans les cellules de la ligne 16 à 68.
Mon problème c'est que, selon le cas, seulement deux ou trois cellules de sélection (donc de C11 àH11) sont utilisées donc des lignes vides se créer forcément.
J'aimerais donc savoir si quelqu'un connait suffisamment les macros pour me proposer une solution qui ferait en sorte que les cellules vides seraient masquer pour chacune des cellules de sélection (de C11 à H11)
voici un lien vers mon exemple :
http://www.cijoint.fr/cjlink.php?file=cj200911/cijX030iAJ.xls

pour un autre fichier, gbinforme m'avait proposé cette solution qui marchait très bien (elle cachait les lignes vides associés aux cellules de sel A1 et A14), j'ai essayé de l'adapter avec mon cas précis mais je n'y arrive pas. je vous la donne si ça peut servir comme point de départ.
merci d'avance.

Private Sub Worksheet_Change(ByVal sel As Range)
If Not Intersect(Union([A1], [A14]), sel) Is Nothing Then
Dim col As Integer
Dim lig As Long
For lig = Cells.SpecialCells(xlCellTypeLastCell).Row To 2 Step -1
For col = Rows(lig).SpecialCells(xlCellTypeLastCell).Column To 1 Step -1
If IsError(Cells(lig, col).Value) Then Exit For
If Cells(lig, col).Value > 0 Then Exit For
Next col
If col = 1 Then
Rows(lig).Hidden = True
Else
Rows(lig).Hidden = False
End If
Next lig
End If
End Sub
A voir également:

1 réponse

pilas31 Messages postés 1825 Date d'inscription vendredi 5 septembre 2008 Statut Contributeur Dernière intervention 24 avril 2020 643
2 nov. 2009 à 14:51
Bonjour,

Voila une petite adaptation qui doit mieux fonctionner.

Private Sub Worksheet_Change(ByVal sel As Range)
Dim col As Integer
Dim lig As Long
Application.ScreenUpdating = False
If Not Intersect(Range("C11:H11"), sel) Is Nothing Then
    Cells.Select
    Selection.EntireRow.Hidden = False
    For lig = Cells.SpecialCells(xlCellTypeLastCell).Row To 16 Step -1
        For col = Rows(lig).SpecialCells(xlCellTypeLastCell).Column To 1 Step -1
            If IsError(Cells(lig, col).Value) Then Exit For
            If Cells(lig, col).Value <> "" And Cells(lig, col).Value <> " " Then Exit For
        Next col
        If col = 0 Then
            Rows(lig).Hidden = True
        Else
            Rows(lig).Hidden = False
        End If
    Next lig
End If
sel.Select
Application.ScreenUpdating = True
End Sub


Quelques explications :

1/ on teste si c'est bien une valeur entre C11 et H11 qui est modifiée
2/ les lignes cachées sont celles qui ne contiennent que des cellules vides ou avec un espace (car certaines formules mettent un espace)
3/ le xlCellTypeLastCell donne la dernière ligne affichée (il me semble) d'ou la nécéssité de tout afficher avant
4/ Pour éviter les affichages "indésirables" pendant les boucles j'ai mis un screenupdating

A+
2
Génial Pilas31, ça fonctionne vite et bien, c'est exactement ce que je voulais, un grand merci à toi.
A+,
el-doyon
0