Si la cible contient
Bonjour,
J'essaye de modifier un code que j'ai dans un autre fichier mais j'ai un soucis...
Le code fait apparître/disparaitre des sheets en fonction de la valeur d'une cellule et n'as d'effet que si le sheet à une certaine couleur. J'aimerai adapter le code pour que le nom des sheet qui apparaissent/disparaissent, pour le moment le nom entre le sheet et la cellule doivent être les mêmes, mais j'aimerai que si le sheet contient le mot de la cellule il apparaisse (le mot de la cellule est toujours le premier mot dans le nom du sheet).
J'ai essayé de mettre à la place de
If Sh.Name = Target ThenIf Sh.Name = Target & "*" Thenmais sans succé...
Pourrais-je demander un petit plus si possible...
si le sheet02 contient une valeur en P39 ce ne sois que celui-là qui apparaisse
si le sheet03 contient une valeur en P20 ce ne sois que celui-là qui apparaisse
sinon c'est le sheet01 qui apparait
Voici le code :
' Affichage des collones suivant le type d'entrée
Private Sub Worksheet_Change(ByVal Target As Range)
If Application.Intersect(Target, Range("F2")) Is Nothing Then Exit Sub
Application.ScreenUpdating = False
If Target = 8 Then End
Dim Sh As Worksheet
' Boucle dans la collection des onglets
For Each Sh In Worksheets
' On traite que les onglets dont la couleur est gris clair
If Sh.Tab.Color = RGB(191, 191, 191) Then
' Si le nom de l'onglet actuel correspond à la valeur sélectionnée en B4
If Sh.Name = Target Then
Sh.Visible = xlSheetVisible
Else
Sh.Visible = xlSheetHidden
End If
End If
Next Sh
End Subbonjour Heavy_B, votre question nest pas 100% clair, peut-être comme ça ?
"le mot de la cellule est toujours le premier mot dans le nom du sheet" ???
Sub Test()
dim sh as sheet
With Sheets("sheet02").Range("P39") 'cette cellule
If Len(.Value) > 0 Then 'n'est pas vide
On Error Resume Next
Set Sh = Sheets(CStr(.Value)) 'feuille avec le nom de la cellule
On Error GoTo 0
If Not Sh Is Nothing Then HIDE
End If
End With
With Sheets("sheet03").Range("P20")
If Len(.Value) > 0 Then
On Error Resume Next
Set Sh = Sheets(CStr(.Value))
On Error GoTo 0
If Not Sh Is Nothing Then HIDE
End If
End With
Exit Sub
HIDE:
Sh.Visible = xlSheetVisible 'montrer cette feuille
For Each sht In ThisWorkbook.Sheets 'dans un boucle
Sh.Visible = IIf(Sh.Name = sht.Name, xlSheetVisible, xlSheetHidden) 'cacher le reste
Next
End SubBonjour BsAlv,
en relisant ma phrase je constate en effet que cela donnais mieux dans ma tête...
Pour faire simple :
J'ai des sheet qui aurais comme nom : "chocolat au lait", "chocolat noir", "écran de TV", "écran de PC", "tartine au beure", "tartine au fromage"
j'ai une cellule dans un sheet "MainSheet" dans laquelle le mot "chocolat" ou "écran" ou "tartine" est placé.
donc le mot dans le cellule est toujours le premier mot dans le nom du sheet...
re,mieux comme ça ?
Sub Test()
Dim aNoms
ReDim aNoms(1 To ThisWorkbook.Sheets.Count)
For i = 1 To UBound(aNoms)
aNoms(i) = Split(Sheets(i).Name)(0) 'premier mot du nom de cette feuille
Next
With Sheets("sheet02").Range("P39") 'cette cellule
If Len(.Value) > 0 Then 'n'est pas vide
i = Application.Match(Split(.Value)(0), aNoms, 0) 'cherche premier mot de cette cellule dans le tableau des premiers mots des feuilles
If IsNumeric(i) Then GoTo HIDE
End If
End With
With Sheets("sheet03").Range("P20")
If Len(.Value) > 0 Then 'n'est pas vide
i = Application.Match(Split(.Value)(0), aNoms, 0) 'cherche premier mot de cette cellule dans le tableau des premiers mots des feuilles
If IsNumeric(i) Then GoTo HIDE
End If
End With
MsgBox "sorry", vbExclamation
Exit Sub
HIDE:
s = aNoms(i) 'le premier mot voulu
For i1 = 1 To 2
For i = 1 To UBound(aNoms)
If i1 = 1 Then
Sheets(i).Visible = (UCase(Sheets(i).Name) Like UCase(s & " *")) '1ier boucle = montrer toutes les feuilles "Chocolate *"
Else
Sheets(i).Visible = (UCase(Sheets(i).Name) Like UCase(s & " *")) '2ième boucle = cacher toutes les feuilles <> "Chocolate *"
End If
Next
Next
End Suben y réfléchissant, juste montrer les sheet qui sont de la bonne couleur et qui commencent par le mot cible serais parfait...
Cela fonctionne mercici beaucoup