XL 2013 VBA-ListBox-Formulaire-Nb Onglet

VincentM

XLDnaute Nouveau
Bonjour à tous,

Je débute en macro et j'ai quelques soucis dans l'application de cette nouvelle macro. Si vous pouviez m'aiguiller svp ^^.

Objectif : Masquer et afficher des onglets à la demande à l'aide d'un formulaire.

Problèmes :
  1. Lorsque je sélectionne l'onglet n°1 dans ListBox1 il ne veut pas se masquer.
  2. Lorsque je sélectionne un (ou plusieurs) autre onglet dans ListBox1 il me masque les mauvais onglets.
  3. Pour la ListBox2 l'affichage des onglets ne fonctionne pas.
Ci-dessous l'explication de ma macro + fichier.


ETAPE 1 : Générer deux ListBox pour récupérer les noms des feuilles affichées ou masquées.
Code:
Private Sub UserForm_Initialize()

' Liste uniquement les onglets de type "Feuille"
' Les onglets de type "Graphique" ne sont pas inclus
'
    Dim i As Integer
  
 
   ListBox1.Clear 'Liste des feuilles affichées
   ListBox2.Clear 'Liste des feuilles masquées
    For i = 1 To Worksheets.Count
        If Worksheets(i).Visible = True Then
        ListBox1.AddItem Worksheets(i).Name
        Else:
        ListBox2.AddItem Worksheets(i).Name
        End If
    Next i
   
End Sub

ETAPE 2 : En appuyant sur le CommandButton1 masque les feuilles sélectionnées dans la ListBox1.
Code:
Private Sub CommandButton1_Click()

Dim j As Integer

For j = 0 To ListBox1.ListCount - 1
If ListBox1.Selected(j) = True Then
Worksheets(j).Visible = xlSheetHidden
End If
Next j

End Sub

ETAPE 3 : En appuyant sur le CommandButton2 affiche les feuilles sélectionnées dans la ListBox2.
Code:
Private Sub CommandButton2_Click()

Dim h As Integer

For h = 0 To ListBox2.ListCount - 1
If ListBox2.Selected(h) = True Then
Worksheets(h).Visible = xlSheetVisible
End If
Next h

End Sub


Merci pour votre aide.
 

Pièces jointes

  • TestAffichageMasquerONGLET_VMARESQ.xlsm
    26.7 KB · Affichages: 7

Jacky67

XLDnaute Barbatruc
Bonjour
Pour l'étape 2 et 3
Code:
Private Sub CommandButton1_Click()

Dim j As Integer

For j = 0 To ListBox1.ListCount - 1
If ListBox1.Selected(j) = True Then
Worksheets(ListBox1.List(j)).Visible = xlSheetHidden
End If
Next j

End Sub
'--------------------------------------------------
Private Sub CommandButton2_Click()

Dim h As Integer

For h = 0 To ListBox2.ListCount - 1
If ListBox2.Selected(h) = True Then
Worksheets(ListBox2.List(h)).Visible = xlSheetVisible
End If
Next h

End Sub

Salutations
JJ
 
Dernière édition:

VincentM

XLDnaute Nouveau
Bonjour Jacky67,

Je te remercie pour ta réponse.
En effet ça fonctionne et en plus tu l'as amélioré !!!!! Tu as raison, il faut qu'une feuille reste affichée.

Quand tu auras 5 minutes peux-tu m'expliquer tes changements stp que je comprenne mieux pour la prochaine fois ? Par exemple pourquoi fallait-il écrire...
Code:
Worksheets(ListBox2.List(h)).Visible = xlSheetVisible
            ListBox1.AddItem Worksheets(ListBox2.List(h)).Name
            ListBox2.RemoveItem (h)
...de cette façon ?

Et encore merci pour ton aide.
 

Jacky67

XLDnaute Barbatruc
Bonjour Jacky67,

Je te remercie pour ta réponse.
En effet ça fonctionne et en plus tu l'as amélioré !!!!! Tu as raison, il faut qu'une feuille reste affichée.

Quand tu auras 5 minutes peux-tu m'expliquer tes changements stp que je comprenne mieux pour la prochaine fois ? .
Re..
Code:
' On commence par lire le contenu de la ListBox par la fin,
' comme sur une simple feuille excel ou l'on veut supprimer une ligne.
    For h = ListBox2.ListCount - 1 To 0 Step -1
    'on ne s'occupe que des items sélectionnés
          If ListBox2.Selected(h) Then
          'les items sont contenu dans "list" du ListBox de 0 à X items (X étant ListCount)
          'On rend donc visible la feuille ou le nom est contenu dans 'list(h)' de la ListBox2
            Worksheets(ListBox2.List(h)).Visible = xlSheetVisible
            'Ci-dessous on ajoute à ListBox1 l'item que l'on va supprimer de la liste de ListBox2
            'afin de le rendre disponible  sans relancer l'userform
            ListBox1.AddItem Worksheets(ListBox2.List(h)).Name
            'Puis on supprime de ListBox2 l'item qui n'a plus lieu d'être présente dans cette liste.
            ListBox2.RemoveItem (h)
            ' Cette ligne peut être écrite de cette façon
            ' ListBox2.RemoveItem h
        End If
    Next h
End Sub

Voila...
Bon courage.
Salutaions
JJ
 

Discussions similaires

Réponses
4
Affichages
233
Réponses
17
Affichages
911
Réponses
11
Affichages
346

Membres actuellement en ligne

Statistiques des forums

Discussions
312 472
Messages
2 088 709
Membres
103 928
dernier inscrit
MIKETUAU