Macro : Afficher des onglets en fonction du code saisie (pas d'affichage)
Bonjour à toutes et à tous,
Je me permets de nouveau de vous écrire pour être éclairé !
Explication du problème :
"Alors, j'ai une macro qui est censé maquer tous les onglets et m'afficher un onglet (User 1, User 2, User 3,... ) en fonction du code saisie par l'utilisateur à l'ouverture du ficher Excel (macro ci-dessous), toutefois, quand je saisie mon code, rien ne se passe, il accepte le code mais n'affiche pas mon onglet"
Pourriez vous me dire qu'est ce que je fais mal ? Je vous remercie par avance pour votre retour !
Pour info : j'ai récupéré cette macro sur le web et je l'ai adapté à mon cas
Private Sub Workbook_Open()
'Déclaration des variables
Dim i As Integer
Dim MonPassword As Variant
'Afficher la feuille HOME dès l'ouverture du classeur
Worksheets("HOME").Activate
'Masquer les autres feuilles
For i = 1 To Sheets.Count - 1
Sheets("User " & i).Visible = False
Next i
'On va récupérer le code ou Mdp dans une boite de type InputBox
monpasswoerd = InputBox("Veuillez entrer votre mot de passe pour accéder à votre feuille :", "Identification")
'On va réaliser les différents tests
If MonPassword = "1234" Then
Sheets("User 1").Visible = True
Worksheets("User 1").Select
Range("A1").Select
End If
If MonPassword = "12345" Then
Sheets("User 2").Visible = True
Worksheets("User 1").Select
Range("A1").Select
End If
If MonPassword = "123456" Then
Sheets("User 3").Visible = True
Worksheets("User 1").Select
Range("A1").Select
End If
'Ouvrir toutes les feuilles si mot de passe admin
If MonPassword = "0000" Then
For i = 1 To Sheets.Count
Sheets("User " & i).Visible = True
Next i
End If
End SubEdit modo : merci de mettre le code entre balises grâce au bouton </>
Bonjour,
Vous auriez mis "Option Explicit" en début de module, vous auriez vu qu'il y avait une erreur de frappe
"monpasswoerd" au lieu de "MonPassword"
Ceci dit 2 choses :
- inscrire en dur les mots de passe pas forcément une bonne idée
- si vous voulez le faire ainsi, le code peut être optimisé comme ceci
Private Sub Workbook_Open()
'Déclaration des variables
Dim Ind As Integer
Dim MonPassword As Variant
Dim TbMdP() As String
' Tableau des MdP
TbMdP = Split("1234,12345,123456", ",")
'Afficher la feuille HOME dès l'ouverture du classeur
Worksheets("HOME").Activate
'Masquer les autres feuilles
For Ind = 1 To Sheets.Count - 1
Sheets("User " & Ind).Visible = xlSheetHidden
Next Ind
'On va récupérer le code ou Mdp dans une boite de type InputBox
MonPassword = InputBox("Veuillez entrer votre mot de passe pour accéder à votre feuille :", "Identification")
'Ouvrir toutes les feuilles si mot de passe admin
If MonPassword = "0000" Then
For Ind = 1 To Sheets.Count
Sheets("User " & Ind).Visible = True
Next Ind
Exit Sub
End If
' Tester chaque mot de passe enregistré
For Ind = 0 To UBound(TbMdP)
If MonPassword = TbMdP(Ind) Then
With Sheets("User " & 1 + Ind)
.Visible = xlSheetVisible
.Select
.Range("A1").Select
End With
' Sortir de la procédure
Exit Sub
End If
Next Ind
End Sub@+
Merci Beaucoup Bruno,
Effectivement votre proposition est beaucoup mieux et j'ai le résultat souhaité
Bonjour Bruno, (ou la communauté)
Le fichier marche correctement sur mon poste, mais chez les destinataire (soit accès sur réseau soit par mail) ça ouvre d'office tous les onglets et puis dès qu'il clique sur "Activer le contenu" c'est là ou il les masque et demande le code,
Avez vous une idée sur la résolution de ce souci ?
Vous remerciant,
Bonjour RaNouh,
C'est le problème avec les sécurités Microsoft
Ce qu'il faut, c'est masquer les onglets à la fermeture du classeur,
comme ça quand tu enverras le fichier, les onglets seront déjà masqués
Option Explicit
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim Ind as Integer
'Afficher la feuille HOME dès l'ouverture du classeur
Worksheets("HOME").Activate
'Masquer les autres feuilles
For Ind = 1 To Sheets.Count - 1
Sheets("User " & Ind).Visible = xlSheetVeryHidden
Next Ind
End Sub
Private Sub Workbook_Open()
'Déclaration des variables
Dim Ind As Integer
Dim MonPassword As Variant
Dim TbMdP() As String
' Tableau des MdP
TbMdP = Split("1234,12345,123456", ",")
'On va récupérer le code ou Mdp dans une boite de type InputBox
MonPassword = InputBox("Veuillez entrer votre mot de passe pour accéder à votre feuille :", "Identification")
'Ouvrir toutes les feuilles si mot de passe admin
If MonPassword = "0000" Then
For Ind = 1 To Sheets.Count - 1
Sheets("User " & Ind).Visible = xlSheetVisible
Next Ind
Exit Sub
End If
' Tester chaque mot de passe enregistré
For Ind = 0 To UBound(TbMdP)
If MonPassword = TbMdP(Ind) Then
With Sheets("User " & 1 + Ind)
.Visible = xlSheetVisible
.Select
.Range("A1").Select
End With
' Sortir de la procédure
Exit Sub
End If
Next Ind
End Sub@+