VBA protection feuille aléatoire
Résolu/Fermé
AMO255
Messages postés
6
Date d'inscription
jeudi 15 novembre 2018
Statut
Membre
Dernière intervention
20 novembre 2018
-
15 nov. 2018 à 16:17
AMO255 Messages postés 6 Date d'inscription jeudi 15 novembre 2018 Statut Membre Dernière intervention 20 novembre 2018 - 20 nov. 2018 à 12:44
AMO255 Messages postés 6 Date d'inscription jeudi 15 novembre 2018 Statut Membre Dernière intervention 20 novembre 2018 - 20 nov. 2018 à 12:44
A voir également:
- VBA protection feuille aléatoire
- Feuille de pointage excel - Télécharger - Tableur
- Comment supprimer une feuille sur word - Guide
- Feuille a5 - Guide
- Incompatibilité de type vba ✓ - Forum Programmation
- Feuille diddl la plus rare ✓ - Forum Graphisme
2 réponses
fabien25000
Messages postés
673
Date d'inscription
mercredi 5 octobre 2016
Statut
Membre
Dernière intervention
28 juillet 2022
59
Modifié le 15 nov. 2018 à 16:26
Modifié le 15 nov. 2018 à 16:26
Bonjour
si tu veux que la feuille soit protégée en toute circonstance il faut mettre les lignes de code en dehors du if sinon effectivement la feuille ne se protège que si la condition est remplie
edit et surtout la ligne qui protége la feuille est en commentaire (chose que je n'avait pas vu en l'absence des balises de code)
si tu veux que la feuille soit protégée en toute circonstance il faut mettre les lignes de code en dehors du if sinon effectivement la feuille ne se protège que si la condition est remplie
Private Sub Workbook_Open() Worksheets("Stats 2018").Visible = 0 'masque le feuille Stats 2018 Worksheets("-").Visible = 0 'masque le feuille - Worksheets("+").Visible = 0 'masque le feuille + Worksheets("Feuil2").Visible = 0 'masque le feuille 2 qui contient la table de correspondance ActiveSheet.Range("C:C").AutoFilter Field:=3, Operator:= _ xlFilterNoFill 'chercher l'initiale dans la table de correspondance (ici sur feuille 2) nom = Application.UserName initiales = Application.VLookup(nom, [utilisateurs], 2, False) ' table correspondance If Not IsError(initiales) Then Sheets(1).Cells.AutoFilter Field:=1, Criteria1:=initiales End If 'proteger la feuille avec mdp ici "marson" pour éviter que les personnes annulent le filtre de leur initiale Sheets(1).Protect Password:="marson" End Sub
edit et surtout la ligne qui protége la feuille est en commentaire (chose que je n'avait pas vu en l'absence des balises de code)
fabien25000
Messages postés
673
Date d'inscription
mercredi 5 octobre 2016
Statut
Membre
Dernière intervention
28 juillet 2022
59
Modifié le 16 nov. 2018 à 09:48
Modifié le 16 nov. 2018 à 09:48
Bonjour,
il te faut plusieurs choses pour faire ça :
Code largement issu des conseils de cs_LePivert que je salue
il te faut plusieurs choses pour faire ça :
Private Sub Workbook_BeforeClose(Cancel As Boolean) 'on rétabli à la fermeture ThisWorkbook.IsAddin = True 'et à la fin de ta macro : remettre raccourci clavier Ctrl Pause Application.EnableCancelKey = xlInterrupt 'Ou xlErrorHandler End Sub Private Sub Workbook_Open() Dim tmpmsgbx, i As Integer 'empêcher l'affichage d'un classeur s'il est ouvert alors que l'exécution 'des macros est désactivée dans les options de sécurité ThisWorkbook.IsAddin = False ''au début de ta macro Application.EnableCancelKey = xlDisabled 'empeche raccourci clavier Ctrl Pause Worksheets("Stats 2018").Visible = 0 'masque le feuille Stats 2018 Worksheets("-").Visible = 0 'masque le feuille - Worksheets("+").Visible = 0 'masque le feuille + Worksheets("Feuil2").Visible = 0 'masque le feuille 2 qui contient la table de correspondance Sheets(1).Unprotect Password:="marson" ActiveSheet.Range("C:C").AutoFilter Field:=3, Operator:= _ xlFilterNoFill 'chercher l'initiale dans la table de correspondance (ici sur feuille 2) Nom = Application.UserName initiales = Application.VLookup(Nom, [utilisateurs], 2, False) ' table correspondance If Not IsError(initiales) Then Sheets(1).Cells.AutoFilter Field:=1, Criteria1:=initiales Else MsgBox "vous n'êtes pas pilote Codir et n'avez pas accès au fichier" ThisWorkbook.Close savechanges:=False End If 'proteger la feuille avec mdp ici "marson" pour éviter que les personnes annulent le filtre de leur initiale Sheets(1).Protect Password:="marson" End Sub
Code largement issu des conseils de cs_LePivert que je salue
AMO255
Messages postés
6
Date d'inscription
jeudi 15 novembre 2018
Statut
Membre
Dernière intervention
20 novembre 2018
16 nov. 2018 à 10:24
16 nov. 2018 à 10:24
Le code devient de plus en plus complexe, j'y lis des choses que j'ai jamais vu, comme le Ctrl Pause, mais toujours et encore merci pour ton aide, et à celle de cs_LePivert
J'ai ouvert le fichier, comme personne non autorisé, j'ai le msgbox qui s'ouvre avec le message "vous n'êtes pas autorisé...." quand je clique sur ok il ferme le fichier, c'est super MAIS avant de cliquer sur OK je vois les lignes du fichier, que je peux faire défilier avec la scroll. il execute bien le masquage des feuilles et le filtre sur la colonne mais je vois des lignes
j'ai copier/coller ton code tel quel dans ThisWorkBook. Je dois rien déplacé n'est-ce pas ?
Je demande ça à cause de ceci "'et à la fin de ta macro : remettre raccourci clavier Ctrl Pause
Application.EnableCancelKey = xlInterrupt 'Ou xlErrorHandler
"
il ne m'a pas demandé d'activer le contenu, est-ce pour ça ?
'empêcher l'affichage d'un classeur s'il est ouvert alors que l'exécution des macros est désactivée dans les options de sécurité
Désolé de ne pas mieux maîtriser ceci
J'ai ouvert le fichier, comme personne non autorisé, j'ai le msgbox qui s'ouvre avec le message "vous n'êtes pas autorisé...." quand je clique sur ok il ferme le fichier, c'est super MAIS avant de cliquer sur OK je vois les lignes du fichier, que je peux faire défilier avec la scroll. il execute bien le masquage des feuilles et le filtre sur la colonne mais je vois des lignes
j'ai copier/coller ton code tel quel dans ThisWorkBook. Je dois rien déplacé n'est-ce pas ?
Je demande ça à cause de ceci "'et à la fin de ta macro : remettre raccourci clavier Ctrl Pause
Application.EnableCancelKey = xlInterrupt 'Ou xlErrorHandler
"
il ne m'a pas demandé d'activer le contenu, est-ce pour ça ?
'empêcher l'affichage d'un classeur s'il est ouvert alors que l'exécution des macros est désactivée dans les options de sécurité
Désolé de ne pas mieux maîtriser ceci
AMO255
Messages postés
6
Date d'inscription
jeudi 15 novembre 2018
Statut
Membre
Dernière intervention
20 novembre 2018
16 nov. 2018 à 10:47
16 nov. 2018 à 10:47
pour contourner le problème, sur conseil d'une collegue j'ai ajouté un une feuille qui sera la feuille de garde.
Cette feuille dira "allez sur la feuille FCN"
résultat celui qui est autorisé pourra sélectionner la feuille FNC, celui qui n'est pas autorisé verra la msgbox et ne pourra pas sélectionner la feuille FCN
en attendant un code pour ça :o)
Cette feuille dira "allez sur la feuille FCN"
résultat celui qui est autorisé pourra sélectionner la feuille FNC, celui qui n'est pas autorisé verra la msgbox et ne pourra pas sélectionner la feuille FCN
en attendant un code pour ça :o)
fabien25000
Messages postés
673
Date d'inscription
mercredi 5 octobre 2016
Statut
Membre
Dernière intervention
28 juillet 2022
59
16 nov. 2018 à 10:53
16 nov. 2018 à 10:53
pour la visibilité peut être peux tu créer une Feuille "accueil" et rajouter :
avant la ligne de la msgbox
sans oublier de déclarer au début du code
pour le reste, non tu n'as rien à déplacer
et oui on force à passer par le code pour ouvrir le fichier sinon ça sert à rien de vouloir "sécuriser" tes feuilles en cas d'identifiant non valide
Après on est sur excel c'est fait pour contenir des secrets d'état ou des données de la banque de france..
For Each Ws In Worksheets If Ws.Name <> "Accueil" Then Sheets(Ws.Name).Visible = xlSheetVeryHidden Next Ws
avant la ligne de la msgbox
sans oublier de déclarer au début du code
Dim Ws As Worksheet
pour le reste, non tu n'as rien à déplacer
et oui on force à passer par le code pour ouvrir le fichier sinon ça sert à rien de vouloir "sécuriser" tes feuilles en cas d'identifiant non valide
Après on est sur excel c'est fait pour contenir des secrets d'état ou des données de la banque de france..
AMO255
Messages postés
6
Date d'inscription
jeudi 15 novembre 2018
Statut
Membre
Dernière intervention
20 novembre 2018
16 nov. 2018 à 11:00
16 nov. 2018 à 11:00
Nos message se sont croisés, j'ai donc bien crée une feuille "Accueil"
Je te remercie sincerement de ton aide. Je vais marquer ma question comme résolu.
Encore merci et bon weekend à toi
Je te remercie sincerement de ton aide. Je vais marquer ma question comme résolu.
Encore merci et bon weekend à toi
fabien25000
Messages postés
673
Date d'inscription
mercredi 5 octobre 2016
Statut
Membre
Dernière intervention
28 juillet 2022
59
16 nov. 2018 à 11:02
16 nov. 2018 à 11:02
avec plaisir
16 nov. 2018 à 08:28
J'ai déplacé le End If.
J'ai eu un message d'erreur 1004, car il ne pouvait faire le codeActiveSheet.Range("C:C").AutoFilter Field:=3, Operator:= _
xlFilterNoFill car la feuille était protegée :o)
J'ai donc ajouté au début de mon code : Sheets(1).Unprotect Password:="marson" et ça fonctionne maintenant. Merci beaucoup
Et déplacement le Endi If ça règle également l'autre soucis que j'avais càd : si je ne suis pas sur la liste des autorisés je ne peux pas utiliser le fichier,
est-ce qu'il y a un code pour dire, si je ne suis pas sur la liste, je ne peux voir aucune ligne à l'ouverture du fichier ou éventuellement la ligne 3 sur laquelle j'ai écrit "vous n'êtes pas pilote Codir et n'avez pas accès au fichier" ?
Car si j'enregistre le fichier avec mes lignes et qu'il est envoyé à qqn (non autorisé) il ne pourra pas l'utiliser certe mais verra mes lignes.
Merci à toi