Affichage lors de l'exécution d'une macro VBA

Bonjour à tous et toutes,

J'ai crée un code VBA qui permet de vérifier le nom de session du compte Excel et qui permet l'accès sans mot de passe si la session est renseignée dans une liste. Le code s'active si nous changeons de page et demande le mot de passe a chaque changement si la personne n'est pas sur la liste:

Private Sub Workbook_SheetActivate(ByVal Sh As Object)
Application.ScreenUpdating = False
Dim Usernames As Range
Set Usernames = Range("'Accueil'!A2:'Accueil'!A6")
Dim Username As String
Username = Application.Username

  Dim isUserValid As Boolean
    isUserValid = Not IsError(Application.Match(Username, Usernames, 0))

    If Not isUserValid Then
        Application.ScreenUpdating = False
 MsgBox "Entrer le mot de passe", vbOKOnly + vbExclamation, "Saisie du mot de passe"
            mdp = InputBox("Saisie du mot de passe", "Entrer le mot de passe")
            If mdp = "MdP" Then
            Exit Sub

            Else
             Application.ScreenUpdating = False
 MsgBox "Entrer le mot de passe", vbOKOnly + vbExclamation, "Saisie du mot de passe"
            mdp = InputBox("Saisie du mot de passe", "Entrer le mot de passe")
            End If

            If mdp <> "MdP" Then
            Application.ScreenUpdating = False
            MsgBox "Mot de passe incorrect", vbOKOnly
            ActiveWorkbook.Save
            ActiveWorkbook.Close
            End If

        End If
    Application.ScreenUpdating = True

End Sub

Or dans ce code le Application.ScreenUpdating ne fonctionne pas. Je voudrait avoir une solution pour que celui-ci fonctionne ou si cela est possible afficher un écran de couleur en arrière plan pour masquer la vue du fichier. Et bien sûr si la personne est dans la liste cela ne s'applique pas tout comme la version actuelle.

Je vous remercie d'avoir tout lu ^^

PS: il y a de nombreux application.screenupdating=False a cause de nombreux test mais cela ne fonctionne pas qu'il soit présent une fois ou 15 fois.

Bonjour,

Ton truc est surement de façon un peu... simpliste.

On ne demande pas le mot de passe APRES avoir accédé à une feuille mais AVANT.
Donc tu fais une table des USERS et la liste des feuilles autorisées pour chacun.

et une feuille d'accueil ou chacun s'identifie et en fonction de ses autorisations

En on n'affiche que les feuilles auxquelles il a droit. Les autres sont masquées.

Quand le USer termine sa session. Toutes les feuilles sont masquées sauf la feuilles d'accueil.

A+

Bonjour,

Merci de ta réponse, la première version du code fonctionnait avec l'ouverture du fichier sauf que si la modification du fichier n'est pas active le code est inutile. Votre solution n'aura pas ce soucis également?

C'est pour cette raison que je vérifie le mot de passe lors de l'utilisation du fichier cela permet de bypass l'activation de la modification du fichier.

Bonjour,

Je ne comprend pas votre réponse...

Si tout le monde à le droit de venir lire votre classeur mais pas de le
modifier ça se passe dans les options d'enregistrement de votre classeur :

gestacc

Mettre une vérification du code sur Activate signifie que c'est trop tard : L'intrus est déjà dans votre classeur !

La seule solution est de l'accueillir sur une page vide. Et aucun autre accès possible que votre UserForm et pas encore de Activate à ce stade.

A+

Bonjour,

Tout le monde ne doit pas lire le fichier. Celui-ci nous sert tout les jours et plusieurs fois pas jours on réalise des copies d'un fichier base pour adapter le fichier au projet. L'objectif de mon premier code est de permettre aux utilisateurs très fréquents de ne pas avoir de mot de passe a entrer sinon les utilisateurs moins fréquents on un mot de passe. Cela me permet de filtrer les personnes qui ont accès au fichier.

J'ai commencé à explorer la piste d'un Userform mais je n'arrive pas à le faire fonctionner. De plus le Userform me rajoute des contraintes (masquer les feuilles, protéger le classeur...), j'arrive a faire ces différentes manipulations mais durant les test le code crach permettant de bypass le code etc.

Pour cela que j'aimerais régler le soucis de l'affichage de l'écran qui ne se fige pas lorsque la macro s'exécute.

Cordialement

Bonjour,

J'ai peut-être pas été suffisamment clair, mais la macro Activate n'est pas conçu pour empêcher l'affichage car elle s'exécute après l'affichage.

ScreenUpdating = False sert à masquer toute modification qui interviendrait ultérieurement du fait de la macro.

En clair c'est à toi de t'assurer avant (dès l'ouverture du classeur) que l'utilisateur à les droits d'accès à la feuille. S'il n'en a pas le droit, il ne doit pas pouvoir accéder à l'onglet.

A+

Pour revenir un peu sur mes explications, puisque que l'activation c'est trop tard, C'est avant qu'il faut détecter si le UserName te convient ou pas. Et avant, c'est dans le Workbook_Open. C'est dans cette procédure d'accès que tu peux filtrer les Accès selon leur UserName.

Etant entendu que quoi qu'il arrive l'ouverture du classeur ne peut se faire que sur la feuille d'Accueil suffisamment édulcorée pour permettre l'accès à n'importe qui.

La procédure Workbook_Open qui vient d'être exécuté t'a permis de filtrer les accès et de masquer les onglets non autorisés.

A+

Rechercher des sujets similaires à "affichage lors execution macro vba"