XL 2016 Activer feuille apres MDP

pompaero

XLDnaute Impliqué
Bonjour le forum,

J'essai de constuire un fichier à plusieurs thèmes avec accés par mot de passe, je suis arrivé avec l'aide de modèle sur le forum a faire les accès par mot de passe, maintenant j'aimerai une fois le MDP validé arriver sur un onglet précis, chose que je n'arrive pas a faire.
par exemple :
Dans le classeur il y a 2 onglets (Acces niv1 et Acces niv2), un onglet "MDP avec des "x", donc j'aimerai une fois le MDP valider arriver (avec un activate) sur Acces niv1 ou Acces niv2 si il y a un "x" (par ex) dans MDP.
Est-ce possible ?

Merci
pompaero.
 

Pièces jointes

  • Pompaero-MDP_V0.xlsm
    148.4 KB · Affichages: 27

vgendron

XLDnaute Barbatruc
Hello

tu peux essayer ce code
VB:
Private Sub CmdBValid_Click()
Dim li, ligne As Integer
Dim FirstFeuilleToActivate As String

  On Error Resume Next
  Err.Clear
  Dim Test
  Test = Application.WorksheetFunction.Match(Me.TBLogin, Range("ListeLogin"), 0)
  If Err.Number <> 0 Then
    MsgBox "Le login saisi n'existe pas...."
    On Error GoTo 0
    Exit Sub
  End If
  On Error GoTo 0
  If Me.TBMDP <> Application.WorksheetFunction.Index(Range("ListeLogin").Offset(0, 1), Test, 1) Then
    MsgBox "Le mot de passe n'est pas conforme..."
    Me.TBMDP = ""
    Me.TBMDP.SetFocus 'remet le focus dans TBMDP
    Exit Sub
  End If
  'recherche de la première feuille à activer
  If Me.TBLogin = "Admin" Then
    FirstFeuilleToActivate = "MDP"
  Else
    With Sheets("MDP")
        Set li = .Range("ListeLogin").Find(Me.TBLogin)
        If Not li Is Nothing Then
            ligne = li.Row
            If .Range("F" & ligne) = "x" Then
                FirstFeuilleToActivate = "Accès niv1"
            ElseIf .Range("G" & ligne) = "x" Then
                FirstFeuilleToActivate = "Accès niv2"
            End If
        End If
    End With
  End If
  For Each oSheet In Worksheets
    If VBA.LCase(oSheet.Name) <> "accueil" Then
      On Error Resume Next
      Err.Clear
'      ActiveWorkbook.Unprotect sMdP
      If VBA.LCase(Application.WorksheetFunction.Index( _
        Range("ListeLogin").Offset(0, Application.WorksheetFunction.Match(oSheet.Name, _
        Range("ListeOnglet"), 0) + 1), Test, 1)) = "x" Then
   Unload Me
        oSheet.Visible = True
        'oSheet.Activate
 '################
 'Etudier la manière de pouvoir accéder à une feuille précise avec les boutons précis !!!!
 '################
      Else
        oSheet.Visible = xlVeryHidden
      End If
      On Error GoTo 0
    End If
  Next
  'activation de la première feuille
  If FirstFeuilleToActivate = "" Then
    Sheets("Accueil").Activate
  Else
    Sheets(FirstFeuilleToActivate).Activate
  End If
'  ActiveWorkbook.Protect sMdP
End Sub

1) suppose que dans ta feuille MDP, les colonnes F et G contiennent les niveaux 1 et 2 (sinon il faudra chercher les colonnes)
2) quand tu masques les feuilles.. rien n'empêche l'utilisateur malin de les réafficher...
j'ai donc remplacé le visibe=false par visible=xlveryhidden
 

pompaero

XLDnaute Impliqué
Re,
Concernant les colonnes avec les niveaux dans MDP, j'imagine que je peux en ajouter (2 ou 3) en complétant ta macro avec des ElseIf ?
Pour le masquage des feuilles, je suis complètement d'accord avec toi, c'est pour ça que j'ai prévu de masquer les feuilles à l'ouverture du fichier (ThisWorkbook) avec la macro Masquertout (Module Général). je l'ai déactivé pour moi travailler.
Est-ce que du coup le visibe=false par visible=xlveryhidden est nécessaire ?
Je continu les test.

Cdlt
pompaero
 

pompaero

XLDnaute Impliqué
Re,
Je viens de tester mes interrogations, cela fonctionne mais je rencontre un petit soucis, une fois sur feuille accès niv1 (ou 2, ou 3, ou 4), je click sur un bouton qui envoye sur la feuille concerné, une fois sur cette feuille (Mvt carbu par ex) comment puis-je faire le retour sur la feuille accès niv1 (ou2, ou3, ou4) sachant que j'ai l'intention de masquer les onglets au final (option avancé d'excel).
Puis-je faire ce principe ou alors faire retour obligatoire sur feuille acceuil à chaque fois ?
Merci
 

vgendron

XLDnaute Barbatruc
Hello
Tu peux effectivement ajouter autant de ElseIf que tu souhaites..
après, s'il y en a beaucoup, ce serait peut etre plus "simple" de faire une formule à base de someprod pour trouver directement quelle cellule contient le "x"
je dis plus "simple" parce qu"en fait.. j'avais déjà essayé mais je me suis heurté à un problème d'evaluate.... mais pas trop creusé

pour le visible=false ou xlveryhidden
connectes toi en tant que "Util1"
ensuite.. clic droit sur un des onglets affichés et.. dans le menu tu devrais voir la différence
si tu mets juste visible=false.. l'option "AFFICHER" permet à l'utilisateur de réafficher des onglets masqués
alors que visible=xlveryhidden.. l'option n'apparaitra pas..
 

pompaero

XLDnaute Impliqué
Bonjour vgendron

J'ai vu la difference que tu explique au dessus, effectivement pas d'accès à l'option AFFICHER. Pour revenir sur mes boutons Retour, j'ai bien commencé à mettre des boutons mais je me suis rendu compte que plusieurs Accès niv ont des accès identique donc je cherche une solution pour revenir la feuille d'acces niv correspondant à l'utilisateur SI c'est possible, sinon je ferai retour pour tout vers acceuil.
Ex :
Mvt carbu, tous les niveaux ont acces.
 

Pièces jointes

  • Pompaero-MDP_V0.xlsm
    161.4 KB · Affichages: 18

cp4

XLDnaute Barbatruc
Bonjour:),

Juste une suggestion pour l'userform. Il serait pratique de pourvoir valider avec la touche 'Entrée'
Mettre la propriété Default à True.
Valider avec touche Entrée.JPG


Bon courage.
 

vgendron

XLDnaute Barbatruc
pour le retour à la feuille de niveau

1) mette un bouton "retour" dans chaque feuille
2) affecter au bouton l'unique macro que voici
VB:
Sub retour()
Sheets(FirstFeuilleToActivate).Activate
End Sub

3) cette macro doit etre placée dans le module Standard
4) déclarer la variable FirstFeuilleToActivate en public en début de module
Public FirstFeuilleToActivate as string

5) supprimer sa déclaration dans le code du USF

et voila
 

pompaero

XLDnaute Impliqué
Bonjour le fil,

Pc4 : merci pour ton idée, cela marche bien,
vgendron : merci pour tout, je viens de mettre en place les boutons retour c'est excellent, on se crois dans un vrai petit logiciel Lol. tu est trop fort.

Je vais pouvoir maintenant construire les thèmes un à un feuille par feuille. cool.
A bientôt, pour moi le fil est cloturer.

Cdlt
pompaero
 

Discussions similaires

Statistiques des forums

Discussions
312 199
Messages
2 086 158
Membres
103 139
dernier inscrit
Bidi