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 !
j'ai un classeur Excel planning d'une équipe avec macro mdp utilisateur afin qu'ils n'accèdent qu'a leur propre service
mon problème c'est que si il n'active pas les macros, il peuvent arrivé à voir tout le classeur.
ils peuvent utiliser n'importe quel pc de la boite, et le classeur se trouve dans un serveur
userform ils rentre leur nom + MDP et accès à leur service (une feuil = 1 service)
le classeur comporte 7 feuils dont la feuil01 ou s'affiche l'userform
je souhaiterais que le classeur soit bloquer de toute lecture si ils n'activent pas les macros? ou si il y a à une autre solution?
ThisWorkbook :
Private Sub Workbook_open()
Dim Ws As Worksheet
For Each Ws In ThisWorkbook.Worksheets
If Ws.Name <> "Feuil1" Then Ws.Visible = xlSheetVeryHidden
Next Ws
Load UserForm1
UserForm1.show
End Sub
merci
cordialement.
PS: j'ai trouvé cela sur le net mais ne sait pas l'adapté à mon bva
une solution possible serait de créer une feuille affichant le message "Vous devez activer les macros".
Puis :
> à la fermeture du classeur, tu caches toutes les feuilles sauf celle-là
Code (Text):
Private Sub Workbook_BeforeClose(Cancel As Boolean)
ThisWorkbook.Sheets("FeuilleActivationDesMacros").Visible = xlSheetVisible
Dim curSheet As Worksheet
For Each curSheet In ThisWorkbook.Sheets
If curSheet.Name <> "FeuilleActivationDesMacros" Then curSheet.Visible = xlSheetVeryHidden
Next curSheet
ThisWorkbook.Save
End Sub
> à l'ouverture, tu cache cette feuille et affiche les autres
Code (Text):
Private Sub Workbook_Open()
Dim curSheet As Worksheet
For Each curSheet In ThisWorkbook.Sheets
If curSheet.Name <> "FeuilleActivationDesMacros" Then curSheet.Visible = xlSheetVisible
Next curSheet
ThisWorkbook.Sheets("FeuilleActivationDesMacros").Visible = xlSheetVeryHidden
End Sub
si les macros ne sont pas activées, la seule feuille affichée du classeur sera celle contenant le message "Vous devez activer les macros".
comment dois je procéder pour que justement si il n'active pas les macro le classeur ne s'ouvre pas? car la si les macro ne sont pas activé ils peuvent voir toutes les feuilles
Bonjour, merci pour la réponse, mais je ne saisi pas trop ou devoir les insérer (je ne suis pas tres doué en bva j'ai suivi des tutos sur le net pour la realisation
dans Thisworkbook j'ai cela:
Private Sub Workbook_open()
Dim Ws As Worksheet
For Each Ws In ThisWorkbook.Worksheets
If Ws.Name <> "Feuil1" Then Ws.Visible = xlSheetVeryHidden
Next Ws
Load UserForm1
UserForm1.show
End Sub
Et le code bouton (userform) login mot de passe j'ai cela:
Private Sub CommandButton1_Click()
If TextBox1 = "" Then
MsgBox "Saisie du nom d'utilisateur obligatoire.", vbInformation
Exit Sub
End If
'Même chose avec TextBox2
If TextBox2 = "" Then
MsgBox "Saisie du mot de passe obligatoire.", vbInformation
Exit Sub
End If
'Lance la fonction VerifMDP en utilisant :
'- TextBox1 comme paramètre "utilisateur"
'- TextBox2 comme paramètre "MdP"
'Si la fonction renvoie FAUX :
If VerifMDP(TextBox1, TextBox2) = False Then
'c'est que le mot de passe ou l'utilisateur est faux donc
'Message à l'utilisateur
MsgBox "Erreur Mot de passe et/ou utilisateur. Merci de saisir à nouveau.", vbInformation
'on vide les 2 textbox
TextBox1 = ""
TextBox2 = ""
'on sort de la procédure
Exit Sub
End If
'A partir d'ici, le code ne se déroule que lorsque mdp et nom sont corrects.
'On peut donc afficher les feuilles correspondant à l'utilisateur saisi
AfficheFeuilles TextBox1
'masque l'UserForm
UserForm1.Hide
Application.Visible = True
End Sub
Private Sub Label1_Click()
End Sub
Private Sub TextBox2_Change()
End Sub
'code se déclenchant à l'ouverture de Userform1
Private Sub UserForm_Initialize()
Application.Visible = False
TextBox1 = ""
TextBox2 = ""
'réglage des propriétés Caption
'de l'Userform :
Me.Caption = "Saisie du Mot de Passe"
'des labels :
Label1.Caption = "Utilisateur"
Label2.Caption = "Mot de Passe"
'du bouton
CommandButton1.Caption = "VALIDER"
'Remplace les caractères saisis dans le textbox2 par des astérisques
Me.TextBox2.PasswordChar = "*"
End Sub
un autre exemple un peu plus abouti en pièce jointe
chaque retour vers la feuille d'Accueil masque automatiquement les autres feuilles
@ Lone Wolf, la procédure est à mettre dans le BeforeSave et surtout pas dans le BeforeClose car cela permettrait de faire une sauvegarde du fichier en ayant des feuilles visibles
merci pour tes explications, effectivement j'ai bien oui j'ai bien un formulaire de ce style, mais je ne vois toujours ou placé le 1 code car en plaçant le premier code je n'ai plus l'userform
mon bva c'est ca:
Private Sub CommandButton1_Click()
If TextBox1 = "" Then
MsgBox "Saisie du nom d'utilisateur obligatoire.", vbInformation
Exit Sub
End If
If TextBox2 = "" Then
MsgBox "Saisie du mot de passe obligatoire.", vbInformation
Exit Sub
End If
If VerifMDP(TextBox1, TextBox2) = False Then
MsgBox "Erreur Mot de passe et/ou utilisateur. Merci de saisir à nouveau.", vbInformation
TextBox1 = ""
TextBox2 = ""
Exit Sub
End If
AfficheFeuilles TextBox1
UserForm1.Hide
Application.Visible = True
End Sub
Private Sub Label1_Click()
End Sub
Private Sub TextBox2_Change()
End Sub
Private Sub UserForm_Initialize()
Application.Visible = False
TextBox1 = ""
TextBox2 = ""
Me.Caption = "Saisie du Mot de Passe"
Label1.Caption = "Utilisateur"
Label2.Caption = "Mot de Passe"
CommandButton1.Caption = "VALIDER"
Me.TextBox2.PasswordChar = "*"
Ajout d'un (faux lien) retour à Accueil et masquage de la feuille Accueil dans les autres feuilles. Bon là je m'arrête, c'est vrai que c'est l'automne et que les feuilles tombent mais... ça commence à faire beaucoup de feuilles LOL 😀
If VerifMDP(TextBox1, TextBox2) = True Then
For i = 2 to ThisWorkbook.Sheets.Count
'Nom de la feuille à modifier
If Sheets(i).Name <> "Accueil" then Sheets(i).Visible = -1
Next i
End If
If VerifMDP(TextBox1, TextBox2) = True Then
For i = 2 to ThisWorkbook.Sheets.Count
'Nom de la feuille à modifier
If Sheets(i).Name <> "Accueil" then Sheets(i).Visible = -1
Next i
End If
si tu aurais mit dès le début le fichier, tu nous aurais épargné tout ce travail. Dans le module 3 tu as cette macro pour afficher les feuilles correspondant au nom de l'utilisateur.
VB:
Sub AfficheFeuilles(Utilisateur As String)
Dim Col As Byte, i As Byte, Lig As Integer
With Sheets("parametrage") 'dans la feuille paramétrage
'comme on va boucler de la colonne 4 à la dernière colonne, on stocke le n° de la dern colonne :
Col = .Cells(1, .Cells.Columns.Count).End(xlToLeft).Column
'on cherche colonne A le nom d'utilisateur saisi et on stocke son num de ligne
Lig = .Columns(1).Cells.Find(Utilisateur, lookat:=xlWhole).Row
For i = 3 To Col
If UCase(.Cells(Lig, i)) = "X" Then 'si on trouve un "X" dans la cellule
Sheets(.Cells(1, i).Value).Visible = True 'on affiche la feuille
Else
Sheets(.Cells(1, i).Value).Visible = xlSheetVeryHidden 'sinon on la masque
End If
Next i
End With
End Sub
Et dans le bouton du formulaire tu as ceci: AfficheFeuilles TextBox1
Je ne comprends pas dans ce cas, ce que tu veux au juste. Le principe des macro que l'on t'as fournit est quasi le même. Je viens de faire un test et la macro m'affiche bien les feuilles correspondantes au X de la feuille parametrage.
- 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