protection

A

Anita

Guest
Bonjour à tout le forum,
je tourne en rond sur un test.
Je cherche à obliger d'accepter le lancement des macros (sinon affichage feuille1, le reste caché)
si les macros sont acceptés, il y a un test sur le pc utilisé, s'il ne correspond pas alors message 'pas les droits' etfermeture du classeur. Ci après mes vaines élucubrations...

Private Sub Workbook_Open()
Application.ScreenUpdating = False
If Application.UserName = 'p Dupond' Then


For Each Sh In Sheets
Sh.Visible = True
Next Sh
Sheets(1).Visible = xlVeryHidden

Else
For Each Sh In Sheets
Sh.Visible = xlVeryHidden
Next Sh
Sheets(1).Visible = True
End If
End Sub

Ca ne fonctionne pas, hélas.

Un grand merci pour votre aide et agréable journée à vous
 

Jacques87

XLDnaute Accro
Bonjour Anita

En effet cela ne fonctionne pas dans le cas du 'Else'
Tu ne peux pas cacher toutes les feuilles, arrivé à la dernière ça ne marche plus. Ce qui est un peu logique je pense
Par contre je vois que dans ce cas tu veux rendre de nouveau visible la feuille 1
Donc si tu faisais le contraire c'est à dire laisser visible la feuille 1 et rendre invible les suivantes ...

exemple
Else
For I = 2 to Sheets.Count
Sheets(I).Visible = xlVeryHidden
Next I

à essayer

Bon courage
 

Creepy

XLDnaute Accro
Bonjour le Forum, Anita,

Plusieurs remarques :

1 - Tu n'as pas déclaré Sh, c'est bien de le faire quand tu manipules des objets !

2 - Ensuite dans tes lignes For Each tu as fait une erreur : Sh in Sheets n'est pas possible tu dois te positionner au niveau de la Worksheets pour y manipuler des Sheets, comme cela :

Code:
Private Sub Workbook_Open()
Dim sh As Worksheet
Application.ScreenUpdating = False

If Application.UserName = 'p Dupond' Then
   For Each sh In Worksheets
      sh.Visible = True
   Next sh
   Sheets(1).Visible = xlVeryHidden
Else
   For Each sh In Worksheets
      sh.Visible = xlVeryHidden
   Next sh
   Sheets(1).Visible = True
End If
Application.ScreenUpdating = True
End Sub

Il ne faut pas non plus oublier de remettre le screenupdating à true sinon tu n'auras pas d'affichage.

Enfin par cette méthode tu as un message d'erreur. En effet tu cherches à masquer toutes les feuilles puis afficher la 1. Hors Excel ne peux pas masquer toutes les feuilles.

Il faut donc que tu procedes ainsi :

Code:
Private Sub Workbook_Open()
Dim Compteur As Integer
Application.ScreenUpdating = False

If Application.UserName = 'p Dupond' Then
   For Compteur = 2 To Sheets.Count
      Sheets(Compteur).Visible = xlVeryHidden
   Next Compteur
Else
  For Compteur = 2 To Sheets.Count
      Sheets(Compteur).Visible = xlVeryHidden
   Next Compteur
End If
Application.ScreenUpdating = True
End Sub

Comme de toute facon tu souhaites avoir la sheet 1 affichée dans les deux cas on commence à masquer à partir de la sheet 2.

@+

Creepy
 

coco_lapin

XLDnaute Impliqué
Bonjour Jacques87, anita, creepy et le forum.

J'ai essayé le 'If Application.UserName = 'p Dupond' Then' qui m'intéresse.
Sur mon poste, à mon travail, il me renvoie nom prénom alors que je me suis connecté sur le PC avec un autre logon.

Moi, j'utilise une macro pour détecter le logon et comme toi je fais ensuite des traitements.

Regarde ce fil qui en parle.

Ce lien n'existe plus
 
A

Anita

Guest
Merci Creepy, compris tes explications, cependant à l'exécution il y a une erreur sur la ligne :
Sheets(Compteur).Visible = xlVeryHidden

Totalement incompréhensible, ou alors pb de raisonnement.
1) s'il active les macros-->on test son username, s il est correct on affiche toutes les feuilles sauf la feuil1, sinon on masque tout sauf la 1
2)s'il n'active pas les macros alors on masque toutes les feuilles sauf la feuil1 ( le test sur le username est inutile ici).

Je continue à chercher...

Bonne apres midi creepy..aux autres aussi d'ailleur
 

coco_lapin

XLDnaute Impliqué
Non s'ils n'activent pas les macros rien ne se passe étant donné que les macros ne s'activeront pas.

Moi je rends le classeur non utilisable (je masque tout) avant de le diffuser.

S'ils activent les macros je donne les droits que je veux.

S'ils n'activent pas les macros le classeur est inutilisable.
 
A

Anita

Guest
Bonjour cocolapin.
Si cela marche, même sans activer les macros.
essayes ceci:

Private Sub Workbook_Open()
Application.ScreenUpdating = False
For Each sh In Sheets
sh.Visible = True
Next sh
Sheets(1).Visible = xlVeryHidden
End Sub


bonne apres midi
 

mutzik

XLDnaute Barbatruc
Bonjour Anita,

Tu dis : S'il active les macros alors ...
et s'il ne les active pas alors on masque toutes les feuilles . NON, on ne peut pas puisqu'il (l'utilisateur) n'a pas activé les macros

J'ai eu le meme prob et j'ai fait :
- une feuille appellée Top (ou ce que tu veux) dans laquelle je place un dessin (ou un objet ...)
quand je clique sur cet objet, j'affiche mes feuilles et ce dont j'ai besoin pour mon appli

- dans workbook before save, je cache toutes mes feuilles en very hidden (sauf Top)

- je mets un code de protection sur mon projet avec mot de passe

si l'utilisateur active les macros, il peut lancer l'appli en cliquant sur l'objet dans la feuille 'Top'

s'il ne les actives pas, il ne peut que bouger dans la feuille top

et voili ...

Message édité par: mutzik, à: 09/01/2006 14:25
 
A

Anita

Guest
merci Mutzik de tes précisions....
Là suis largué pour de bon et suis pas loin d'abandonner :pinch:
deux conditions à satisfaire simultément, je pensais naïvement que ce n'était pas le bout du monde.....
 

coco_lapin

XLDnaute Impliqué
Je partage l'avis de mutzik, il est hors de question que tu abandonnes.

attend un peu mutzik te prépare quelque chose. je sais ce qu'il va faire et alors tu retrouveras le sourire.

As-tu regardé les fils que j'ai mis en reference dans les messages précédents et les exemples?
 

Discussions similaires

Statistiques des forums

Discussions
312 323
Messages
2 087 291
Membres
103 510
dernier inscrit
baloty