VBA protection feuille aléatoire
Résolu
AMO255
Messages postés
6
Date d'inscription
Statut
Membre
Dernière intervention
-
AMO255 Messages postés 6 Date d'inscription Statut Membre Dernière intervention -
AMO255 Messages postés 6 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
J'écris pour la première fois. VBA est pour moi un mystère, j'apprends à petite dose grâce à l'enregistreur et grâce à ceux qui donnent du temps comme vous pour répondre et partager leur savoir
j'ai créer un vba pour un fichier, que je ne peux pas diffuser, car professionel.
Je bloque au niveau de la protection de la feuille, ça se fait pour certaines personnes pas d'autres...
Je souhaite
- que certaines feuilles soient masquées = ok
- qu'un 1er filtre se fasse sur la colonne A, suivant le nom d'office (excel) et une base de données sur une autre page (feuil2)
= code trouvé sur internet
p.ex. si j'ouvre le fichier et que je suis sur la liste, je ne vois que les cellules de la colonne A qui contiennent "AMO"
- qu'un filtre se fasse sur la colonne C, sur les cellules sans remplissage = ok
- qu'il protège la feuille avec un mot de passe
= ici je coince, j'ai remarqué que si j'enlève mon nom de la liste "utilisateurs" la feuille n'est plus protegée lorsque je l'ouvre. Est-ce que dans le code que j'ai recuperé sur internet, y a qch qui demande ça ?
Je voudrais que le fichier soit protegé de tous.
Que ceux qui sont sur la liste ne puissent pas modifier quoi que ce soit (sauf si elle a le mdp) + que toutes personnes qui ne sont pas sur la liste, ne voit rien. Si A (qui est sur la liste) envoi le fichier à B (qui n'est pas sur la liste) qu'il en voit aucune ligne
Pouvez-vous m'aider svp
Merci d'avance
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
'proteger la feuille avec mdp ici "marson" pour éviter que les personnes annulent le filtre de leur initiale
'Sheets(1).Protect Password:="marson"
End If
End Sub
J'écris pour la première fois. VBA est pour moi un mystère, j'apprends à petite dose grâce à l'enregistreur et grâce à ceux qui donnent du temps comme vous pour répondre et partager leur savoir
j'ai créer un vba pour un fichier, que je ne peux pas diffuser, car professionel.
Je bloque au niveau de la protection de la feuille, ça se fait pour certaines personnes pas d'autres...
Je souhaite
- que certaines feuilles soient masquées = ok
- qu'un 1er filtre se fasse sur la colonne A, suivant le nom d'office (excel) et une base de données sur une autre page (feuil2)
= code trouvé sur internet
p.ex. si j'ouvre le fichier et que je suis sur la liste, je ne vois que les cellules de la colonne A qui contiennent "AMO"
- qu'un filtre se fasse sur la colonne C, sur les cellules sans remplissage = ok
- qu'il protège la feuille avec un mot de passe
= ici je coince, j'ai remarqué que si j'enlève mon nom de la liste "utilisateurs" la feuille n'est plus protegée lorsque je l'ouvre. Est-ce que dans le code que j'ai recuperé sur internet, y a qch qui demande ça ?
Je voudrais que le fichier soit protegé de tous.
Que ceux qui sont sur la liste ne puissent pas modifier quoi que ce soit (sauf si elle a le mdp) + que toutes personnes qui ne sont pas sur la liste, ne voit rien. Si A (qui est sur la liste) envoi le fichier à B (qui n'est pas sur la liste) qu'il en voit aucune ligne
Pouvez-vous m'aider svp
Merci d'avance
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
'proteger la feuille avec mdp ici "marson" pour éviter que les personnes annulent le filtre de leur initiale
'Sheets(1).Protect Password:="marson"
End If
End Sub
A voir également:
- VBA protection feuille aléatoire
- K9 web protection - Télécharger - Contrôle parental
- Bruler feuille de laurier - Guide
- Feuille de pointage excel - Télécharger - Tableur
- Feuille a5 - Guide
- Comment supprimer une feuille sur word - Guide
2 réponses
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)
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
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
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)
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..
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