Afficher/cacher onglet avec userform

Résolu/Fermé
Camillegbg Messages postés 33 Date d'inscription jeudi 30 octobre 2008 Statut Membre Dernière intervention 29 juillet 2010 - 14 avril 2010 à 16:31
Camillegbg Messages postés 33 Date d'inscription jeudi 30 octobre 2008 Statut Membre Dernière intervention 29 juillet 2010 - 15 avril 2010 à 14:15
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
A voir également:

2 réponses

pilas31 Messages postés 1825 Date d'inscription vendredi 5 septembre 2008 Statut Contributeur Dernière intervention 24 avril 2020 643
14 avril 2010 à 16:46
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
Camillegbg Messages postés 33 Date d'inscription jeudi 30 octobre 2008 Statut Membre Dernière intervention 29 juillet 2010 1
15 avril 2010 à 11:08
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
pilas31 Messages postés 1825 Date d'inscription vendredi 5 septembre 2008 Statut Contributeur Dernière intervention 24 avril 2020 643
15 avril 2010 à 12:02
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
Camillegbg Messages postés 33 Date d'inscription jeudi 30 octobre 2008 Statut Membre Dernière intervention 29 juillet 2010 1
15 avril 2010 à 14:15
Merci beaucoup , c'est parfait !
A plus
0