Sélectionner une feuille dont le nom correspond à une cellule

Bonjour à tous,

je cherche a créer un bouton macro qui masquera des feuilles en fonction d'une valeur dans un tableau.

Mon tableau, dans la 1ère feuille, est composé de 2 colonnes et d'autant de ligne que de feuille suivante. (créer par une précédente macro)

la 1ere colonne correspond au nom de mes feuilles, dans ma seconde colonne est notée "oui" ou "non".

J'aimerai que les feuilles dont la ligne de la 1ere feuille est renseignée "oui" soit masquées.

Cela est-il possible?

je suis parti sur cette macro avec le fichier joint :

Sub masquer_feuille()

For Each cel In Range("B2", Range("B" & Rows.Count).End(xlUp))

If cel Like "oui" Then

Sheets(2).Visible = False

End If

Next

End Sub

Elle fonctionne ici pour masquer uniquement la 2nd feuille

Mon problème est de faire pointer le nom de la feuille = à la valeur 1ere cellule de la ligne où apparaît le "oui" (j’espère que ma demande est compréhensible

Merci par avance pour votre aide qui me sera bien utile

Bonjour,

Si tu demandes de masquer la 2e feuille, le code masquera la 2e feuille ! Et ne t'étonne pas que cela ne fasse pas autre chose !

Sub MasquerFeuille()
    Dim c As Range
    For Each c In Worksheets(1).ListObjects(1).DataBodyRange.Columns(1).Cells
        Worksheets(c.Value).Visible = (c.Offset(, 1) <> "oui")
    Next c
End Sub

NB- Toujours mettre le code sous balises Code dans un post (comme ci-dessus !)

Indenter correctement son code...

Déclarer systématiquement ses variables en tête de procédure !

Bonjour Seb, bonjour le forum,

Peut-être comme ça :

Sub masquer_feuille()
Dim O As Worksheet 'déclare la variaboe O (Onglet)
Dim TV As Variant 'déclare la variaboe TV (Tableau des valeurs)

Set O = Worksheets("Feuil1") 'définit l'onglet O
TV = O.Range("Tableau1") 'définit le tableau des valeurs TV
For I = 1 To UBound(TV, 1) 'boucle sur toutes les lignes I du tableau des valeurs TV
    'si la donnée ligne I colonne 2 de TV = "oui" n'est pas [Vrai],
    'la propriété [Visible] de l'onglet correspondant à la donnée ligne I colonne 1 de TV n'est pas [Vrai] non plus
    Sheets(TV(I, 1)).Visible = Not TV(I, 2) = "oui"
Next I 'prochaine ligne de la boucle
End Sub

[Édition]

Pfff. Toujours au milieu celui-là !... Et toujours aussi efficace... Ho c' est vous.... Bonjour cher Maître...

MFerrand / ThauThème

Merci pour vos réponses très rapides!

Chacun de vos codes fonctionnes.

Mais je les ai intégré dans mon "vrai" tableau en essayant de les adapter mais je sèche (Je suis novice en VBA et vos codes sont inconnu pour moi... )

Ci joint le tableau

(j'aurai du le joindre à ma 1ere demande...)

@MFerrand

oui évidement que se sera toujours ma 2ème feuille qui sera masquer

c'était pour l'exemple

Re,

Maître Ferrand est tellement lent que je me permet de répondre à sa place en adaptant son code :

Sub MasquerFeuille()
Dim c As Range
For Each c In Worksheets(1).ListObjects(1).DataBodyRange.Columns(1).Cells
    Worksheets(CStr(c.Value)).Visible = (UCase(c.Offset(, 5)) <> "OUI")
Next c
End Sub

Sub MasquerFeuille()
    Dim i%
    With Worksheets(1).ListObjects(1).DataBodyRange
        For i = 1 To .Rows.Count
            Worksheets(CStr(.Cells(i, 1))).Visible = (UCase(.Cells(i, .Columns.Count)) <> "OUI")
        Next i
    End With
End Sub

Bon ! lorsqu'on fournit un fichier inadéquat, on n'aura pas une réponse adéquate ! Quand on s'amuse à modifier la structure par rapport au modèle fourni, c'est qu'on considère être en mesure d'adapter le code à ces modifications, sans quoi il convenait de fournir un autre modèle !

Un nom de feuille est une donnée String, une valeur numérique n'est pas reconnue comme nom de feuille, il faut la convertir.

Et si en plus on ne maîtrise pas les mentions qu'on porte soi-même : alternativement OUI ou Oui ! Là je n'ai plus guère envie de répondre !

Sub MasquerFeuille()
    Dim i%
    With Worksheets(1).ListObjects(1).DataBodyRange
        For i = 1 To .Rows.Count
            Worksheets(CStr(.Cells(i, 1))).Visible = (UCase(.Cells(i, .Columns.Count)) <> "OUI")
        Next i
    End With
End Sub

Bon ! lorsqu'on fournit un fichier inadéquat, on n'aura pas une réponse adéquate ! Quand on s'amuse à modifier la structure par rapport au modèle fourni, c'est qu'on considère être en mesure d'adapter le code à ces modifications, sans quoi il convenait de fournir un autre modèle !

Un nom de feuille est une donnée String, une valeur numérique n'est pas reconnue comme nom de feuille, il faut la convertir.

Et si en plus on ne maîtrise pas les mentions qu'on porte soi-même : alternativement OUI ou Oui ! Là je n'ai plus guère envie de répondre !

Ok, toutes mes excuses.

Je suis novice et je ne connais pas tous les codes de bon principe des échanges VBA.

Mon fichier excel initial est rempli de petite macro et je voulais transmettre un fichier simple pour ne pas vous compliquer la vie

et j'imaginais ce code plus simple et facilement adaptable... (et je vois que j'ai beaucoup à apprendre...)

En tout cas merci de ton aide très précieuse pour me permettre d'avancer dans mes projets!

Re,

Maître Ferrand est tellement lent que je me permet de répondre à sa place en adaptant son code :

Sub MasquerFeuille()
Dim c As Range
For Each c In Worksheets(1).ListObjects(1).DataBodyRange.Columns(1).Cells
    Worksheets(CStr(c.Value)).Visible = (UCase(c.Offset(, 5)) <> "OUI")
Next c
End Sub

Merci ThauThème pour ce code!

Fonctionne parfaitement!

Rechercher des sujets similaires à "selectionner feuille nom correspond"