macro pour afficher un onglet

  • Initiateur de la discussion Initiateur de la discussion Vilain
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Vilain

XLDnaute Accro
Salut à tous,

Je lutte un peu pour faire quelque chose de très simple.
J'ai une macro qui me masque mes onglets nommés 1, 2, 3 et 4.
Sur ma feuille 1 j'ai : onglet à afficher.
Je veux rentrer 1,2,3 ou 4 dans la cellule concernée et que quand je lance la macro, seul cet onglet s'affiche.
Je joins mon fichier pour plus de clarté.

Merci d'avance.

A plus
 

Pièces jointes

Re : macro pour afficher un onglet

Bonjour Gillus69,

Une proposition :

Code:
Sub Macro1()

Dim NomFeuil As String, i As Integer
NomFeuil = Sheets("Feuil1").Range("B3").Value

For i = 1 To Sheets.Count

    If Sheets(i).Name = "Feuil1" Or Sheets(i).Name = NomFeuil Then
    
    On Error Resume Next
    Sheets(i).Visible = True
    
    Else
    
    Sheets(i).Visible = False
    
    End If
    
Next i
    

End Sub

Il faut redéfinir la valeur récupérée en B3 en tant que String sinon elle est considérée comme un chiffre, et donc en numéro d'index et non pas comme nom de feuille.

Bonne journée
 

Pièces jointes

Re : macro pour afficher un onglet

Salut et merci pour ce coup de main.
Je n'avais pas pensé que le fait que les noms soient des chiffres puisse poser un problème.
Je vais te falciliter la tache : dans mon fichier réél, c'est du texte !

Encore merci.

A plus
 
Re : macro pour afficher un onglet

Re,

pour sélectionner automatiquement la feuille après avoir masqué les autres
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("B3")) Is Nothing Then
For i = 2 To Sheets.Count
Sheets(i).Visible = 2
Next i
Sheets([B3] + 1).Visible = 1
Sheets([B3] + 1).Select
End If
End Sub
à+
Philippe
 
Re : macro pour afficher un onglet

Bonjour le fil, bonjour le forum,

Pourquoi pas la même chose mais en macro événementielle Change ?
Le code :
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim o As Object 'déclare la variable o (Onglet)
Dim i As Byte 'déclare la variable i (Incrément)

If Target.Address <> "$B$3" Then Exit Sub 'si le changement a lieu ailleurs qu'en B3, sort de la procédure
On Error Resume Next 'gestion des ereurs (en cas d'erreur, passe à la ligne suivante)
If Target.Value = "" Then GoTo fin 'si B3 est effacé, va à l'étiquette fin
Target.Select 'sélectionne B3
Set o = Sheets(CStr(Target.Value)) 'définit l'onglet o (provoque une erreur si c'est onglet n'existe pas)
If Err <> 0 Then 'condition : si une erreur a été générée
    Err = 0 'annule l'ereur
    MsgBox "l'onglet " & Target.Value & " n'existe pas !" 'message
    Target.Value = "" 'efface le contenu de B3
    Exit Sub 'sort de la procédure
End If 'fin de la condition
fin: 'étiquette "fin"
For i = 1 To Sheets.Count 'boucle sur tous les onglets (masque tous les onglets sauf "Feuil1")
    If Sheets(i).Name <> "Feuil1" Then Sheets(i).Visible = False
Next i 'prochain onglet de la boucle
o.Visible = True 'affiche o
End Sub

Le fichier :

[Édition]
Arffff, j'arrive trop tard ! Philippe avait déjà répondu...
 

Pièces jointes

- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

D
Réponses
4
Affichages
432
DidPouAxi
D
Retour