UserForm mot de passe avec Nom et Prénom

Bonjour, j'ai un UserForm de connexion avec 4 Textbox et 1 bouton "Valider" :

Textbox1 : Initiales

Texbox3 : Nom (verrouillé)

Textbox4 : Prénom (verrouillé)

Textbox2 : Mot de passe

J'ai un tableau sur la feuille "parametrage" de 4 colones contenant :

Colonne A : les noms

Colonne B: les prénoms

Colonne C : les initiales

Colonne D : les mots de passe

Et plusieurs colonnes activant les feuilles à afficher selon les initiales rentrées dans le Textbox1

Pour l'instant, je rentres les initiales dans le Texbox1 et le mot de passe dans le Textbox2, cela m'affiche bien les feuilles cochées dans le tableau. Jusque là, pas trop compliqué, le code est sur de nombreux forums.

Je voudrais que quand on rentre les initiales dans le Textbox1 et que l'on appuie sur Entrée ou que l'on clique sur le Texbox2, ça aille rechercher le nom dans la colonne A de la ligne correspondant à ces initiales et le prénom de la colonne B, et que ça me les insère dans les Textbox 3 et 4.

Est-ce posible ?

Bonjour, oui c'est possible.

Bonjour Machin, j'ai essayé d'insérer ce code :

If Me.TextBox1.ListIndex = -1 Then Exit Sub
  Ligne = Me.Textbox1.ListIndex + 5

  Me.TextBox3 = Ws.Range("A" & Ligne)
  Me.TextBox4 = Ws.Range("B" & Ligne)
End If

dans le module sous Else

Option Explicit

'J'ai fait le chiox d'une fonction car il ne s'agit que de savoir
'si le mot de passe correspond à l'utilisateur.
'par conséquent, il nous faut une procédure qui compare les 2
'et qui renvoie VRAI ou FAUX (d'où la fonction déclarée As Boolean).
    'ICI : (Utilisateur As String, MdP As String)
    'sont des paramètres envoyés lors du clic sur le bouton

Function VerifMDP(Utilisateur As String, MdP As String) As Boolean
Dim rngTrouve As Range
VerifMDP = False 'par défaut, renvoie FAUX

With Sheets("parametrage") 'dans la feuille paramétrage
     'cherche, colonne c, le nom d'utilisateur saisi
    Set rngTrouve = .Columns(3).Cells.Find(Utilisateur, lookat:=xlWhole)
    If rngTrouve Is Nothing Then 'si il ne trouve pas
        VerifMDP = False 'la fonction renvoie faux
    Else 's'il le trouve
        'vérifie que le mot saisi feuille parametrgae colonne B est identique
        'au mot de passe saisi dans l'USF

        If rngTrouve.Offset(0, 1) <> MdP Then
            VerifMDP = False 'si FAUX
        Else
            VerifMDP = True 'si VRAI
        End If
    End If
End With
End Function

Mais ça ne fonctionne pas.

Est-ce bien les lignes à ajouter et ou faut-il les ajouter ?

Rien d'anormal dans le code hormis ceci :

If Me.TextBox1.ListIndex = -1 Then Exit Sub
  Ligne = Me.Textbox1.ListIndex + 5

Un textbox n'a pas de listindex

En fait j'ai pris ce code sur un vieux projet que j'avais fait mais avec un Combobox.

Cela ne change rien au fait.

Ah oui les Textbox c'est .Value

Si je modifie ListIndex par Value pensez vous que cela fonctionnerait ?

une chance sur un million dans le meilleur des cas.

J'essaie en rentrant et je vous tiens au courant mais vous n'avez pas l'air convaincu

Je suis convaincu que cela ne marchera pas. Vous ne pouvez pas demander à un textbox de vous retourner un numéro d'index.

Un petit indice serait le bienvenu parce que là je sèche !!!

Si les initiales sont dans un textbox, vous avez deux solutions pour rapatrier les informations.

Soit vous faites une boucle qui lit chaque cellule de votre feuille et les compare avec la valeur de textbox1 pour trouver la ligne de correspondance.

--> https://www.excel-pratique.com/fr/vba/boucles.php

Soit vous utilisez la méthode find pour trouver la valeur de textbox1 dans la colonne des initiales.

--> https://msdn.microsoft.com/fr-fr/library/office/ff839746.aspx

Soit vous présentez un fichier exemple et peut-être que quelqu'un le fera à votre place

-->

Bonjour, je ne comprend pas comment faire.

Là, je crois que je suis au bout de mes capacités, je vous joint un fichier test.

Pouvez-vous regarder et m'expliquer dans la macro ce que vous faites que je comprennes ?

Les initiales du compte pricipal sont AB et le mdp 11.

Merci de votre aide.

52classeur2.xlsm (34.77 Ko)

voici le code pour afficher les noms et prénoms

Private Sub TextBox1_Change()
  Dim PLAGE As Range, trouve As Range
  TextBox1.Value = UCase(TextBox1.Value)  'Force les majuscules dans le textbox3
  If Len(TextBox1) = 2 Then  's'il y a deux initiales dans le textbox1
    Set PLAGE = Feuil12.Range("C2:C" & Feuil12.UsedRange.Rows.Count)  'je défini ma plage de recherche des initiales
    Set trouve = PLAGE.Find(TextBox1, lookat:=xlWhole)  'je cherche dans ma plage les initiales contenu dans le textbox1
    If Not trouve Is Nothing Then  'si j'ai trouvé les initiales (la variable trouve est un objet range)
      TextBox3 = trouve.Offset(0, -2)  ' la valeur de mon textbox3 est = la valeur qui se trouve à deux colonnes vers la gauche des initiales trouvées
      TextBox4 = trouve.Offset(0, -1)  ' la valeur de mon textbox4 est = la valeur qui se trouve à une colonnes vers la gauche des initiales trouvées
    Else  'sinon
      MsgBox "Initiale introuvable" & Chr(10) & "Merci de contacter l'administrateur du ficher si le problème persiste"  'affichage d'une alerte

    End If
  Else 'sinon si il y a moins de deux initiales
    TextBox3 = "" 'j'efface le textbox
    TextBox4 = "" 'j'efface le textbox
  End If
  Set PLAGE = Nothing ' j'efface la variable
  Set trouve = Nothing 'j'efface la variable
End Sub ' fin de la macro

Merci pour le code, je vais l'étudier à tête reposée pour le comprendre.

La où vous allez vous poser des questions c'est sur la fameuse variable "trouve" , la tendance (dans l'apprentissage de la méthode find) est de croire qu'elle renvoie une valeur alors que non, elle renvoie une cellule et tout ce qui va avec. de façon imagée, vous êtes dans un batiment et on vous demande de trouver le bureau B54. Quand vous l'avez trouvé, vous n'avez pas trouvé le "N° B54"vous avez le bureau nommé B54 avec tout ce qu'il y a dedans (meuble, papier,téléphone,ordinateur)...Et tous ses derniers (meuble, papier, téléphone...) se sont tout ce que l'on peu trouver dans la cellule (valeur, couleur, police d'écriture,formule,bordure etc...)

d'où l'utilisation de trouve.Offset(0, -1) pour dire : j'ai trouvé mon bureau, mais je sais que je dois allé 1 bureau à côté...

bref

J'étais bien parti sur Find et trouve, mais je vous avoue que j'étais très loin du code.

Je ne savais pas comment les employer.

Je pense que sans vous, dans un an j'y étais encore.

Un grand merci à vous et un grand merci à ceux comme vous qui nous aidez tous les jours.

Christophe

Merci à vous également car en restant humble...Vous sans nous et nous sans vous...Le forum n'aurait pas d'intérêt

Rechercher des sujets similaires à "userform mot passe nom prenom"