Rendre invisible un classeur déjà ouvert par un utilisateur
J'ai testé votre code, d'abord en lecture seule puis sans la lecture seule, il s'exécute parfaitement.
Concernent votre deuxième proposition je comprend l'idée, ça pourrait être intéressant.
Voici mon code connexion.
Merci du temps que vous prenez.
Option Explicit
Private Sub Workbook_Open()
'masquer toutes les pages à l'ouverture hormis "X".
Sheets("X").Visible = True
Sheets("X").Visible = 2
Sheets("X").Visible = 2
Sheets("X").Visible = 2
Sheets("X").Visible = 2
Sheets("X").Visible = 2
Sheets("X").Visible = 2
Sheets("X").Visible = 2
Sheets("X").Visible = 2
Sheets("X").Visible = 2
Sheets("X").Visible = 2
End Sub
Private Sub CommandButton1_Click()
On Error Resume Next
'déclaration de variable
Dim mot_de_pass As String
Dim role As String
Application.ScreenUpdating = False
'configuration de variable
mot_de_pass = WorksheetFunction.VLookup(Txt_user, Sheets("X").Range("b:d"), 2, 0)
role = WorksheetFunction.VLookup(Txt_user, Sheets("X").Range("b:d"), 3, 0)
If mot_de_pass = Txt_pass And role = "N1" Then
Sheets("X").Visible = True
Sheets("X").Visible = 0
Sheets("X").Visible = True
Sheets("X").Visible = True
Sheets("X").Visible = True
Sheets("X").Visible = True
Sheets("X").Visible = True
Sheets("X").Visible = True
Sheets("X").Visible = True
Sheets("X").Visible = True
Sheets("X").Visible = 2
ElseIf mot_de_pass = Txt_pass And role = "N2" Then
Sheets("X").Visible = True
Sheets("X").Visible = True
Sheets("X").Visible = True
Sheets("X").Visible = True
Sheets("X").Visible = True
Sheets("X").Visible = 2
ElseIf mot_de_pass = Txt_pass And role = "N3" Then
Sheets("X").Visible = True
Sheets("X").Visible = True
Sheets("X").Visible = True
Sheets("X").Visible = True
Sheets("X").Visible = True
Sheets("X").Visible = 2
ElseIf mot_de_pass = Txt_pass And role = "N4" Then
Sheets("X").Visible = True
Sheets("X").Visible = True
Sheets("X").Visible = True
Sheets("X").Visible = True
Sheets("X").Visible = 2
Else
MsgBox "L'utilisateur ou le mot de passe est inorrect"
Application.ScreenUpdating = True
End If
Sheets("X").Unprotect Password:="X"
Sheets("X").Unprotect Password:="X"
Sheets("X").Range("n3") = "Bonjour " & Txt_user
Sheets("X").Range("n1") = "Bonjour " & Txt_user
Sheets("X").protect Password:="X"
Sheets("X").protect Password:="X"
'vider le formulaire de connexion
Txt_user = ""
Txt_pass = ""
End SubBonjour
J'ai testé votre code, d'abord en lecture seule puis sans la lecture seule, il s'exécute parfaitement.
Veillez à le tester avec depuis deux ordinateurs différents aussi.
Voici mon code connexion.
Heu je n'ai pas compris. Vous avez déjà une macro Workbook Open dans le fichier ? Vous m'aviez dit n'en n'avoir qu'une dans un précédent post --> "Private Sub Workbook_BeforeClose(Cancel As Boolean)"
Bonjour Dan,
J'espère que vous allez bien.
En effet, j'ai une macro Workbook_Open dans une feuille, mais pas dans le Thisworkbook.
Il me semble que votre demande concernait le Thisworkbook, non ?
Je peux voir le code que vous avez dans Thisworkbook
Je suis novice dans le domaine j'ai peut être pas mal compris.
Bonjour
En effet, j'ai une macro Workbook_Open dans une feuille, mais pas dans le Thisworkbook.
Elle ne doit pas être placée dans une feuille mais bien dans Thisworkbook.
Du coup avec ce que je vous ai proposé vous avez deux macros Open. Vous allez avoir un conflit. Gardez en mémoire que, la macro "Private sub workbookOpen" est exécutée automatique par excel à l'ouverture du fichier.
Donc déplacez votre code dans Thisworkbook et ajoutez les lignes que je vous ai données dans la macro Open.
Autre solution serait de cacher automatiquement les feuilles à la fermeture du fichier plutôt qu'à l'ouverture. Dans ce cas, vous pourriez déplacer la partie de code pour cacher les feuilles dans la macro Beforeclose que je vous ai proposée
C'est ce que j'aurais plutôt fait car du coup on est sûr que les feuilles sont cachées même si les macros sont désactivées par exemple
Bonjour Dan,
Je pense faire ce que vous me recommandez.
Je m'empresse de cacher les feuilles à la fermeture (j'aurai du y penser).
Pour ma part le sujet est résolu (même si ça ne répond pas vraiment au post initial)
Merci beaucoup du temps consacré.
A la prochaine.