Run-Time Error 1004 Method Unprotect of Object _Worksheet' Failed
Bonjour,
Je reçois un code erreur après l'encodage d'un User et de son Psswd au sein d'un Form.
Les utilisateurs sont au sein d'une Feuille "Rights" qui mentionne les droits de Visualiser, Modifier ou de cacher les autres feuilles du Workbook.
Le code se trouve dans mon exemple joint.
merci d'avance de votre aide.
Cordialement,
Eric
Bonjour,
Je pense que votre fichier est vérolé, en l'ouvrant ça ne m'affiche aucun onglet
- Messages
- 2'417
- Excel
- 2019
- Inscrit
- 13/07/2017
- Emploi
- Formateur, animateur,tech.informatique
Bonjour toutes et tous
coucou BrunoM45
j'ai réussi un peu a voir l'intérieur, le mot de passe de la feuille protégée est 1234
edit: les autres feuilles sont masquées et lorsqu'n veut les déprotégées un message de Worksheets a échoué
le code de l'usf:
Private Sub CommandButton1_Click()
Dim sh As Worksheet
Set sh = ThisWorkbook.Sheets("Rights")
If Me.Txt_UserName.Value = "" Then
MsgBox "Please enter your user name", vbCritical
Exit Sub
End If
If Me.Txt_Psswd = "" Then
MsgBox "Please enter your password", vbCritical
Exit Sub
End If
If Application.WorksheetFunction.CountIf(sh.Range("A:A"), Me.Txt_UserName.Value) = 0 Then
MsgBox "Invalid user name", vbCritical
Exit Sub
End If
Dim user_row As Integer
user_row = Application.WorksheetFunction.Match(Me.Txt_UserName.Value, sh.Range("A:A"), 0)
If Me.Txt_Psswd.Value <> sh.Range("C" & user_row).Value Then
MsgBox "Invalid password", vbCritical
Exit Sub
End If
Dim lock_worksheet, Unlock_worksheet As Integer
lock_worksheet = Application.WorksheetFunction.CountIf(sh.Range("E" & user_row, "XFD" & user_row), "Ï")
Unlock_worksheet = Application.WorksheetFunction.CountIf(sh.Range("E" & user_row, "XFD" & user_row), "Ð")
If (lock_worksheet + Unlock_worksheet) = 0 Then
MsgBox "You don't have access to this Report, please contact the administrator", vbCritical
Exit Sub
End If
' Apply Setting
Dim wsh As Worksheet
Dim i As Integer
If sh.Range("B" & user_row).Value = "Admin" Then 'for Admin Role
sh.Unprotect 1234
sh.Cells.EntireColumn.Hidden = False
sh.Cells.EntireRow.Hidden = False
ThisWorkbook.Unprotect 1234
For Each wsh In ThisWorkbook.Worksheets
wsh.Visible = xlSheetVisible
wsh.Unprotect 1234
Next wsh
ActiveWindow.DisplayWorkbookTabs = True
Else 'for Users
ThisWorkbook.Unprotect 1234
ActiveWindow.DisplayWorkbookTabs = True
For i = 5 To Application.WorksheetFunction.CountA(sh.Range("2:2"))
Set wsh = ThisWorkbook.Sheets(sh.Cells(2, i).Value)
If sh.Cells(user_row, i).Value = "Ð" Then 'for unlock
wsh.Visible = xlSheetVisible
wsh.Unprotect 1234
ElseIf sh.Cells(user_row, i).Value = "Ï" Then 'for unloack
wsh.Visible = xlSheetVisible
wsh.Protect 1234
End If
Next i
ThisWorkbook.Unprotect 1234
sh.Visible = xlSheetVeryHidden
End If
Unload Me
End Sub
Private Sub Text_UserName_Change()
End Sub
Private Sub UserForm_Activate()
Dim sh As Worksheet
Dim wsh As Worksheet
Set sh = ThisWorkbook.Sheets("Rights")
ThisWorkbook.Unprotect 1234
sh.Visible = xlSheetVisible
For Each wsh In ThisWorkbook.Worksheets
If wsh.Name <> "Rights" Then
wsh.Visible = xlSheetVeryHidden
End If
Next wsh
sh.Unprotect 1234
sh.Cells.EntireColumn.Hidden = True
sh.Cells.EntireRow.Hidden = True
sh.Protect 1234
ThisWorkbook.Protect 1234
ActiveWindow.DisplayWorkbookTabs = False
End Sub
Private Sub UserForm_AddControl(ByVal Control As MSForms.Control)
End Sub
Private Sub UserForm_Click()
End Subune capture d'écran de ce que j'ai :
Hello,
Pas d'idéé?
Votre aide serait très appréciable.
Je suis débutant VBA, j'ai suivit un tutoriel en ligne, ce qui m'a permis de générer ce code qui fonctionne au sein du cours mais pas chez moi!
Version différentes d'Excel, évolution de VBA????
Je suis sous Excel 2016.
Grand merci de vos réponses.
très bonne journée.
Eric
Hello,
Merci mais j'ai trouvé mon problème.
Si quelqu'un est desireux de savoir je partage mon expérience avec plaisir.
Thanks to the Forum.
Eric