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