Fermer plusieurs onglets

Bonjour,

J'ai chercher sur ce forum mon soucis mais je ne trouve pas de réponse à mon problème, je vous explique :

J'ai des onglets nommés "Xavier toit 1, Xavier toit 2, Xavier toit 3 ..." jusqu’à 5 toit, et j'ai la même chose pour 10 prénoms.

Lorsqu'un prénom est retenu, j'aimerais garder les 8 onglets de son prénom, et donc masquer tout les autres. actuellement, j'ai une ligne par onglet :

Worksheets("XAVIER TOIT 1").Visible = 0

Worksheets("XAVIER TOIT 2").Visible = 0

Worksheets("XAVIER TOIT 3").Visible = 0

Worksheets("XAVIER TOIT 4").Visible = 0

Worksheets("XAVIER TOIT 5").Visible = 0

Worksheets("DAMIEN TOIT 1").Visible = 0

Worksheets("DAMIEN TOIT 2").Visible = 0

Worksheets("DAMIEN TOIT 3").Visible = 0

Worksheets("DAMIEN TOIT 4").Visible = 0

Worksheets("DAMIEN TOIT 5").Visible = 0

Et j'ai encore la même chose pour les 8 autres prénoms, et ce pour chaque prénom sélectionné.

En bref, j'aimerais savoir s'il n'y avais pas un moyen de fermer plusieurs onglets en beaucoup moins de lignes.

Je pense que c'est faisable car il y une suite logique dans mes onglets, mais je n'y arrive pas.

Pourriez-vous m'aider svp ?

Merci d'avance.

Bonjour,

Lorsqu'un prénom est retenu, j'aimerais garder les 8 onglets de son prénom, et donc masquer tout les autres. actuellement, j'ai une ligne par onglet :

Merci d'avance.

A première vue les codes du styles For Each sh in this worbook …. mais sans fichier test cela devient

moins évident à coder.

Tu écris Lorsqu'un prénom est retenu ? ? ? de quelle manière ? c'est dans un userform ? un sélecteur qui

reprend la liste des onglets ? ... une celulle tapée manuellement ?

Bonjour,

pas sûr d'avoir tout compris ( 5 toits par prénom, garder les 8 feuilles de son prénom, )

à adapter

Dim Ws As Worksheet
For Each Ws In Worksheets
     Ws.Visible = IIf(Ws.Name Like "Prénom*", 1, 0)
Next 

Prénom étant à remplacer (variable? manuellement?) par le prénom dont on veut garder les feuilles:

Dim Ws As Worksheet, MaVariable as String
MaVariable = "XAVIER"
For Each Ws In Worksheets
      Ws.Visible = IIf(Ws.Name Like "XAVIER*", 1, 0)
 'ou
      Ws.Visible = IIf(Ws.Name Like MaVariable & "*", 1, 0)
Next 

Edit : Bonjour Xmenpl

Je vous transmet le début de code pour que vous compreniez :

Sub prenom()

If Range("A1") = "XAVIER" Then

    Worksheets("DAMIEN TOIT 1").Visible = 0
    Worksheets("DAMIEN TOIT 2").Visible = 0
    Worksheets("DAMIEN TOIT 3").Visible = 0
    Worksheets("DAMIEN TOIT 4").Visible = 0
    Worksheets("DAMIEN TOIT 5").Visible = 0

    Worksheets("BENJAMIN TOIT 1").Visible = 0
    Worksheets("BENJAMIN TOIT 2").Visible = 0
    Worksheets("BENJAMIN TOIT 3").Visible = 0
    Worksheets("BENJAMIN TOIT 4").Visible = 0
    Worksheets("BENJAMIN TOIT 5").Visible = 0

    Worksheets("PIERRE TOIT 1").Visible = 0
    Worksheets("PIERRE TOIT 2").Visible = 0
    Worksheets("PIERRE TOIT 3").Visible = 0
    Worksheets("PIERRE TOIT 4").Visible = 0
    Worksheets("PIERRE TOIT 5").Visible = 0

If Range("A1") = "BENJAMIN" Then

    Worksheets("DAMIEN TOIT 1").Visible = 0
    Worksheets("DAMIEN TOIT 2").Visible = 0
    Worksheets("DAMIEN TOIT 3").Visible = 0
    Worksheets("DAMIEN TOIT 4").Visible = 0
    Worksheets("DAMIEN TOIT 5").Visible = 0

    Worksheets("XAVIER TOIT 1").Visible = 0
    Worksheets("XAVIER TOIT 2").Visible = 0
    Worksheets("XAVIER TOIT 3").Visible = 0
    Worksheets("XAVIER TOIT 4").Visible = 0
    Worksheets("XAVIER TOIT 5").Visible = 0

    Worksheets("PIERRE TOIT 1").Visible = 0
    Worksheets("PIERRE TOIT 2").Visible = 0
    Worksheets("PIERRE TOIT 3").Visible = 0
    Worksheets("PIERRE TOIT 4").Visible = 0
    Worksheets("PIERRE TOIT 5").Visible = 0

End If

End Sub

Si je résume, il y plusieurs prénom à sélectionner par une liste déroulante, et en fonction du prénom, je veux supprimer des onglets (ça ok)

Ce que je veux, c'est raccourcir le code vba, car j'ai plein de lignes similaires.

Si vous avez des idées, je suis preneur.

Merci d'avance

Re,

D'après ton code tu sembles utiliser la Cellule A1 comme prénom pour ta variable.

Dans ce cas dans le code de Algo plus ( que je salut en passant )

il suffit de remplacer :

MaVariable = "XAVIER"

par

MaVariable = Range("A1").value

puisque le prénom se trouve en A1, utilisons A1 comme variable:

For Each Ws In Worksheets
      Ws.Visible = IIf(Ws.Name Like Range("A1")  & "*", 1, 0)
Next 

Donc le code d'AlgoPlus semble le plus adapté. J'ai cherché pour comprendre le code et je le comprendre et apres l'avoir tester ça fonctionne très bien !

Merci à vous tous de m'avoir aidé.

Finalement j'ai une dernière question.

En plus de ses onglets que je veux garder selon le prénom, j'aimerais garde deux autres onglets tout le temps (peu importe le prénom) qui s'appellent "PRÉSENTATION" et "TARIFICATION".

Avec votre méthode je n'arrive pas a garder d'autres onglets.

Auriez-vous une solution svp ?

Merci d'avance

a priori

For Each Ws In Worksheets
       If Ws.Name <> "PRÉSENTATION" And Ws.Name <> "TARIFICATION"  Then
            Ws.Visible = IIf(Ws.Name Like Range("A1")  & "*", 1, 0)
       End If
Next

A+

Effectivement ça fonctionne très bien ! merci à tous

Rechercher des sujets similaires à "fermer onglets"