Message à l'ouverture en lecture seule

Bonjour,

J'ai utilisé le code de Jacques Boisgontier pour la protection des feuilles.

J'ai créé une feuille "Utilisateurs" masquée dans laquelle j'ai créé une liste de noms, dont j'ai définit le nom "nom".

Private Sub Workbook_Open()
    nom = Environ("username")
    Set temp = [utilisateurs].Find(what:=nom)
    If temp Is Nothing Then
        ActiveWorkbook.ChangeFileAccess xlReadOnly
    End If
End Sub

Mais à chaque ouverture en lecture seule (quelqu'un qui n'est pas dans la liste), j'ai le message suivant :

image

Quelqu'un sait comment enlever cette boite de dialogue ?

Merci de votre réponse.

Bonjour Jiloin !

Essai ceci pour enlever le message.

Private Sub Workbook_Open()
    Application.DisplayAlerts = false
    nom = Environ("username")
    Set temp = [utilisateurs].Find(what:=nom)
    If temp Is Nothing Then
        ActiveWorkbook.ChangeFileAccess xlReadOnly
    End If
    Application.DisplayAlerts = true
End Sub

Tiens moi au courant.

Salut et merci, ça fonctionne bien, par contre, je viens de tester le fichier sur un poste, et quand la personne n'est pas dans la liste, la macro bloque sur la ligne du

ActiveWorkbook.ChangeFileAccess xlReadOnly

et affiche le débogueur.

J'ai l'impression que cela vient du mode protégé, le fichier est sur un serveur partagé, et le fichier s'ouvre par défaut en mode protégé.

Bon, cela ne vient pas du mode protégé, j'ai rajouté un ActiveWorkbook.Unprotect, aucuns changements, je ne comprends pas pourquoi ça fonctionnerait parfaitement sur mon poste et pas sur ceux des utilisateurs.

Bonjour,

Je ne connais pas assez ce code pour vraiment vous répondre.

Quel est le message d'erreur qui survient ?

Peut tu partager un morceaux du fichier sans données personnelles que je puisse faire des tests ?

Bonjour,

Oui bien sur, voici le message d'erreur :

image

Et le fichier :

1test.xlsm (37.15 Ko)

Je me dis que la personne n'as peut être pas les droits de modification du fichier, est-ce que cette commande fait comme si on cochait la case lecture seule dans les propriétés du fichier ?

Sinon, je pensais procéder différemment, plutôt qu'en utilisant la lecture seule si la personne n'est pas dans la liste, verrouiller la feuille par défaut, puis déverrouiller la feuille si la personne est dans la liste, mais c'est un peu plus compliqué parce qu'il faudrait verrouiller la feuille avant la fermeture.

Alors, je viens de le tester et celui-ci fonctionne aussi sur mon excel...

Peut être une référence absente sur le PC.

Sinon concernant le verrouillage des feuilles -> C'est bien plus simple ! Enfin à mon avis

3testh.xlsm (39.37 Ko)

J'ai dût retirer tes droits de modification. Ils posaient problèmes.

Essai et tiens moi au courant !

T'es le boss !!

Effectivement, c'est plus simple, tout marche à la perfection, merci beaucoup :)

J'ai pas compris pourquoi la version en lecture seule ne fonctionnait pas, mais celle ci est beaucoup mieux ;)

J'ai juste rajouté une petite ligne ActiveWorkBook.Unprotect au début pour enlever le mode protégé qui affichait une petite erreur quand on ouvrait le fichier depuis les mails.

Merci ;)

Pour ceux qui en auraient besoin, voici le code détaillé :

Private Sub Workbook_Open() 'à l'ouverture du classeur
    Application.DisplayAlerts = False 'Masque les alertes
    ActiveWorkbook.Unprotect    'Enlève le mode protégé
    nom = Environ("username")   'Définit la variable nom en recherchant le login windows de l'utilisateur
    Set temp = [utilisateurs].Find(what:=nom)   'définit la variable temp en cherchant la variable nom dans la feuille masquée Utilisateurs, dans la zone nommée Utilisateurs
    If temp Is Nothing Then 'si le nom d'utilisateur n'apparait pas dans la liste
        For Each Sh In ThisWorkbook.Worksheets  'pour toutes les feuilles du classeur
            Sh.Protect "MotDePasse"  'protéger la feuille avec le mot de passe MotDePasse
        Next
    Else    'si il apparaît dans la liste
        For Each Sh In ThisWorkbook.Worksheets  'pour toutes les feuilles du classeur
            Sh.Unprotect "MotDePasse"    'Enlever la protection en utilisant le mot de passe MotDePasse
        Next
    End If
    Application.DisplayAlerts = True    'affiche à nouveau les alertes
End Sub

Private Sub Workbook_BeforeClose(Cancel As Boolean) 'avant la fermeture du classeur
For Each Sh In ThisWorkbook.Worksheets  'Pour toutes les feuilles du classeur
    Sh.Protect "MotDePasse"  'Protège la feuille avec le mot de passe MotDePasse
Next
End Sub

Regarde aussi dans le code de ta feuil1, ce code permet d'éviter la fenêtre d'alerte disant que la feuille est verrouiller.

Je suis content d'avoir pu résoudre ton problème !

A bientot !

Rechercher des sujets similaires à "message ouverture lecture seule"