Afficher/cacher onglet avec userform

Résolu
Camillegbg Messages postés 38 Statut Membre -  
Camillegbg Messages postés 38 Statut Membre -
Salut,

je cherche à utiliser un userform pour faciliter l'affichage des onglets de mon fichier. Certains de ces onglets sont nécessaires à l'utilisateur mais d'autres ne sont nécessaires que pour les calculs.
Je suis partie de cette macro en VBA :
http://vbacentral.blogspot.com/2009/11/excel-hidingunhiding-sheets-using-user.html

Pour le moment j'arrive à faire afficher le userform mais les listbox sont vides.
Le problème doit venir de l'initialisation du userform, mais je ne sais pas de quoi exactement. A cette étape, les onglets apparents sont rangés dans la listbox de gauche et les cachés dans celle de droite.
'*** Initialize dialog box with Visible and Hidden sheets list

Private Sub UserForm_Initialize()

Dim sht As Variant
Dim shts As Sheets

For Each sht In ActiveWorkbook.Sheets
If sht.Visible Then
ListBox1.AddItem sht.Name
Else: ListBox2.AddItem sht.Name
End If
Next sht
End Sub

Est ce que quelqu'un sait pourquoi ça ne marche pas ?

Merci pour votre aide

2 réponses

  1. pilas31 Messages postés 1878 Statut Contributeur 648
     
    Bonjour,

    Je continue donc la discussion ici .

    Une idée dans l'Userform, il faut bien vérifier que les deux listbox s'appellent bien ListBox1 et ListBox2 (c'est la propriété Name)

    A+
    0
    1. Camillegbg Messages postés 38 Statut Membre 1
       
      Salut Pilas31,
      J'ai réussi à le faire marcher , le fichier est accessible ici : http://www.cijoint.fr/cjlink.php?file=cj201004/cijmor289C.xls

      Mais j'ai des petites questions auxquelles tu pourras peut-être m'apporter des réponses :
      1. je ne comprends pas pourquoi les boutons > et >> sont inversés... pourtant les macros sont bien telles quelles. les boutons < et << fonctionnent correctement.
      2. lorsque je choisis un onglet de la lite de gauche et clic sur >> , il passe alors à droite, mais tous les onglets en dessous de lui disparaisse. De même que lorsque plusieurs onglets sont dans la liste de droite, je sélectionne l'un d'entre eux et clic sur < , ceux en dessous de lui disparaisse. Il doit être nécessaire d'ajouter qlq part un refresh dans les boucles pour que l'userform affiche les onglets dans les bonnes colonnes...
      3. Il est indispensable d'exclure l'onglet Start , pour toujours avoir acces au bouton qui lance la macro. Je sais qu'on peut la lancer sans le bouton, mais l'idée est de se simplifier la vie et de rendre le tout ergonomique.

      J'ai ajouté un unload à la fin de la Commande HideUnhide pour fermer l'userform.

      Je te remercie pour tes réponses dans cette discussion, et dans la précedente également ! :)
      A +
      0
  2. pilas31 Messages postés 1878 Statut Contributeur 648
     
    Bonjour,

    Voila j'ai corrigé les erreurs dont tu parles.
    L'inversion était due tout simplement à l'inversion des macro associées.
    J'ai enlevé l'onglet Start
    J'ai corrigé les erreurs de programmation qui faisaient disparaitre les feuilles
    N'hésite pas si il y a encore des anomalies
    Voila code corrigé
    A+
    
    Private Sub UserForm_Initialize()
    
    Dim sht As Variant
    Dim shts As Sheets
    
    For Each sht In ActiveWorkbook.Sheets
        If sht.Name <> "Start" Then
            If sht.Visible Then
                ListBox1.AddItem sht.Name
            Else: ListBox2.AddItem sht.Name
            End If
        End If
    Next sht
    End Sub
    
    '*** Button to Hide all Visible sheets
    Private Sub MoveAllToRight_Click()
    'Add all
    For i = 0 To ListBox1.ListCount - 1
        ListBox2.AddItem ListBox1.List(i)
    Next i
    'Remove all
    For i = 0 To ListBox1.ListCount - 1
        ListBox1.RemoveItem (0)
    Next i
    
    End Sub
    
    '***Button to hide selected visible sheets
    Private Sub MoveSelectedToRight_Click()
    
    Dim CountVisibleSheets, LastSelection, j As Integer
    CountVisibleSheets = ListBox1.ListCount - 1
    
        
    'Add selected sheets to Hidden sheets listbox
    For i = 0 To CountVisibleSheets
    If ListBox1.Selected(i) Then
    ListBox2.AddItem ListBox1.List(i)
    End If
    Next i
    
    'Remove selected sheets from Visible sheets list
    j = 0
    Do Until j = ListBox1.ListCount
    If ListBox1.Selected(j) Then
        ListBox1.RemoveItem (j)
        LastSelection = j
        Exit Do
        j = j - 1
    End If
    j = j + 1
    Loop
    
    
    End Sub
    
    '*** Button to Unhide selected Hidden sheets
    Private Sub MoveSelectedToLeft_Click()
    Dim CountVisibleSheets, LastSelection As Integer
    CountVisibleSheets = ListBox2.ListCount - 1
    
    For i = 0 To CountVisibleSheets
        If ListBox2.Selected(i) Then
            ListBox1.AddItem ListBox2.List(i)
        End If
    Next i
    
    j = 0
    Do Until j = ListBox2.ListCount
        If ListBox2.Selected(j) Then
            ListBox2.RemoveItem (j)
            LastSelection = j
            Exit Do
        End If
        j = j + 1
    Loop
    
    End Sub
    
    '*** Button to Unhide all Hidden sheets
    Private Sub MoveAllToLeft_Click()
    Dim CountHiddenSheets As Integer
    CountHiddenSheets = ListBox2.ListCount - 1
    
    For i = 0 To CountHiddenSheets
        ListBox1.AddItem ListBox2.List(i)
    Next i
    For i = 0 To CountHiddenSheets
        ListBox2.RemoveItem (0)
    Next i
    End Sub
    
    '*** Cancel dialog button
    Private Sub CommandCancel_Click()
        Unload FormWorksheets
    End Sub
    
    '*** Submit selection for hiding and unhiding sheets
    Private Sub CommandHideUnhide_Click()
    
    For i = 0 To ListBox1.ListCount - 1
    ActiveWorkbook.Sheets(ListBox1.List(i)).Visible = True
    Next i
    
    For i = 0 To ListBox2.ListCount - 1
       If i = ActiveWorkbook.Sheets.Count - 1 Then
       MsgBox "At least one sheet should be visible"
       Exit For
       Else
       ActiveWorkbook.Sheets(ListBox2.List(i)).Visible = False
       End If
    Next i
    Unload FormWorksheets
    End Sub
    
    
    0
    1. Camillegbg Messages postés 38 Statut Membre 1
       
      Merci beaucoup , c'est parfait !
      A plus
      0