Accès formulaire par mot de passe

Signaler
-
 scribetout -
Bonjour la communauté,

je suis débutant et sollicite une nouvelle fois votre aide. Sur mon fichier excel, la feuille "Menu" comporte 6 boutons (contrôle de formulaire) et souhaite limiter l'accès aux formulaires correspondants par un nom d'utilisateur(session DNS) et mot de passe [fichier stocké sur un seul micro]. Et si possible donner à l’utilisateur la possibilité de changer son mot de passe.
Sur une feuille cachée, l'administrateur saisit les noms utilisateurs, mots de passe et cocher case ou cellule pour chaque boutons pour autoriser ou non l'affichage du formulaire correspondant.
En gros, quand on clique sur n'importe quels boutons, un formulaire s'ouvre affichant dans une texteBox le nom utilisateur session DNS, l’utilisateur saisit son mot de passe dans une texbox et en validant avec bouton s'il est correct le formulaire correspondant s'affiche. un 2ème bouton propose la modification du mot de passe.
J'ai trouvé des exemples pour autoriser l'accès aux feuilles mais je n'ai pas su les adapter pour les formulaires.

Je vous remercie et vous en serais reconnaissant.

Bonne journée à tous!

17 réponses

Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
239
Bonjour,
Qu'as-tu au moins tenté (code)
Evite par ailleurs des questions multiples (c'est le cas de la discussion que tu as ouverte !)
Ce forum est fait pour aider à surmonter une difficulté technique précise, spécifique et parfaitement isolée.

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
239
Commence par cet exercice :
un userform avec deux textboxes (une pour le nom et l'autre pour le mot de passe) et un bouton de commande pour vérification de validité.
Suggestion : dans un premier temps (juste pour te "faire" au mécanisme) vérifie la validité par rapport aux données d'une feuille ad-hoc (noms et colonne A et mots de passe en clair en colonne B).
Ce sera un bon début.


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
Bonjour mon cher ucfoutu,

En fait, je travaille sur une copie de mon fichier original (même nom de fichier mais dans un autre dossier).
j'ai créé 2 userfroms, 1 pour l'affichage formulaire d'autorisation d'accès et 1 autre pour la modification du mot de passe.
Pour le formulaire d'autorisation: il y a 2 textbox pour user et pass, ainsi que 2 boutons pour valider et pour afficher le formulaire de modification du mot de passe. Qui comporte 2 textbox pour ancien et pour nouveau pass avec 2 boutons "Annuler" et "valider modification".
sur la feuille "users" en colonne A ==> noms et en colonne B ==> les pass;
en A1 entête:"Noms" et en B1 entête:"Pass".
Pour le codage vu mon niveau, je n'ai pas fait beaucoup de chose.

Code pour les boutons de la feuille "Menu":
Sub Bouton40_Clic()
UserPass.Show
End Sub
Sub Bouton41_Clic()
UserPass.Show
End Sub
Sub Bouton42_Clic()
UserPass.Show
End Sub
Sub Bouton82_Clic()
UserPass.Show
End Sub
Sub Bouton83_Clic()
UserPass.Show
End Sub
Sub Bouton84_Clic()
UserPass.Show
End Sub


Pour formulaire d'autorisation d'accès:
Private Sub UserPass_Initialize()
  Set f = Sheets("Users") 'feuille contenant noms et pass
  TextBox1.Value = Environ(User)
  TextBox2.Value = pass
End Sub

Private Sub CB_Change_Pass_Click()
UserPass.Hide
UserForm6.Show
End Sub


pour formulaire modification mot de passe:
Private Sub CB_annuler_Click()
UserForm6.Hide
End Sub


j'en suis à là pour le moment. En cliquant sur les boutons le formulaire d'autorisation d'accès s'affiche (la textbox1 ne récupère pas l'username).
en cliquant sur le bouton modifier pass le 2ème userform s'affiche et le 1er se masque. Merci.
pour le formulaire d'autorisation: j'ai nommé sa propriété Name-->"UserPass

mais j'ai un problème
Private Sub UserPass_Initialize()
 'Set f = Sheets("Users")
  Me.TextBox1 = Environ("username")
  'TextBox2.Value = pass
End Sub

avec ce code le formulaire s'affiche mais textbox1 ne récupère pas le nom

par contre contre avec ce code le nom s'affiche bien dans textbox1, pourquoi?
Private Sub UserForm_Initialize()
Me.TextBox1 = Environ("username")
End Sub


merci.
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
19
Parce que ceci Private Sub UserForm_Initialize()
est une procédure valide d'ouverture de formulaire

Ceci, Private Sub UserPass_Initialize(), n'est pas valide
C'est considéré comme une procédure que tu as créée tout simplement

MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI
Merci pour ta réponse, initialement UserPass était Userform6, est-ce que je ne risque pas d'erreurs d’exécution car cette userform s'affiche de 6 boutons différents, vérifie utilisateur et pass, si tout est correct affiche une userform suivant le bouton initialement activer.

merci aussi pour le lien.
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
19
En fait, peu importe le nom du formulaire, la procédure qui s'active à l'ouverture sera toujours Private Sub UserForm_Initialize()

Par contre, dans ton code, si tu écris
Userform6.Show ou autre et que tu changes le nom du formulaire par UserPass, disons, alors tu devras modifier ce nom partout dans le code.

Une façon simple de faire est d'utiliser Ctrl-H, cliquer l'option "Projet en cours" et faire le changement d'un seul coup.


MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI
Bonjour MPi,
Je te remercie pour ta réponse. je suis débutant en VBA, sur une feuille "Menu", j'ai dessiné des rectangles à coins arrondis auxquels j'ai affecté une macro qui affiche une userform bien précise (chaque rectangle ouvre une userform différente). Je voudrai récupérer le nom du rectangle sur lequel on a cliqué, ouvrir un formulaire d'autorisation d'accès et si, le nom et le mot de passe sont valide, la macro affectée au rectangle en question s’exécute. Je sais qu'il faut récupérer un évenement et le nom du shapes dans une variable. Hélas, je ne sais même comment n'y prendre.
Merci beaucoup.
Bonne journée!
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
19
Nul besoin de connaître son nom.
Lorsque tu affectes une macro à un bouton, c'est elle qui déterminera l'action à poser.

C'est donc dans cette macro, au début, que tu dois faire la validation.
Ça peut se passer de différentes façons, mais à ce que je comprends, tu veux afficher un formulaire de validation. Comme tu as déjà une feuille avec les noms en A et les PW en B, aussi bien y afficher la validation en C. Autrement, tu pourrais utiliser une variable Public déclarée en entête d'un module.

Donc, en début de procédure, tu appelles ton formulaire de validation.
Lorsque la réponse est donnée, tu valides et fermes ce formulaire et le code de ta macro continue.
Si la réponse est négative tu sors de la macro avec Exit Sub.
Autrement, le code continue


MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI
Merci pour ta réponse.

Donc si j'ai bien saisis, je dois insérer le code de validation au début de chaque macros (étant donné qu'à chaque "Shapes" est affectée une macro)
voici le code d'une macro
Sub Aller_a_Consultation_PV()

    UserPass.Show

    Sheets("ConsultPV").Select
    Consult_Campagne
    End Sub


Ainsi, le formulaire d'accès s'affiche.
En fait, j'ai 3 niveaux d'accès (N3--> accès à tout, administrateur; N2-->saisie données et N1--> juste pour la consultation). c'est là que ça se coince, comment faire pour gérer ces 3 niveaux?

Merci de m'avoir éclairé car j'avais pris la mauvaise voie en cherchant à récupérer le nom du shapes activé.
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
19
Dans la feuille où tu entres les username et mots de passe, tu peux y mettre le niveau d'accès pour chaque utilisateur pour chaque formulaire ou feuille. Si l'utilisateur n'y est pas, tu donnes accès en lecture seule.

Mais je ne vois pas vraiment l'utilité d'avoir un mot de passe à moins que les gens puissent se brancher sous le nom d'un autre...
Environ("Username") donne toujours le nom de celui qui s'est branché...


MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI
Bonsoir,

En fait, dans l'entreprise on peut accéder à sa session "DNS" depuis n'importe quels micros. Mais ce fichier est stocké sur celui de notre service et sommes à 10 à travailler dessus avec des niveaux différents.
Le "3" pour les 2 administrateurs qui sont les seuls à pourvoir effectuer des corrections s'il y des erreurs; le "2" pour ceux qui saisissent les données et le "1" pour seulement la consultation des données et impression, et si l'utilisateur n'y pas est le fichier doit se fermer. Donc chacun de nous se connecte avec son loggin et son pwd.
Ma feuille qui contient les users se compose ainsi:
colA...........colB.......colC
Noms...........PWD.......Niveaux
X1.............pass........3
X2.............pass........2
X3.............pass........1

Je bloque pour gérer les 3 niveaux, à chaque niveau correspond 3 userforms.
Si comme tu me le suggères, j'affecte à chaque userform un niveau, je dois récupérer le nom de chacun d'eux.

Merci, bonne soirée!
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
19
Idéalement, ce serait de mettre une valeur à quelque part dans une feuille cachée après la validation, mais on peut aussi utiliser une variable Booléenne déclarée en Public en entête dans un Module général

Dans le module
Public Valide as Boolean

Et dans ta procédure de validation dans UserPass, tu assigne True ou False à la variable Valide

Sub Aller_a_Consultation_PV()

    UserPass.Show  'Ici ça doit mettre Vrai ou Faux à la variable Valide
    
    If not Valide Then Exit sub

    Sheets("ConsultPV").Select
    Consult_Campagne
End Sub


MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI
Bonjour,

Je te remercie pour tes conseils. Je ne maîtrise pas bien le VBA, mais vaille que vaille je vais m'y mettre en fouinant dans l'aide pour suivre tes conseils et parvenir, je l'espère à trouver une solution.

Merci beaucoup! et très Bonne journée!
m6 pour ce que vous faites pour ns les bleus,g s8 un amateur programmeur qui cherche de l'expérience pour devenir un expert programmeur.
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
239
Bonjour, mbagna,
m6 pour ce que vous faites pour ns les bleus,g s8 un amateur programmeur qui cherche de l'expérience pour devenir un expert programmeur.

bien, mais commence alors par lire le règlement et reviens avec autre chose que du SMS, car vois-tu, ici, on s'efforce de parler une langue commune et comprise par tous. C'est même une règle :
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
Bonjour,

Je suis absolument d'accord avec ucfoutu. Les messages SMS doivent être diffusés via un opérateur de téléphonie. Ayant ouvert cette discussion, j'aurais aimé qu'on ignore mon message, plutôt que de recevoir des textos ou des messages m'expédiant sur les roses. Personnellement, j'ai adhéré à ce forum dans une perspective d'apprentissage et non pour faire du "chiffre" (comptabilisation des messages).

Sans préjugés et sans rancunes.

Bon week-end à toute la communauté.