Ouvrir fichier en évitant mot de passe
Bonjour le Forum,
Je suis à la recherche d'une procédure d'ouverture d'un classeur protéger par mot de passe.
Sur mon classeur 1, se trouve plusieurs onglets (une vingtène) protégé par mot de passe à son ouverture, j'aimerai à partir d'un autre classeur pouvoir atteindre directement 2 ou 3 onglets bien précis du classeur 1 sans passer par le mot de passe, si cela est possible.
J'ai bien la macro pour ouvrir le classeur 1 à partir du l'autre classeur, mais je bloque sur la suite.
Pourriez-vous m'aider sur ce sujet svp, merci.
Mon code d'accès au classeur 1
Sub Ouvrir()
Dim Chemin As String, NomFichier As String
Chemin = "C:\Users\F Leroy\Desktop\"
NomFichier = "Administratif conso sslia mdp V0"
Workbooks.Open Filename:=Chemin & NomFichier
'Poursuivre code afin d'atteindre les onglets souhaités sans accès au formulaire
End Sub
Le login concerné est FIC dans l'onglet MDP.
Pouvez-vous me confirmer ci cela est faisable, merci.
Je joins le lien du classeur 1 pour mieux ce rendre compte
Merci à vous
pompaero
Bonjour,
à tester,
Sub Ouvrir()
Dim Chemin As String, NomFichier As String
Dim Wk As Workbook, f As Worksheet
Chemin = '"C:\Users\F Leroy\Desktop\"
NomFichier = '"Administratif conso sslia mdp V0.xlsm"
Set Wk = Workbooks.Open(Chemin & NomFichier)
With Wk
For Each f In .Worksheets
Wk.Sheets(f.Name).Visible = True
Next
End With
End Sub
Bonjour i20100,
Merci infiniment d'être arrêté et d'avoir répondu à mon fil.
Je sais ce que je demande n'est pas évident à mettre en place. Après avoir lu ta proposition et l'avoir testé, cela s'approche de très près du résultat attendu. En faisant les tests je me suis aperçu d'un dysfonctionnement qui crée un bug par la suite du mes explications pas assez précise, désolé.
Comme on peut voir, il y a des onglets correspondant à des niveaux d'accès (4 actuellement), il me faut ajouter un onglet "niv 5", spécialement pour cette requette afin d'éviter le bug à la fermeture du classeur "Administratif conso sslia mdp V0.xlsm".
Le principe de fonctionnement pour le moment du classeur "Administratif conso sslia mdp V0.xlsm" est :
1) A son ouverture seul l'onglet Accueil est visible, à l'aide du formulaire Login et Mot de passe , on arrive sur un onglet niveau (1 ou 2 ou 3 ou etc...)
2) Une fois arrivé sur l'onglet niveau (1 ou 2 ou 3 ou etc...), nous pouvons accéder aux onglets autorisés.
3) Le retour (pour fermer le classeur) passe automatique par l'onglet niveau (1 ou 2 ou 3 ou etc....) puis l'onglet Accueil.
Pour ma requette, ne sachant absolument pas comment faire j'imagine une macro à partir d'un autre classeur avec le principe suivant :
1) Ouverture du classeur "Administratif conso sslia mdp V0.xlsm", (ça c'est fait et fonctionne)
2) Sans voir le formulaire UFldent, inscrire dans les textbox correspondant le (login et mot de passe), valider par macro, afin d'arriver sur l'onglet niv 5. (ou arriver directement sur niv 5 sans passer par le UFIdent, si cela est possible et ne créer pas de bug).
3) Ensuite nous pouvons accéder aux onglets autorisés et fermer comme le fonctionnement normal.
Je ne sais pas si mon idée est parfaite et ne sachant pas trop comment faire c'est pour cela que je vous fais appel.
Merci de votre
Je joins le classeur avec l'onglet niv 5 ajouté.
Cordialement
pompaero.
re,
ce n'était qu'un exemple, tu peux lire une feuille sans même l'afficher.
je ne comprend pas vraiment quel est ton but final,
quel info veux-tu récupérer sur ce fichier ?
Re,
Désolé, le but final est d'avoir accès aux onglets FicVPA, Fic64, Fic70, Fic60, FicHebdo (et certainement niv 5, pour la fermeture du classeur) librement (sans effectuer le mot de passe) à partir d'un autre classeur, car se sont des documents que l'on renseigne tous les jours.
Cdlt
pompaero
re,
quel information veut tu lire sur les onglets FicVPA, Fic64, Fic70, Fic60, FicHebdo (et autre) ?
Re,
Nous voulons accéder librement à ces onglets FicVPA, Fic64, Fic70, Fic60, FicHebdo, afin de pouvoir les renseigner journalièrement.
re,
il faut enlever le mdp pour écrire,
voici un exemple,
Sub Ouvrir_et_Écrire()
Dim Chemin As String, NomFichier As String
Dim Wk As Workbook, f As Worksheet
Chemin = "C:\Users\F Leroy\Desktop\"
NomFichier = "Administratif conso sslia mdp V0.xlsm"
Set Wk = Workbooks.Open(Chemin & NomFichier)
With Wk
For Each f In .Worksheets
Select Case f.Name
Case "FicVPA":
With Wk.Sheets(f.Name)
.Unprotect "MonPW"
.Range("A55") = "test" 'exemple
.Protect "MonPW"
End With
Case "Fic64":
With Wk.Sheets(f.Name)
.Unprotect "MonPW"
.Range("A55") = "test" 'exemple
.Protect "MonPW"
End With
' etc...
End Select
Next f
End With
End Sub
Re,
Après tests, on arrive bien sur FicVPA, etc... mais au moment de fermer le classeur il y a bug.
En simple quand on utilise le classeur "Administratif conso sslia mdp V1.xlsm" avec le formulaire UFIdent en utilisant l'utilisateur FIC et Mdp util7, l'onglet "accès niv5 est accessible qui permet d'accéder aux onglets "FicVPA, Fic64, etc....
Nous aimerions à partir d'un autre classeur par macro, ce même principe automatisé.
Vraiment désolé, mais j'aimerai tellement que cela fonctionne.
Cdlt
pompaero
Re,
Est ce qu'il est possible de l'adapter seulement à l'onglet "acces niv5" car c'est la fermeture du classeur qui bug .
Meri
Cdlt
pompaero
re,
voilà pour la feuille "acces niv5"
Sub Ouvrir_et_Écrire()
Dim Chemin As String, NomFichier As String
Dim Wk As Workbook, f As Worksheet
Chemin = "C:\Users\F Leroy\Desktop\"
NomFichier = "Administratif conso sslia mdp V0.xlsm"
Set Wk = Workbooks.Open(Chemin & NomFichier)
With Wk.Sheets("acces niv5")
.Unprotect "MonPW"
.Range("A55") = "test" 'exemple
.Protect "MonPW"
End With
End Sub
Bonsoir i20100,
d'abord j'aimerai te remercier de supporter mon fil qui à l'air compliqué, j'en conçois.
Bon désolé la dernière solution ne fonctionne pas comme je l'imaginai... Serait il pas mieux de passer par le formulaire directement en automatique, c'est à dire;
1) Ouverture du classeur "Administratif conso sslia mdp V0.xlsm"
2) Ouverture Formulaire UFIdent
3) Txtbox Login = "FIC"
4) Txtbox MDP = "util7"
5) Bouton valider (CmdBValid) en click valider automatique (si cela est possible) afin d'activer le code ci-dessous.
6) Fermeture du Formulaire UFIdent
Private Sub CmdBValid_Click()
Dim li, ligne As Integer
'-----------------------------------------------------------
'Recherche du Login et Mot de passe exact
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 (Niveau)
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"
ElseIf .Range("H" & ligne) = "x" Then
FirstFeuilleToActivate = "Accès niv3"
ElseIf .Range("I" & ligne) = "x" Then
FirstFeuilleToActivate = "Accès niv4"
ElseIf .Range("J" & ligne) = "x" Then
FirstFeuilleToActivate = "Accès niv5"
End If
End If
End With
End If
'-----------------------------------------------------------
'Recherche des feuille a rendre visible
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
Else
oSheet.Visible = xlVeryHidden 'False
End If
On Error GoTo 0
End If
Next
'------------------------------------------------------------
'Activation de la première feuille (Niveau)
If FirstFeuilleToActivate = "" Then
Sheets("Accueil").Activate
Else
Sheets(FirstFeuilleToActivate).Activate
Sheets(FirstFeuilleToActivate).Range("L1") = "Bonjour " & TBLogin
End If
' ActiveWorkbook.Protect sMdP
End Sub
J'espère que ce sera faisable, lueur d'espoir.
Merci Cdlt
pompaero