Afficher/cacher onglet avec userform
Résolu
Camillegbg
Messages postés
33
Date d'inscription
Statut
Membre
Dernière intervention
-
Camillegbg Messages postés 33 Date d'inscription Statut Membre Dernière intervention -
Camillegbg Messages postés 33 Date d'inscription Statut Membre Dernière intervention -
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.
Est ce que quelqu'un sait pourquoi ça ne marche pas ?
Merci pour votre aide
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:
- Afficher/cacher onglet avec userform
- Raccourci rouvrir onglet fermé - Guide
- Afficher appdata - Guide
- Cacher son numéro - Guide
- Cacher conversation whatsapp - Guide
- Cacher ses amis sur facebook - Guide
2 réponses
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+
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+
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+
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
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 +