Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1039 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Mot de passe feuille excel

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Mot de passe feuille excel

n°1936168
jcds
Posté le 29-10-2009 à 12:19:42  profilanswer
 

Bonjour,
est ce qu'il est possible de soumettre l'ouverture d'une feuille excel a une identification et un mot de passe? je m'explique, j'ai une application excel au sein de ma boite en réseau local. Cet application contient une feuille par salarié.(Total 15 feuilles). Je souhaiterais que chaque salarié ait accès uniquement à la feuille portant son nom et ceci par mot de passe.Les autres feuilles lui étant masquées. Étant complément novice en vba, est ce que vous pouvez me donner un coup de main.
Merci d'avance


---------------
jcds
mood
Publicité
Posté le 29-10-2009 à 12:19:42  profilanswer
 

n°1936308
kiki29
Posté le 29-10-2009 à 18:36:31  profilanswer
 

Salut, via environ("USERNAME" ) qui te donnera le nom de login windows de l'utilisateur X , attention il existe en VBA un username qui ne donne que le nom donné lors de l'installation dans License d'utilisation accordée à . Via environ("USERNAME" ) tu peux donc sans mot de passe automatiser l'ouverture et n'afficher que la feuille concernant l'utilisateur X
Qqch comme cela , je n'ai plus de réseau de disponible pour le tester , donc à toi de l'adapter à ton contexte


Option Explicit
 
Dim sUser As String
 
Private Sub Workbook_Open()
Dim Ws As Worksheet, i As Long
    sUser = Environ("USERNAME" )
    Application.ScreenUpdating = False
 
    For Each Ws In ThisWorkbook.Worksheets
        If Ws.Name <> sUser Then
            Ws.Visible = xlVeryHidden
        Else
            Ws.Visible = xlSheetVisible
        End If
    Next Ws
 
    Application.ScreenUpdating = True
End Sub


 
Par la suite te renseigner sur CodeName dans le cas d'un changement malencontreux de nom d'onglet , cela te permet de ne pas retoucher au code VBA et d'affecter toujours la bonne feuille à l'utilisateur connecté


Private Sub Workbook_Open()
Dim Ws As Worksheet, i As Long
    sUser = Environ("USERNAME" )
    Application.ScreenUpdating = False
     
    On Error Resume Next
    For Each Ws In ThisWorkbook.Worksheets
        Select Case sUser
            Case "V"
                ShUser1.Visible = xlSheetVisible
            Case "X"
                ShUser2.Visible = xlSheetVisible
            Case "Y"
                ShUser3.Visible = xlSheetVisible
        End Select
        Ws.Visible = xlSheetVeryHidden
    Next Ws
    Application.ScreenUpdating = True
End Sub


 
Pour cela voir http://www.ozgrid.com/VBA/excel-vba-sheet-names.htm
http://www.cpearson.com/excel/codemods.htm


Message édité par kiki29 le 29-10-2009 à 19:37:18
n°1936344
jcds
Posté le 29-10-2009 à 22:26:50  profilanswer
 

Merci Kiki de m'avoir répondu et proposé ce code.Je suis chez moi donc je ne peux l'essayer en réseau!!!! je te donne des nouvelle des demain. Par contre j ai oublié de mentionner un détail qui a une grande importance...outre le salarié qui doit avoir accès a son onglet, le responsable de service doit avoir accès a tout les onglets... j'espère que cela ne représente pas un grand chamboulement dans ton code... Merci d'avance

n°1936346
jcds
Posté le 29-10-2009 à 22:54:22  profilanswer
 

Je reviens avec une petite idée...dis moi ce que tu en pense kiki...On pourrait mettre un mot de passe à l'ouverture du classeur.Si le mot de passe est correct, on a accès à tous les onglets... sinon on applique ton code... c'est a dire qu'à ce moment là, on a accès uniquement à l'onglet portant le nom du salarié authentifié....

n°1936361
kiki29
Posté le 30-10-2009 à 06:21:14  profilanswer
 

Salut, à tester


Option Explicit
 
Private Sub Workbook_Open()
Dim Ws As Worksheet, i As Long
Dim sUSer As String
    sUSer = Environ("USERNAME" )
    Application.ScreenUpdating = False
     
    On Error Resume Next
    For Each Ws In ThisWorkbook.Worksheets
        Select Case sUSer
            Case "Admin"
                ShUser1.Visible = xlSheetVisible
                ShUser2.Visible = xlSheetVisible
                ShUser3.Visible = xlSheetVisible
                Exit For
            Case "V"
                ShUser1.Visible = xlSheetVisible
            Case "X"
                ShUser2.Visible = xlSheetVisible
            Case "Y"
                ShUser3.Visible = xlSheetVisible
        End Select
        Ws.Visible = xlSheetVeryHidden
    Next Ws
    Application.ScreenUpdating = True
End Sub

n°1936485
jcds
Posté le 30-10-2009 à 11:49:58  profilanswer
 

je te remercie kiki pour ta réactivité...Je viens d'essayer le code et des le premier case il me met "erreur de compilation variable inconnue" sur ShUser1. Je te joins ci après l'intégralité de mon code.
Sachant que mes onglets sont nommés  Dupont...Durant...Robert...Villiers
 
Encore une fois merci
 
 
 
Option Explicit
 
Private Sub Workbook_Open()
Dim Ws As Worksheet, i As Long
Dim sUSer As String
    sUSer = Environ("USERNAME" )
    Application.ScreenUpdating = False
     
    On Error Resume Next
    For Each Ws In ThisWorkbook.Worksheets
        Select Case sUSer
            Case "GAP1"
                DUPONT.Visible = xlSheetVisible
                DURANT.Visible = xlSheetVisible
                ROBERT.Visible = xlSheetVisible
    VILLIERS.Visible = xlSheetVisible
                Exit For
   Case "GAP2"
                DUPONT.Visible = xlSheetVisible
                DURANT.Visible = xlSheetVisible
                ROBERT.Visible = xlSheetVisible
    VILLIERS.Visible = xlSheetVisible
                Exit For
 
   Case "INFO"
                DUPONT.Visible = xlSheetVisible
                DURANT.Visible = xlSheetVisible
                ROBERT.Visible = xlSheetVisible
    VILLIERS.Visible = xlSheetVisible
                Exit For
 
            Case "DUPONT"
                DUPONT.Visible = xlSheetVisible
            Case "DURANT"
                DURANT.Visible = xlSheetVisible
            Case "ROBERT"
       ROBERT.Visible = xlSheetVisible
   Case "VILLIERS"
                VILLIERS.Visible = xlSheetVisible
   
        End Select
        Ws.Visible = xlSheetVeryHidden
    Next Ws
    Application.ScreenUpdating = True
End Sub
 
 
 

n°1936510
kiki29
Posté le 30-10-2009 à 12:21:09  profilanswer
 

Salut,c'est normal voir plus haut http://www.ozgrid.com/VBA/excel-vba-sheet-names.htm  
http://www.cpearson.com/excel/codemods.htm
sinon voir snapshot sur http://cjoint.com/?kEmuTCePEe
 
Autrement dit aller sous VBE ( Alt+F11 )
Afficher la Fenêtre Prorpiétés ( F4 )
Sélectionner DUPONT ( nom d'onglet ) par exemple
Dans la fenêtre Propriétés sélectionner (Name) et remplacer  
"FeuilXYZ" par ShUser1 etc
 
et je rajoute une couche http://cjoint.com/?kEmNY8MnGc


Message édité par kiki29 le 30-10-2009 à 12:40:16
n°1938874
jcds
Posté le 09-11-2009 à 10:17:06  profilanswer
 

Cool ca marche Kiki... de retour de congés ce matin j'ai essayé et ca marche. Encore Merci!!!!!!! Je crois que je vais m y mettre serieux car on peut faire pas mal de choses!!!! Euh tout petit problème qd  la sécurité macro est très elevée, il n'excute pas la macro et ouvre au nom de la dernière personne ayant eu accès!!!  idem lorsque un nom de connexion ne possède pas d'onglet!!! Exemple si j'ouvre une connexion au nom de Durant et que Durant n'a pas d'onglet sur le fichier excel...il se connectera directement sur l'onglet du dernier ayant eu accès au fichier...Je ne sais pas tout ça est clair pour toi... Merci encore une fois

n°1939108
kiki29
Posté le 09-11-2009 à 18:03:44  profilanswer
 

Salut, je te propose cela : l'ajout d'une fonction qui vérifie l'existence de l'onglet et qui en cas de non existence de cet onglet avertit l'utilisateur et ferme l'application sans rien sauver
http://cjoint.com/?ljsGNROUWt
Juste une remarque : un classeur Excel de n feuilles doit en avoir au moins une de visible
 
Pour le niveau de sécurité il te faudra créer un certificat : voir http://vb.developpez.com/faqvba/?page=2#selfcert
http://www.developpez.net/forums/d [...] rtificats/


Message édité par kiki29 le 09-11-2009 à 20:56:40
n°1939281
jcds
Posté le 10-11-2009 à 09:35:30  profilanswer
 

Ok. J'essaie et je te tiens au courant... Merci...Merci...Merci!!!!!!

mood
Publicité
Posté le 10-11-2009 à 09:35:30  profilanswer
 

n°1939319
jcds
Posté le 10-11-2009 à 10:37:04  profilanswer
 

Kiki...re... je viens d'essayer avec la fonction qui vérifie l'existence de l'onglet...à priori, il exécute le if et me sort de l'application à tous les coups même si l'onglet existe.

n°1939455
kiki29
Posté le 10-11-2009 à 17:42:00  profilanswer
 

Re, à tester http://cjoint.com/?lkrPfaiC12
Autant pour moi, trop pressé, il faut tenir compte des administrateurs qui eux n'ont pas d'onglets mais doivent avoir accès à ceux des utilisateurs n'est ce pas ?


    .....
    sUSer = Environ("USERNAME" )
 
    If sUSer <> "GAP1" And sUSer <> "GAP2" And sUSer <> "INFO" Then
        If FeuilleExiste(sUSer) = False Then
            MsgBox "Onglet inexistant : Contacter votre administrateur", vbOKOnly
            ThisWorkbook.Close False
            Exit Sub
        End If
    End If
    .....


Message édité par kiki29 le 10-11-2009 à 17:48:46
n°1948307
jcds
Posté le 08-12-2009 à 11:25:57  profilanswer
 

Je reviens ici pour te dire Kiki que c'est bon...Ça marche. Désole de ne pas avoir donné de nouvelles plus tôt mais par manque de temps, je n'ai pas pu tester avant cette semaine. Encore merci pour ton aide très précieuse.

n°1948645
Laoo
Posté le 09-12-2009 à 10:53:13  profilanswer
 

Bonjour
 
Je n'ai pas tout regardé du développement qui me semble très intéressant, mais je voudrais soumettre une suggestion, ce serait de mettre en début de macro la ligne suivante, qui a pour effet d'empêcher l'interruption de la macro, volontaire ou non, et donc l'ouverture du module avec apparition du code.
 
Application.EnableCancelKey = xlDisabled  
 
Qu'en penses-tu, Kiki?
 
Cordialement


---------------
Olympus OM-D  EM-5 + 14-42
n°1948656
Laoo
Posté le 09-12-2009 à 11:07:24  profilanswer
 

Précision: Pour pouvoir observer et corriger un éventuel dysfonctionnement de la macro, cette formule n'est à activer que elle  fonctionne parfaitement.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Mot de passe feuille excel

 

Sujets relatifs
tkinter et parcourir / excelMise en forme conditionnelle dans Excel
[excel] comment émettre un soncomment créer un bouton pour lancer mon programme depuis Excel
[VBA] Plantage Excel avec Worksheet_Changee-mailing Excel + Thunderbird
Macro Excel pour ajouter en caractère dans les cellules.Macro excel interrogeant un tableau par le nom de la colonne
[Excel]Aide au Retour à l'Emploiinsertion image dans fichier excel
Plus de sujets relatifs à : Mot de passe feuille excel


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR