XL 2010 afficher les feuilles qui comporte une même partie de noms d'onglets

submarine22

XLDnaute Junior
Bonjour à toutes et à tous.
alors voici ma requête:
Est-il possible de pouvoir afficher uniquement les feuilles qui on une même partie de noms d'onglets?
j y arrive bien grâce un code pour une seule feuille, mais je voudrais par exemple si j'ai plusieurs feuille qui comporte le mot de "janvier" dans leurs onglets que cela soit aussi faisable.

code que j'utilise:

Private Sub CommandButton1_Click()
For Each Sh In ThisWorkbook.Sheets
Sh.Visible = True
Next
On Error Resume Next
Dim Feuille As Worksheet
For Each Feuille In Sheets
If Feuille.Name <> "01 janvier 2022" Then Feuille.Visible = xlSheetVeryHidden ' en gros si la je ne pouvais que prendre en compte que janvier
'j'ai tester ce truc la mais cela ne fonctionne pas : If Feuille.Name <> "*" & "" "janvier" &"" &"*" Then Feuille.Visible = xlSheetVeryHidden

Next Feuille
UserForm11.Show
If Err <> 0 Then MsgBox "pas de date"
End Sub

je sais qu'avec le fichier cela serait plus lisible,mais je ne peux vous fournir le fichier car il est trop volumineux.

Merci par avance pour votre aide
 

job75

XLDnaute Barbatruc
Bonsoir submarine22,

Une seule boucle suffit :
VB:
Private Sub CommandButton1_Click()
Dim Feuille As Object
On Error Resume Next
For Each Feuille In Sheets
    Feuille.Visible = IIf(LCase(Feuille.Name) Like "*janvier*", xlSheetVisible, xlSheetVeryHidden)
Next
If Err Then MsgBox "Pas de nom de feuille contenant janvier !", 48 Else UserForm11.Show
End Sub
A+
 

Staple1600

XLDnaute Barbatruc
Bonsoir le fil, submarine22, job75

Une autre possibilité
VB:
Sub test_janv()
Mois = MonthName(InputBox("Saisir le N° du mois de l'année", "Afficher/Masquer", 1))
Masquer_Sauf CStr(Mois)
End Sub
Sub Masquer_Sauf(NomMois As String)
Dim ws As Worksheet
For Each ws In Worksheets
ws.Visible = InStr(ws.Name, NomMois) > 0
Next
End Sub
Sub Afficher_Tout()
Dim ws As Worksheet
For Each ws In Worksheets
ws.Visible = -1
Next
End Sub
On peut choisir le nom du mois grâce à l'InputBox
Mais attention aux effets de bord ;)
Il faudrait que j'ajoute une gestion d'erreur.

PS: Je n'ai tester que l'affichage/masquage des feuilles (pas le lancement de l'userform)
 

submarine22

XLDnaute Junior
Bonsoir le fil, submarine22, job75

Une autre possibilité
VB:
Sub test_janv()
Mois = MonthName(InputBox("Saisir le N° du mois de l'année", "Afficher/Masquer", 1))
Masquer_Sauf CStr(Mois)
End Sub
Sub Masquer_Sauf(NomMois As String)
Dim ws As Worksheet
For Each ws In Worksheets
ws.Visible = InStr(ws.Name, NomMois) > 0
Next
End Sub
Sub Afficher_Tout()
Dim ws As Worksheet
For Each ws In Worksheets
ws.Visible = -1
Next
End Sub
On peut choisir le nom du mois grâce à l'InputBox
Mais attention aux effets de bord ;)
Il faudrait que j'ajoute une gestion d'erreur.

PS: Je n'ai tester que l'affichage/masquage des feuilles (pas le lancement de l'userform)
merci beaucoup pour cette réponse;)
puis je me permettre de te demander comment changer automatiquement la couleur d un bouton activeX si justement une de ces feuilles existe?
Merci par avance
et désolé d'abusé
bonne soirée
 

job75

XLDnaute Barbatruc
Bonjour submarine22, JM,

S'il faut choisir un mois le mieux est d'utiliser une liste de validation avec cette macro :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, [D2]) Is Nothing Then Exit Sub
Dim i%, test As Boolean
Me.Move Before:=Sheets(1) 'sécurité
For i = 2 To Sheets.Count
    If LCase(Sheets(i).Name) Like "*" & LCase(CStr(Range("D2"))) & "*" Then _
        Sheets(i).Visible = xlSheetVisible: test = True Else Sheets(i).Visible = xlSheetVeryHidden
Next
If test Then UserForm11.Show Else MsgBox "Pas de nom de feuille contenant " & CStr([D2]) & " !", 48
End Sub
A+
 

Pièces jointes

  • Mois(1).xlsm
    21.8 KB · Affichages: 3

submarine22

XLDnaute Junior
Bonjour submarine22, JM,

S'il faut choisir un mois le mieux est d'utiliser une liste de validation avec cette macro :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, [D2]) Is Nothing Then Exit Sub
Dim i%, test As Boolean
Me.Move Before:=Sheets(1) 'sécurité
For i = 2 To Sheets.Count
    If LCase(Sheets(i).Name) Like "*" & LCase(CStr(Range("D2"))) & "*" Then _
        Sheets(i).Visible = xlSheetVisible: test = True Else Sheets(i).Visible = xlSheetVeryHidden
Next
If test Then UserForm11.Show Else MsgBox "Pas de nom de feuille contenant " & CStr([D2]) & " !", 48
End Sub
A+
merci beaucoup encore job75 bonne soirée et bon week end
 

Discussions similaires