2 votes

Comment dois-je stocker une variable pour qu'elle puisse être utilisée dans différents appels de code VBA dans Excel ?

J'ai une étape d'authentification par mot de passe lorsqu'une personne ouvre le classeur. J'ai plusieurs utilisateurs qui vont accéder à ce classeur et sur cette base, j'ai assigné une variable appelée utilisateur pour identifier qui parmi eux l'utilise.

Public pwd, user As String
Public graccess As Integer

Private Sub workbook_open()
graccess = 0
Do
pwd = InputBox("Please provide your password", "Authentication")
If pwd = "access" Then
    user = "GTS"
    graccess = 1
ElseIf pwd = "enter" Then
    user = "AP"
    graccess = 1
Else
    MsgBox ("failed to authenticate")
    pwd = ""
    graccess = 0
End If
Loop Until graccess = 1
End Sub

Maintenant, lorsque cet utilisateur commence à travailler sur la feuille Excel, j'ai besoin de vérifier l'adresse de l'utilisateur. utilisateur pour vérifier quel utilisateur accède à la feuille. Puisque ce code sera maintenant utilisé dans l'événement *worksheet_change*, il s'agit d'une sous routine différente qui sera exécutée après que le code précédent ait fini de s'exécuter et soit hors d'usage.

Mes questions sont donc les suivantes est-ce que je ne peux pas voir l'utilisateur dans la variable parce que l'événement workbook_open est terminé et que le code a cessé de fonctionner ? Que puis-je faire pour m'assurer que la variable ne perde pas sa valeur ?

merci pour votre patience :)

0voto

Gary's Student Points 70525

Deux choses :

  1. fixer les DIM's

    Dim pwd as string, user as string

  2. déplacer les DIM's vers un module standard

0voto

David Zemens Points 17574

Stocker le nom d'utilisateur actuel dans un Name dans le classeur.

Tout d'abord, ajoutez un Name au wokrbook. Du Formulas ruban, faites ça :

enter image description here

Il s'agit essentiellement d'une "variable" qui persiste après l'exécution.

Dans votre Workbook_Open le gestionnaire d'événement, faites ceci :

ActiveWorkbook.Names("username") = Environ("username") 

Ceci utilise la variable d'environnement du système appelée "username" qui est probablement préférable à en demandant à pour un nom d'utilisateur, car il n'y a aucune possibilité de saisir un mauvais nom, que ce soit par accident ou par malveillance.

Vous pouvez également utiliser un InputBox pour demander un nom d'utilisateur :

ActiveWorkbook.Names("username") = Application.InputBox("Please enter your username", "Username", "enter your username")

Ou, toute autre méthode qui définit le Name comme une valeur de type chaîne.

Plus tard, dans n'importe lequel de vos modules de code ou de vos gestionnaires d'événements, vous pourrez toujours faire référence à l'option Name et faites vos validations de cette façon.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X