Afficher/cacher onglet avec userform
Résolu
Camillegbg
Messages postés
38
Statut
Membre
-
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.
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
- Rouvrir onglet fermé chrome - Guide
- Afficher appdata - Guide
- Cacher son numéro - Guide
- Cacher ses amis sur facebook - Guide
- Cacher conversation whatsapp - 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 +