Macro Excel : Accès restreint par onglet suivant utilisateur

Macro Excel : Accès restreint par onglet suivant utilisateur - VB/VBA/VBS - Programmation

Marsh Posté le 19-10-2010 à 13:34:31    

Bonjour à tous,
 
je viens de monter un fichier excel avec plusieurs onglets et je voudrais pour chaque personne entrant dans ce fichier qu'elle soit automatiquement redirigée vers l'onglet qui la concerne tout en ne voyant pas les autres onglets. Sachant que certaines personnes peuvent avoir accès à plusieurs onglets à la fois.
J'ai trouvé un moyen de "décacher" un onglet grâce à un mot de passe en actionnant un bouton sur l'onglet sommaire, mais à part faire un bouton par personne (or j'ai une centaine de personnes différentes) et donc une macro par personne, je ne vois pas comment je pourrais faire plus simplement.
 
peut-être avec une table de corrsepondance qui reprendrait les utilisateurs, leur mot de passe et les onglets auquels ils ont accès, mais étant débutant en VBA je ne sais pas comment la mettre en place.
 
Merci d'avance +++ pour votre aide !!

Message cité 1 fois
Message édité par Emetom le 19-10-2010 à 14:21:40
Reply

Marsh Posté le 19-10-2010 à 13:34:31   

Reply

Marsh Posté le 19-10-2010 à 14:38:16    

Emetom a écrit :

peut-être avec une table de corrsepondance qui reprendrait les utilisateurs, leur mot de passe et les onglets auquels ils ont accès, mais étant débutant en VBA je ne sais pas comment la mettre en place.
 
Merci d'avance +++ pour votre aide !!


 
je ne vois que ca aussi au plus simple.
 
Un onglet specifique, avec le nom du user, son mdp et les onglets auquel il a droit.
A l'ouverture, tu demandes le user et le mdp avec un userform "bateau"
Tu fais un filtre sur ton onglet avec les infos saisies
Et tu boucles sur les lignes filtrees pour afficher ou pas les onglets.


---------------
Soyez malin, louez entre voisins !
Reply

Marsh Posté le 19-10-2010 à 19:29:31    

Salut,peut-être via Environ("USERNAME" ) ? et surtout pas Application.UserName.Voir aide en ligne
chercher dans http://www.google.fr/search?hl=fr& [...] =&gs_rfai=


Message édité par kiki29 le 19-10-2010 à 19:45:31
Reply

Marsh Posté le 21-10-2010 à 17:35:21    

Bonjour,
 
Merci pour votre réponse, je vous avoue que je n'ai pas tout compris.
 
En fait j'ai essayé de trouvé un moyen plus simple qui serait de cacher mes onglets (Région1, Région2, ..., Région11), mettre en mot de passe en cellule A1 de chacun, et suivant le mot de passe que rentre l'utilisateur l'onglet correspondant s'affichera.
J'ai donc écrit le code suivant :  
Sub Macro1()
 
'Mise en place d'un mot de passe par Onglet Région
 
Dim Message$, Titre$, Def$, WS$, PassW$
 
'Saisie du mot de passe
Message = "Entrez un mot de passe :"
Titre = "Accès réservé"
Def = "*****"
 
Dim i As Byte
For i = 1 To 11
    If Worksheets("Région" & i).Cells(1, 1).Value <> InputBox(Message, Titre, Def) Then
        If Worksheets("Région" & i).Visible = True Then
            Worksheets("Région" & i) = xlSheetHidden
        End If
    Else: Worksheets("Région" & i).Visible = xlSheetVisible
    End If
Next i
 
End Sub
 
mais j'ai pas mal de problèmen dont le fait qu'il va me redemander le mot de passe 11 fois et je ne sais pas comment arrêter la boucle une fois qu'un onglet a été affiché.
 
Comme je vous l'ai dit, je me suis mis à VBA il y a exactement 2 jours et j'ai l'impression que ma tête va exploser !!!!
 
Donc merci d'avance pour votre aide, car là je suis pommé...

Reply

Marsh Posté le 21-10-2010 à 18:30:09    

Faut le mettre dans le WorkBook_Open de ThisWorkBook et pas dans une macro d'un module.
 
Et perso j'aurais fait une feuille cachée, avec 3 colonnes. User, mot de passe, feuille
Imaginons que cette feuille cachée se nomme "DroitsUsers"
 

Code :
  1. Private Sub Workbook_Open()
  2.     On Error Resume Next
  3.     Application.ScreenUpdating = False
  4.    
  5. 'on saisit le user
  6.     User = InputBox("Veuillez saisir votre nom d'utilisateur", "Utilisateur" )
  7. 'on saisit le mot de passe
  8.     MDP = InputBox("Veuillez saisir votre nom d'utilisateur", "Utilisateur" )
  9.    
  10. 'on cherche le mot de passe dans la feuille DroitsUsers en fonction du user saisi
  11.     SchMDP = WorksheetFunction.VLookup(User, Sheets("DroitsUsers" ).Range("A2:B65536" ), 2, False)
  12. 'on cherche la feuille dans DroitsUsers en fonction du user saisi
  13.     SchFeuil = WorksheetFunction.VLookup(User, Sheets("DroitsUsers" ).Range("A2:C65536" ), 3, False)
  14.    
  15. 'si le mdp saisi = le mdp trouvé dans la feuille DroitsUsers
  16.     If MDP = SchMDP Then
  17. 'on affiche la feuille correspondante
  18.         Sheets(SchFeuil).Visible = True
  19. 'on va dessus
  20.         Sheets(SchFeuil).Activate
  21.     End If
  22.    
  23. 'on planque toutes les autres
  24.     For x = 1 To ThisWorkbook.Sheets.Count
  25.         If Sheets(x).Name <> SchFeuil Then Sheets(x).Visible = xlSheetVeryHidden
  26.     Next
  27.     Application.ScreenUpdating = True
  28.    
  29. End Sub


 
Et toi tu n'as qu'a remplir ta feuille DroitsUsers comme ca par exemple :

Utilisateur Mot de passe feuille autorisee
toto          totomdp          Feuil1
tata          tatamdp          Feuil2
tutu          tutumdp          Feuil3


 
 
Edit : a toi de gerer si le mot de passe est pas bon etc. Mais ca, ca fonctionne nickel
Si je rentre en user : toto
et en mdp : totomdp
il me planque toutes les feuilles sauf Feuil1 et me met dessus


Message édité par SuppotDeSaTante le 21-10-2010 à 18:33:38

---------------
Soyez malin, louez entre voisins !
Reply

Marsh Posté le 22-10-2010 à 11:49:29    

Super génial, merci beaucoup c'est top!!!
Juste un petit supplément :  
- Est-ce que je peux recacher les feuilles à cacher automatiquement quand on ferme le fichier ?
- Si une personne à accès à plusieurs feuilles et que je le mets à la suite genre
toto           totomdp       Feuil1
toto           totomdp       Feuil2
Il ne m'ouvre que la première feuille. Comment faire pour qu'elles s'ouvrent toutes en une fois ?
 
Merci d'avance pour ces nouvelles infos et en tous cas déjà merci BEAUCOUP pour la précédente réponse. En tant que débutant je trouve ça vraiment magique les possibilités qu'ouvrent VBA !! :)
(c'est mieux que Noël !!)
 
 

Reply

Marsh Posté le 22-10-2010 à 12:01:35    

Mieux que Noel ? Ah non quand meme pas !!! ;)
 
Alors j'avais pas vu la possibilité de plusieurs onglets... Mea Culpa.
 
Je regarde ca ;)
 
Pour replanquer tout le reste... Mouai, je vois pas trop l'interet etant donné que quand tu ouvres le fichier, normalement rien ne s'affiche et que tu dois gerer le cas de mauvais mot de passe et donc fermer le fichier.
Mais si ca te rassure, pourquoi pas :jap:


---------------
Soyez malin, louez entre voisins !
Reply

Marsh Posté le 22-10-2010 à 12:12:34    

En fait c'est juste que si un User qui a accès à l'onglet Region1 ferme le fichier après avoir regardé son onglet et qu'un autre User qui n'est pas sensé avoir accès à l'onglet Region1 l'ouvre derrière, ben il le vera... avant d'avoir cliqué sur le bouton pour rentrer son mot de passe et tout.
 
En tous cas merci pour la rapidité !

Reply

Marsh Posté le 22-10-2010 à 12:36:04    

Non il ne le verra pas normalement. Le Application.Screenupdating=false fait que la feuille n'est pas visible. Il affiche la boite de dialogue avant de charger la feuille. Mais on va contourner le souci ;)
 
Il te faut donc, un onglet qui se nomme "DroitsUsers" sur lequel tu definis en colonneA les users, en ColonneB les mdp et en ColonneC la feuille autorisee.
Sur la ligne1 tu mets les intitulés des colonnes, exemple : users, mdp, feuille
Donc tes infos commencent a la ligne2
 
Il te faut, justement pour répondre a ta question, un autre onglet qu'on va appeler "Vierge"
C'est sur celui la qu'on va atterir a l'ouverture du fichier, et qu'on va activer a la fermeture.
 

Code :
  1. Private Sub Workbook_BeforeClose(Cancel As Boolean)
  2. 'on affiche la feuille Vierge
  3.    Sheets("Vierge" ).Visible = True
  4. 'on planque toutes les autres feuilles sauf Vierge
  5.    For x = 1 To ThisWorkbook.Sheets.Count
  6.        If Sheets(x).Name <> "Vierge" Then Sheets(x).Visible = xlSheetVeryHidden
  7.    Next
  8.  
  9. End Sub
Code :
  1. Private Sub Workbook_Open()
  2.    On Error Resume Next
  3.    Application.ScreenUpdating = False
  4. 'on defini un pointeur
  5.    Pointeur = 0
  6.    
  7. 'on affiche la feuille Vierge
  8.    Sheets("Vierge" ).Visible = True
  9. 'on va dessus
  10.    Sheets("Vierge" ).Activate
  11. 'on planque toutes les autres
  12.    For x = 1 To ThisWorkbook.Sheets.Count
  13.        If Sheets(x).Name <> "Vierge" Then Sheets(x).Visible = xlSheetVeryHidden
  14.    Next
  15.  
  16. 'on saisit le user
  17.    User = InputBox("Veuillez saisir votre nom d'utilisateur", "Utilisateur" )
  18. 'on saisit le mot de passe
  19.    MDP = InputBox("Veuillez saisir votre mot de passe", "Mot de passe" )
  20.  
  21. 'Derniere ligne du tableau de la feuille DroitsUsers pour boucler dessus
  22.    DerLigne = Sheets("DroitsUsers" ).Range("A65536" ).End(xlUp).Row
  23.  
  24. 'on boucle pour trouver les occurences, x=2 car je pars du principe que la premiere ligne _
  25. contient les entetes de colonne
  26.    For x = 2 To DerLigne
  27. 'si ce qu'il y a dans la colonne1 (Colonne A : user) = le user saisi _
  28. ET ce qu'il y a dans la colonne2 (Colonne B : mot de passe)
  29.        If Worksheets("DroitsUsers" ).Cells(x, 1) = User And Worksheets("DroitsUsers" ).Cells(x, 2) = MDP Then
  30. 'on affiche la feuille définié en colonne3 (Colonne C : Onglet autorisé)
  31. 'on affiche la feuille correspondante
  32.            FeuilleVisible = Worksheets("DroitsUsers" ).Cells(x, 3)
  33.            Sheets(FeuilleVisible).Visible = True
  34. 'on va dessus
  35.            Sheets(FeuilleVisible).Activate
  36. 'on se met un pointeur pour voir si on trouve quelque chose, si on trouve rien on quittera
  37.            Pointeur = Pointeur + 1
  38.        End If
  39.  
  40.    Next x
  41.  
  42. 'Si le pointeur est 0 on ferme le fichier.
  43.    If Pointeur = 0 Then
  44.        MsgBox "Utilisateur ou mot de passe non valide" & vbCrLf & vbCrLf & "Le fichier va se fermer", vbCritical + vbOKOnly, "Sécurité"
  45.        ActiveWorkbook.Close SaveChanges:=False
  46.    End If
  47.  
  48. 'on planque la feuille Vierge
  49.    Sheets("Vierge" ).Visible = 2
  50.  
  51.    Application.ScreenUpdating = True
  52.  
  53. End Sub


Message édité par SuppotDeSaTante le 22-10-2010 à 12:40:21

---------------
Soyez malin, louez entre voisins !
Reply

Marsh Posté le 22-10-2010 à 12:38:54    

Fin des Edit ;)
 
Donc si j'ai ce tableau :

Utilisateur Mot de passe feuille autorisee
toto          totomdp          Feuil1
tata          tatamdp          Feuil2
tutu          tutumdp          Feuil3
toto          totomdp          Feuil4


Si je rentre :
user : toto
mdp : totomdp
il m'affiche bien ET la Feuil1 ET la Feuil4
 
Et pas besoin que le tableau soit trié etc. La boucle recherche sur tout le tableau du début a la fin.
 
Et donc si tu as pigé le principe tu pourrais avoir le meme utilisateur Toto, mais avec un mdp pour région1 et un autre mdp pour région2 etc.
 
 
:jap:

Message cité 2 fois
Message édité par SuppotDeSaTante le 22-10-2010 à 12:49:26

---------------
Soyez malin, louez entre voisins !
Reply

Marsh Posté le 22-10-2010 à 12:38:54   

Reply

Marsh Posté le 26-10-2010 à 11:05:32    

Pas de nouvelles, bonnes nouvelles.
 
Topic clos pour ma part.
 
:jap:


---------------
Soyez malin, louez entre voisins !
Reply

Marsh Posté le 26-10-2010 à 11:33:36    

Oui Oui Oui !!
Merci BEAUCOUP pour ton aide! tout fonctionne à merveilles :)

Reply

Marsh Posté le 17-04-2015 à 18:57:39    

Bonjour à tous, bien que le sujet soit ancien j’espère que quelqu’un pourra m’aider. J’ai récemment commencé un travail sur une procédure d’achat, j’ai trouvé un programme qui correspondait plus ou moins à mes besoins que j’ai par la suite un peu modifié et souhaite maintenant  le compléter par un principe d’utilisateur du fichier « Pass Word » (piéce jointe) que j'ai trouvé dans une discussion sur internet et se rapprochant de votre sujet.  Je découvre tout juste les principes de VBA , j’ai essayé de copier ce qui se trouvait dans ce fichier mais problème :  
 
- Toute mes feuilles n’apparaissent pas pour mon utilisateur bien que dans ma page « DroitsUsers » toutes les cases représentant les feuille soient cochés ( ce sont les pages « factures » et « carburant » .
 
- A l’ouverture, l’erreur d’exécution ‘9’ : l’indice n’appartient pas à la sélection apparait , dans le débogage apparait surligné en jaune ceci :
 ActiveWorkbook.Sheets(Trim("" & R(1, c))).Visible = True
 
Ça fait maintenant plusieurs jours que je travaille sur ces problèmes mais je ne trouve aucune solutions, si quelqu’un pourrais m’éclairer , n'arrivant pas à mettre mon fichier vierge à disposition voici un lien où il est également posté:  
 
http://www.developpez.net/forums/d [...] e-onglets/  
 
Merci d'avance, cordialement.


Message édité par milou12 le 17-04-2015 à 19:13:11
Reply

Marsh Posté le 18-04-2015 à 23:44:10    

Hello
 
J'ai pas regardé le fichier, suis avec mon tel, mais la variable 'c' renvoie quoi ?


---------------
Soyez malin, louez entre voisins !
Reply

Marsh Posté le 30-06-2015 à 16:22:25    

SuppotDeSaTante a écrit :

Fin des Edit ;)
 
Donc si j'ai ce tableau :

Utilisateur Mot de passe feuille autorisee
toto          totomdp          Feuil1
tata          tatamdp          Feuil2
tutu          tutumdp          Feuil3
toto          totomdp          Feuil4


Si je rentre :
user : toto
mdp : totomdp
il m'affiche bien ET la Feuil1 ET la Feuil4
 
Et pas besoin que le tableau soit trié etc. La boucle recherche sur tout le tableau du début a la fin.
 
Et donc si tu as pigé le principe tu pourrais avoir le meme utilisateur Toto, mais avec un mdp pour région1 et un autre mdp pour région2 etc.
 
 
:jap:


 
Bonjour
je viens littéralement de pomper le code généreusement proposé plus haut et tu es vraiment un as !
 
petite question supplémentaire : dans la liste des users peut on attribuer des droits de type "administrateur" pour avoir accès à tous les onglets sans avoir à rajouter une ligne de feuille autorisée à chaque ajout de nouvel onglet.

Reply

Marsh Posté le 30-06-2015 à 16:48:24    

SuppotDeSaTante a écrit :

Fin des Edit ;)
 
Donc si j'ai ce tableau :

Utilisateur Mot de passe feuille autorisee
toto          totomdp          Feuil1
tata          tatamdp          Feuil2
tutu          tutumdp          Feuil3
toto          totomdp          Feuil4


Si je rentre :
user : toto
mdp : totomdp
il m'affiche bien ET la Feuil1 ET la Feuil4
 
Et pas besoin que le tableau soit trié etc. La boucle recherche sur tout le tableau du début a la fin.
 
Et donc si tu as pigé le principe tu pourrais avoir le meme utilisateur Toto, mais avec un mdp pour région1 et un autre mdp pour région2 etc.
 
 
:jap:


 
Bonjour
je viens littéralement de pomper le code généreusement proposé plus haut et tu es vraiment un as !
 
petite question supplémentaire : dans la liste des users peut on attribuer des droits de type "administrateur" pour avoir accès à tous les onglets sans avoir à rajouter une ligne de feuille autorisée à chaque ajout de nouvel onglet.

Reply

Marsh Posté le 30-06-2015 à 23:25:45    

Hello
 
Suis avec mon tél, comme toujours...
 
Mais, un truc comme ça devrait marcher.
A ajouter juste avant End If ligne 38
       

Code :
  1. elseIf Worksheets("DroitsUsers" ).Cells(x, 1) = "Admin" And Worksheets("DroitsUsers" ).Cells(x, 2) = "MdpAdmin" Then
  2.        For x = 1 To ThisWorkbook.Sheets.Count
  3.             If Sheets(x).Name <> "Vierge" Then Sheets(x).Visible = True
  4.        Next
  5.        Application.ScreenUpdating = True
  6.        Exit sub


 
Tu remplaces "admin" et "MdpAdmin" en ligne 1 par les log et mdp que tu souhaites, en veillant bien à laisser les guillemets
 
 
:jap:


---------------
Soyez malin, louez entre voisins !
Reply

Marsh Posté le 03-07-2015 à 16:34:14    

SuppotDeSaTante a écrit :

Hello
 
Suis avec mon tél, comme toujours...
 
Mais, un truc comme ça devrait marcher.
A ajouter juste avant End If ligne 38
       

Code :
  1. elseIf Worksheets("DroitsUsers" ).Cells(x, 1) = "Admin" And Worksheets("DroitsUsers" ).Cells(x, 2) = "MdpAdmin" Then
  2.        For x = 1 To ThisWorkbook.Sheets.Count
  3.             If Sheets(x).Name <> "Vierge" Then Sheets(x).Visible = True
  4.        Next
  5.        Application.ScreenUpdating = True
  6.        Exit sub


 
Tu remplaces "admin" et "MdpAdmin" en ligne 1 par les log et mdp que tu souhaites, en veillant bien à laisser les guillemets
 
 
:jap:


 
 
merci, juste un souci :  
une fenetre s'ouvre dès l'ouverture du fichier "erreur de compilation, variable déja utilisée"
et le "For x = 1 "de la ligne "For x = 1 To ThisWorkbook.Sheets.Count" est surligné...

Reply

Marsh Posté le 03-07-2015 à 17:42:17    

Ah oui suis con
Tu mets une autre lettre à la place de x
 
elseIf Worksheets("DroitsUsers" ).Cells(x, 1) = "Admin" And Worksheets("DroitsUsers" ).Cells(x, 2) = "MdpAdmin" Then
        For i= 1 To ThisWorkbook.Sheets.Count
             If Sheets(i).Name <> "Vierge" Then Sheets(i).Visible = True
        Next
        Application.ScreenUpdating = True
        Exit sub
 
:jap:


---------------
Soyez malin, louez entre voisins !
Reply

Marsh Posté le 05-06-2016 à 09:35:28    

Bonjour,
 
Besoin d aide...  
 
J ai bien copier les codes mais il y as un bug... snif.
 
Mon souhait serais de restreindre l accès des joueurs à 2 onglet "accueil " et "Joueurs x" afin de rentrée des pronostics pour l euro.
 
J ai bien copier les codes mais avec la 1er solution la page "joueurs 1 " s ouvre bien mais lorsque que le parieurs enregistre sont Paris le fichier redémarre sur sa page et il n y as plus qu'un seule onglet dans le classeur exel.
 
Avec les codes de la 2eme solution il y as une erreur il me dit que l utilisateurs ouest mot de passe ne correspond pas..
 
Est ce que vous pouvez me aider merci bcp...

Reply

Marsh Posté le 23-12-2016 à 21:33:39    

Bonsoir,
 
Je déterre le sujet.
 
Je vous remercie beaucoup ça fonctionne parfaitement.
 
J'aimerais ajouter des améliorations.
 

Code :
  1. 'on planque la feuille Vierge
  2.     Sheets("Vierge" ).Visible = 2
  3.     Application.ScreenUpdating = True


 
1/ Comment désactiver le plantage de la feuille vierge sauf pour moi ?
 
2/ Est-il possible en ajoutant en cellule D1 par exemple une date et après cette date, la personne n'a plus les droits pour se connecter ?
 
3/ Comment désactiver VBA sans perdre la programmation ?
 
Joyeuses fêtes  :)


Message édité par onryou le 23-12-2016 à 21:35:24
Reply

Marsh Posté le 04-01-2017 à 09:41:59    

Bonjour,  
J'ai moi aussi essayé de récupérer les codes pour faire un peu le même travail mais je suis incapable de modifier ce genre de code sans que cela me retourne des messages d'erreur  :cry:  
 
J'ai une feuille que j'ai appelé mdp (pour mot de passe) avec en colonne A les nom des utilisateurs (User) en colonne B les mot de passe (Mdp) et en colonne C l'onglet que la personne a le droit de voir.  
L'admin, dont le mdp est mdpadmin doit voir tous les onglets.
 
Dès l'ouverture du document => feuille blanche et demande du nom d'utilisateur et mdp (si pas de correspondance dans l'onglet mdp, un message qui dit que le fichier va se fermer.
 
Dans l'onglet, des dates en colonne A (dont celle du jour) et des horaires à saisir colonnes C, D, G
Je voudrais que la personne ne puisse saisir que sur la ligne correspondant à la date du jour
 
Merci pour votre aide

Reply

Marsh Posté le 04-01-2017 à 15:06:14    

re-bonjour,  
J'ai commencé donc je vous joins un lien à mon fichier dans lequel vous trouverez la macro:
https://mon-partage.fr/f/OtG5UjA4/
 
Pour ouvrir le fichier: User ADMIN et mot de passe ADMIN
 
Il me reste à rajouter qq part dans le code qu'on ne peut modifier que si la date correspond à la date du jour (sauf pour ADMIN qui peut tout faire)
 
Merci pour votre aide
 
Marjorie

Reply

Marsh Posté le 26-04-2017 à 10:23:57    

Bonjour a tous
petit up pour ce sujet. Je voudrai également utilisé ce code, mais j'y arrive pas. Si quelqu'un pouvait me donner un petit coup de main. Les user, mdp et feuille autorisée sont sur l'onglet DroitsUser

 

https://mon-partage.fr/f/hmTBNQiP/

 

Merci a vous ;)


Message édité par kobold72 le 26-04-2017 à 10:24:25
Reply

Marsh Posté le 26-04-2017 à 23:31:51    

Explique ce qu'il ne marche pas...
 [:le colonel moutarde:5]


---------------
Soyez malin, louez entre voisins !
Reply

Marsh Posté le 27-04-2017 à 15:29:38    

Non en fait, simple erreur d'écriture sur mon..... onglet...
Le boulet. Désolé  :whistle:  :whistle:  :whistle:

Reply

Marsh Posté le 22-06-2017 à 10:54:53    

SuppotDeSaTante a écrit :

Ah oui suis con
Tu mets une autre lettre à la place de x
 
elseIf Worksheets("DroitsUsers" ).Cells(x, 1) = "Admin" And Worksheets("DroitsUsers" ).Cells(x, 2) = "MdpAdmin" Then
        For i= 1 To ThisWorkbook.Sheets.Count
             If Sheets(i).Name <> "Vierge" Then Sheets(i).Visible = True
        Next
        Application.ScreenUpdating = True
        Exit sub
 
:jap:


 
Bonjour,
tout d'abord merci à dje69r pour tes posts, tu m'as apporté une aide incroyable
chez moi, pour la partie ''admin'' ça ne fonctionnait pas, j'ai modifié le code ainsi pour que cela fonctionne:
 
        ElseIf User = "admin" And MDP = "mdpadmin" Then
            For i = 1 To ThisWorkbook.Sheets.Count
             If Sheets(i).Name <> "Intro" Then Sheets(i).Visible = True
            Next
            Application.ScreenUpdating = True
        Exit Sub
 
en effet, de pointer sur Worksheets("DroitsUsers" ).Cells(x, 1), ça trouvait forcément le user et mdp

Reply

Marsh Posté le 23-06-2017 à 09:19:21    

Hum, en relisant, c'est plus logique comme tu fais
Mais tu ne dois pas stocker le compte et mdp admin, ce qui n'est pas forcément un mal
:jap:


---------------
Soyez malin, louez entre voisins !
Reply

Marsh Posté le 27-06-2017 à 14:14:42    

Bonjour a tous et a toutes
 
J ai copie le code dans this work book
 
bien cree VIERGE DroitsUsers
 
 
 
mais je n ai que feuille vierge qui s affiche
 
je ne comprends pas
 
Code :
Private Sub Workbook_BeforeClose(Cancel As Boolean)
'on affiche la feuille Vierge
    Sheets("Vierge" ).Visible = True
'on planque toutes les autres feuilles sauf Vierge
    For x = 1 To ThisWorkbook.Sheets.Count
        If Sheets(x).Name <> "Vierge" Then Sheets(x).Visible = xlSheetVeryHidden
    Next
 
End Sub
 
 
 
Code :
Private Sub Workbook_Open()
    On Error Resume Next
    Application.ScreenUpdating = False
'on defini un pointeur
    Pointeur = 0
     
'on affiche la feuille Vierge
    Sheets("Vierge" ).Visible = True
'on va dessus
    Sheets("Vierge" ).Activate
'on planque toutes les autres
    For x = 1 To ThisWorkbook.Sheets.Count
        If Sheets(x).Name <> "Vierge" Then Sheets(x).Visible = xlSheetVeryHidden
    Next
   
'on saisit le user
    User = InputBox("Veuillez saisir votre nom d'utilisateur", "Utilisateur" )
'on saisit le mot de passe
    MDP = InputBox("Veuillez saisir votre mot de passe", "Mot de passe" )
   
'Derniere ligne du tableau de la feuille DroitsUsers pour boucler dessus
    DerLigne = Sheets("DroitsUsers" ).Range("A65536" ).End(xlUp).Row
   
'on boucle pour trouver les occurences, x=2 car je pars du principe que la premiere ligne _
contient les entetes de colonne
    For x = 2 To DerLigne
'si ce qu'il y a dans la colonne1 (Colonne A : user) = le user saisi _
ET ce qu'il y a dans la colonne2 (Colonne B : mot de passe)
        If Worksheets("DroitsUsers" ).Cells(x, 1) = User And Worksheets("DroitsUsers" ).Cells(x, 2) = MDP Then
'on affiche la feuille définié en colonne3 (Colonne C : Onglet autorisé)
'on affiche la feuille correspondante
            FeuilleVisible = Worksheets("DroitsUsers" ).Cells(x, 3)
            Sheets(FeuilleVisible).Visible = True
'on va dessus
            Sheets(FeuilleVisible).Activate
'on se met un pointeur pour voir si on trouve quelque chose, si on trouve rien on quittera
            Pointeur = Pointeur + 1
        End If
 
    Next x
 
'Si le pointeur est 0 on ferme le fichier.
    If Pointeur = 0 Then
        MsgBox "Utilisateur ou mot de passe non valide" & vbCrLf & vbCrLf & "Le fichier va se fermer", vbCritical + vbOKOnly, "Sécurité"
        ActiveWorkbook.Close SaveChanges:=False
    End If
 
'on planque la feuille Vierge
    Sheets("Vierge" ).Visible = 2
 
    Application.ScreenUpdating = True
   
End Sub
 


Message édité par sat3367 le 27-06-2017 à 14:16:17
Reply

Marsh Posté le 18-07-2017 à 19:37:18    

Bonsoir à tous !

 

dje69r j'avais besoin d'une macro faisant ce genre de choses et la tienne fait très bien l'affaire, merci !

 

Maintenant j'aurais besoin d'aller un peu plus loin, je m'explique :

 

L'ensemble de mes utilisateurs recensés dans "DroitsUsers" auront accès à la même feuille du fichier (seul 2 admin ont accès à d'autres feuilles). J'aimerais qu'en fonction de leur nom d'utilisateur, seul les lignes les concernant s'affichent.

 

Si j'ai : toto, titi, tata, truc et much qui sont autorisés a accéder à la feuille, peut ont afficher seulement les lignes ou leur nom est cité afin que par exemple titi ne voit pas les lignes de much.

 

Pensez-vous cela faisable ? Merci


Message édité par pierre-yves@ le 18-07-2017 à 19:57:25
Reply

Marsh Posté le 18-07-2017 à 23:21:06    

Hello

 

Faisable, ça l'est
Par contre pour le fiabiliser, c'est autre chose

 

Au pire on peut planquer les lignes mais ils peuvent les réafficher
Ou ça t'oblige à protéger la feuille pour qu'ils puissent pas afficher les lignes masquées, mais ils ne pourront donc pas modifier les infos de la feuille

 

Sinon passer par PowerPivot, mais ça va devenir une usine à gaz pour quelqu'un qui ne maitrise pas à minima les BDR même si les fonctions DAX sont assez similaires à celles d'excel

 

C'est quoi le but ?


Message édité par SuppotDeSaTante le 18-07-2017 à 23:21:55

---------------
Soyez malin, louez entre voisins !
Reply

Marsh Posté le 19-07-2017 à 06:42:39    

Bonjour,
 
Merci de ta réponse, le but c'est que chaque personne n'ai en visibilité que les données le concernant cela afin d'éviter qu'il ne saisisse des informations dans des cellules non appropriés.
 
L'idée de "juste les masquer" et qu'il puisse les ré-afficher ne me pose pas de problème ces données n'étant pas confidentielles, c'est juste pour limiter les risques d'erreurs.  
 
et concernant PowerPivot, les BDR et les fonction DAX, je n'ai pas la moindre idée de ce que cela est... :-)
 
Donc pour masquer automatiquement, comment peut on faire ?  
 
 
Merci

Reply

Marsh Posté le 19-07-2017 à 15:42:47    

PowerPivot est un complément excel qui permet de faire des requêtes (donc de filtrer des infos) sur des données du même fichier excel ou d'un autre (et d'autres types de données)

 

DAX c'est le nom du 'langage' des fonctions à utiliser dans PowerPivot, ça ressemble beaucoup à celle des formules d'Excel

 

BDR, base de données relationnelles, permet de mettre en relations des infos, de filtrer etc. Typiquement n'afficher que les infos de chaque user. Dans la suite Office, Access

  

En quelle colonne se situe les noms des users ?
Ton tableau commence à quelle ligne ? Et sur quelle ligne sont les entêtes de tes colonnes ?

 

Edit : en y réfléchissant, si y'a pas de confidentialité, un simple filtre te suffit ?

Message cité 1 fois
Message édité par SuppotDeSaTante le 19-07-2017 à 15:46:38

---------------
Soyez malin, louez entre voisins !
Reply

Marsh Posté le 20-07-2017 à 06:19:12    

SuppotDeSaTante a écrit :

PowerPivot est un complément excel qui permet de faire des requêtes (donc de filtrer des infos) sur des données du même fichier excel ou d'un autre (et d'autres types de données)
 
DAX c'est le nom du 'langage' des fonctions à utiliser dans PowerPivot, ça ressemble beaucoup à celle des formules d'Excel
 
BDR, base de données relationnelles, permet de mettre en relations des infos, de filtrer etc. Typiquement n'afficher que les infos de chaque user. Dans la suite Office, Access
 
 
 
En quelle colonne se situe les noms des users ?
Ton tableau commence à quelle ligne ? Et sur quelle ligne sont les entêtes de tes colonnes ?
 
Edit : en y réfléchissant, si y'a pas de confidentialité, un simple filtre te suffit ?


 
bonjour,
 
Le nom des User se situe en colonne A, le tableau commence ligne 3 et les entêtes sont sur les lignes 1 & 2.
 
Oui dans le fond tu as raison cela fonctionne avec un simple filtre mais j'aurais aimé simplifier au maximum la saisie des utilisateurs  :-)
 
 
Merci et bonne journée
 

Reply

Marsh Posté le 20-07-2017 à 09:46:01    

Ce que je voulais dire, c'est plutot est-ce dérangeant d'automatiser le filtre automatique pour qu'il filtre sur le user qui se log ou tu préfères vraiment masquer les lignes (ce que fait un filtre auto en fait) ?


---------------
Soyez malin, louez entre voisins !
Reply

Marsh Posté le 20-07-2017 à 13:12:09    

SuppotDeSaTante a écrit :

Ce que je voulais dire, c'est plutot est-ce dérangeant d'automatiser le filtre automatique pour qu'il filtre sur le user qui se log ou tu préfères vraiment masquer les lignes (ce que fait un filtre auto en fait) ?


Bonjour,
 
Un filtre automatique me semble plus pratique que le masquage, nan ? Mais j'ai peur que s'il faille utiliser Powerpivot ce soit impossible car je ne dispose pas du module et il est impossible d'installer quoi que ce soit sur les postes... :-(  
 
Il faut que la manip reste en VBA.  
 
Bonne journée

Reply

Marsh Posté le 14-05-2018 à 20:35:46    

Bonjour je déterre un vieux sujet je sais mais qui correspond parfaitement à mon besoin actuel c-a-d ouvrir des onglets spécifiques selon le user identifié après avoir défini les droits de chacun en amont.
 
j'ai donc généreusement copié le code plus haut mais j'ai encore une erreur de compilation: 2 petites erreurs de syntaxe qui traînent et impossible de mettre le doigt dessus!! HELP
 
Private Sub Workbook_Open()
On Error Resume Next
Application.ScreenUpdating = False
'on defini un pointeur
Pointeur = 0
'on affiche la feuille Vierge
Sheets("Vierge" ).Visible = True
'on va dessus
Sheets("Vierge" ).Activate
'on planque toutes les autres
For x = 1 To ThisWorkbook.Sheets.Count
If Sheets(x).Name <> "Vierge" Then Sheets(x).Visible = xlSheetVeryHidden
Next
'on saisit le user
User = InputBox("Veuillez saisir votre nom d'utilisateur: ", "Utilisateur" )
'on saisit le mot de passe
MDP= InputBox("Veuillez saisir votre mot de passe: ", "Mot de passe" )  
'Derniere ligne du tableau de la feuille DroitsUsers pour boucler dessus
DerLigne= Sheets("DroitsUsers" ). Range("A65536" ). End(xlUp). Row    
'on boucle pour trouver les occurences, x=2 car je pars du principe que la premiere ligne _
contient les entetes de colonne
For x = 2 To DerLigne
'si ce qu'il y a dans la colonne1 (Colonne A : user) = le user saisi _
ET ce qu'il y a dans la colonne2 (Colonne B : mot de passe)
If Worksheets("DroitsUsers" ).Cells(x, 1) = User And Worksheets("DroitsUsers" ).Cells(x, 2) = MDP Then
'on affiche la feuille définie en colonne3 (Colonne C : Feuille autorisée)
'on affiche la feuille correspondante
FeuilleVisible = Worksheets("DroitsUsers" ).Cells(x, 3)
Sheets(FeuilleVisible).Visible = True
'on va dessus
Sheets(FeuilleVisible).Activate
'on se met un pointeur pour voir si on trouve quelque chose, si on ne trouve rien on quitte
Pointeur = Pointeur + 1
ElseIf Worksheets("DroitsUsers" ).Cells(x, 1) = "Admin" And Worksheets("DroitsUsers" ).Cells(x, 2) = "LeMDP" Then
For i = 1 To ThisWorkbook.Sheets.Count
If Sheets(i).Name <> "Vierge" Then Sheets(i).Visible = True
Next
Application.ScreenUpdating = True
Exit Sub

Reply

Marsh Posté le 15-05-2018 à 00:10:24    

C'est cool  [:le colonel moutarde:5]  
 
Mais si tu donnes pas le message d'erreur ça va être compliqué hein


---------------
Soyez malin, louez entre voisins !
Reply

Marsh Posté le 15-05-2018 à 09:15:47    

Oups! désolé merci dje69r. ça me fait "Erreur de compilation: Erreur de syntaxe". j'ai beau louché sur le code depuis 2 jours tenté des modifs rien à a faire. pour info suis sous Excel 2010


Message édité par liln le 15-05-2018 à 09:17:50
Reply

Marsh Posté le 15-05-2018 à 09:31:56    

Et tu as quoi de surligné dans le code ?
Les deux lignes que tu as mises en rouge ?


---------------
Soyez malin, louez entre voisins !
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed