Masquer lignes vides via cellules sélection

Résolu
el-doyon Messages postés 43 Statut Membre -  
 el-doyon -
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
Configuration: windows XP

1 réponse

  1. pilas31 Messages postés 1878 Statut Contributeur 648
     
    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
    1. el-doyon
       
      Génial Pilas31, ça fonctionne vite et bien, c'est exactement ce que je voulais, un grand merci à toi.
      A+,
      el-doyon
      0