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.
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
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)
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
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
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