Rapport de message :*
 

Re: Afficher/Masquer Lignes et colonnes

Titre du sujet : Re: Afficher/Masquer Lignes et colonnes
par myDearFriend! le 02/12/2009 21:12:01

Bonsoir lours, le Forum,

En pièce jointe, ton fichier modifié en conséquence.

J'ai tout d'abord rétabli la propriété BoundColumn du contrôle ListBoxA sur la valeur 2 (et non 3 comme tu l'avais modifiée). Pour info, la propriété Value du contrôle tire sa valeur dans la colonne dont le numéro est indiqué en BoundColumn. En mettant 3, tu fausses le retour de valeur attendu dans le code (= plantage assuré).

Ensuite, j'ai ajouté 2 lignes dans le code ci-dessous (j'ai repéré les lignes ajoutées par un commentaire "<<< AJOUT LIGNE >>>") :

Option Explicit
' Décembre 2009 : myDearFriend! - www.mdf-xlpages.com

Private Sub UserForm_Initialize()
  Dim cell As Range
  Dim MyArray(1, 6)
  Dim i As Byte
  'Affiche toutes les lignes
  Rows("6:38").EntireRow.Hidden = False
  'Affiche toutes les colonnes
  Range("B:M").EntireColumn.Hidden = False
  ' Pour les colonnes noms
    With ListBoxA
      For Each cell In Rows(4).SpecialCells(xlCellTypeConstants, 3)
        .AddItem cell.Text                     '1ère col : les prénoms
        .List(.ListCount - 1, 1) = cell.Column '2ème col : les nos de colonnes correspondantes
        .List(.ListCount - 1, 2) = "Affiché"    '<<< AJOUT LIGNE >>> 3ème col : le statut masqué/affiché
      Next cell
    .ListIndex = 0
    End With
  'Pour les mois
  ListBoxM.ListIndex = 0
End Sub

Private Sub ListBoxA_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
  'masque ou affiche la colonne cible et la colonne à sa droite
  With Columns(Val(ListBoxA.Value))
      .Hidden = Not .Hidden
      .Offset(0, 1).Hidden = .Hidden
      ListBoxA.List(ListBoxA.ListIndex, 2) = IIf(.Hidden, "Masqué", "Affiché")  '<<< AJOUT LIGNE >>>
  End With
  ActiveWindow.ScrollColumn = 1
End Sub

Private Sub Cmdretour_Click()
  Unload Me
End Sub

Private Sub CmdM1_Click()
Dim C As Range
    'Trouve la cellule correspondant au mois sélectionné
    Set C = ActiveSheet.Range("A6:A39").Find(ListBoxM.Text, LookIn:=xlFormulas)
    If C Is Nothing Then Exit Sub
    'Affiche toutes les lignes
    Rows("6:38").EntireRow.Hidden = False
    'Masque les lignes précédant le mois choisi
    If C.Row > 8 Then
        Range(Cells(6, 1), Cells(C.Row - 1, 1)).EntireRow.Hidden = True
    End If
End Sub
Cordialement,