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 Then
If Sh.Name = Target & "*" Then

mais 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 Sub

bonjour 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 Sub

Bonjour 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 Sub

en 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

Rechercher des sujets similaires à "cible contient"