Aide pour améliorer macro afin de rendre code plus digeste

JerCaz

XLDnaute Occasionnel
Bonjour le forum,

dans le cadre de la réalisation d'un projet institutionnel dans l'hôpital où je travaille, je réalise un document excel destiné à être partagé entre plusieurs utilisateurs.

Chaque utilisateur doit s'identifier (nom de session + mot de passe), puis il clique sur un autre bouton pour être orienté vers la feuille qui le concerne.

SUr la feuille "accueil", j'ai donc réalisé un UserForm (nommé connexion) où l'utilisateur est amené à remplir 2 textbox (nom utilisateur + mdp).
Ne voulant surtout pas que dès qu'il est identifié, l'utilisateur soit orienté automatiquement vers la bonne page, mais qu'il choisisse de le faire lui-même
en cliquant sur un bouton séparé, j'ai donc créé un deuxième bouton avec le code suivant (qui fonctionne, mais qui est très indigeste):

Code:
Private Sub CommandButton2_Click()
If Connexion.TextBox1.Value = "session1" And Connexion.TextBox2.Value = "mdp1" Then
Worksheets("session1").Activate
ElseIf Connexion.TextBox1.Value = "session2" And Connexion.TextBox2.Value = "mdp2" Then
Worksheets("session2").Activate
ElseIf Connexion.TextBox1.Value = "session3" And Connexion.TextBox2.Value = "mdp3" Then
Worksheets("session3").Activate

'Etc, en fonction du nombre possible d'utilisateurs différents

Else: MsgBox "Vous n'avez pas les droits nécessaires pour utiliser cet outil. Merci de contacter le service de brancardage au poste 5879.", vbExclamation, "Utilisateur non reconnu!"
End If
End Sub


Afin d'améliorer ce code fastidieux, j'ai créé dans l'onglet admin 2 colonnes, contenant en A toutes les sessions autorisées, et en B, juste à côté, les mots de passes correspondants.

Je souhaiterais donc savoir s'il est possible, en cliquant sur le CommandButton2, de comparer le textbox1 renseigné par l'utilisateur avec le contenu de la colonne A de l'onglet admin, de vérifier que le textbox2 est bien le mot de passe correspondant, et si c'est le cas, de diriger vers le bon onglet, qui s'appelle systématiquement comme le nom d'utilisateur.

Pensez-vous que ce soit réalisable? Si oui, comment faire?
Je sollicite donc votre aide afin de parvenir à ce résultat.

Postant sur le forum depuis mon lieu de travail, je n'ai pas la possibilité d'héberger mon fichier sur "ci-joint", c'est pour ça que je me permets de le transmettre sur le forum par une autre méthode, peu conventionnelle. Je vous prie de bien vouloir m'excuser pour ce "contre charte".

Voir le Fichier : test-mdp.zip

D'avance, merci beaucoup pour votre aide !!!!
Cordialement,
JerCaz
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : Aide pour améliorer macro afin de rendre code plus digeste

Bonjour JerCaz, bonjour le forum,

Si j'ai bien compris... ton fichier modifié en pièce jointe avec le code ci-dessous :

Code:
'Si le bouton OK est cliqué
Private Sub Accepter_Click()
Dim x As Byte 'déclare la variable x
Dim r As Range 'déclare la variable r (Recherche)
 
'oblige à éditer tous les champs
For x = 1 To 2
    If Me.Controls("TextBox" & x).Value = "" Then
        MsgBox "Vous devez remplir ce champ !"
        Me.Controls("Textbox" & x).SetFocus
        Exit Sub
    End If
Next x
 
'prend en compte la liste des utilisateurs
With Sheets("Admin").Range("A3:A" & Sheets("Admin").Range("A65536").End(xlUp).Row)
    Set r = .Find(TextBox1.Value, lookAt:=xlWhole) 'définit la variable r
    If Not r Is Nothing Then 'condition 1 : si il existe au moins une occurrence de r
        If r.Offset(0, 1).Value <> TextBox2.Value Then 'condition 2 : si la cellule adjacente ne correspond pas au mot de passe
            'message
            MsgBox "Vous n'avez pas les droits nécessaires pour utiliser cet outil. Merci de contacter le service de brancardage au poste 5879.", vbExclamation, "Utilisateur non reconnu!"
            Unload Me 'vide et ferme l'UserForm
        End If 'fin de la condition 2
    Else 'sinon (condition 1)
        'message
        MsgBox "Vous n'avez pas les droits nécessaires pour utiliser cet outil. Merci de contacter le service de brancardage au poste 5879.", vbExclamation, "Utilisateur non reconnu!"
    End If 'fin de la condition 1
End With 'fin de la prise en compte...
Unload Me 'vide et ferme l'userform
End Sub
 

Pièces jointes

  • JerCaz_v01.xls
    111.5 KB · Affichages: 63
  • JerCaz_v01.xls
    111.5 KB · Affichages: 69
  • JerCaz_v01.xls
    111.5 KB · Affichages: 71

JerCaz

XLDnaute Occasionnel
Re : Aide pour améliorer macro afin de rendre code plus digeste

Bonjour Robert, et merci pour ton aide!!!

Je rencontre un petit soucis avec ton code:
lorsque sur la feuille "accueil", une fois les identifiants renseignés dans le UserForm "Connexion", je clique sur le CommandButton2 (intitulé à l'écran "Aller à la bonne page"), j'obtiens le message "utilisateur non reconnu", mais il ne m'envoie pas sur la feuille correspondante.

Comme je le disais plus haut, pour des raisons d'utilisation spécifiques à mon lieu de travail, il m'est nécessaire de faire en sorte que l'utilisateur s'identifie en cliquant sur le premier bouton intitulé "S'identifier ici", et qu'il ne soit orienté vers la bonne feuille uniquement lorsqu'il clique sur le deuxième bouton intitulé "Alle à la bonne page". (je m'étais mal exprimé, c'était du charabia que j'avais écrit... oups, désolé).

J'ai donc essayé d'adapter ton code, en le scindant en 2 et en mettant la seconde partie dans le code de la feuille "Accueil", mais j'obtiens un beau message d'erreur que je ne sais pas interpréter...

Voici donc le fichier tel que je l'ai modifié (et qui ne fonctionne pas....):
Voir le Fichier : JerCaz_v03.xls
 

phlaurent55

Nous a quittés en 2020
Repose en paix
Re : Aide pour améliorer macro afin de rendre code plus digeste

Bonjour à tous
Voir le commentaire en fin de code ( ligne rouge à supprimer et remplacer par la ligne verte)

Code:
'Si le bouton OK est cliqué
Private Sub Accepter_Click()
Dim x As Byte 'déclare la variable x
Dim r As Range 'déclare la variable r (Recherche)

'Connexion.Hide
For x = 1 To 2
    If Me.Controls("TextBox" & x).Value = "" Then
        MsgBox "Vous devez remplir ce champ !"
        Me.Controls("Textbox" & x).SetFocus
        Exit Sub
    End If
Next x
'prend en compte la liste des utilisateurs
With Sheets("Admin").Range("A3:A" & Sheets("Admin").Range("A65536").End(xlUp).Row)
    Set r = .Find(TextBox1.Value, lookAt:=xlWhole) 'définit la variable r
    If Not r Is Nothing Then 'condition 1 : si il existe au moins une occurrence de r
        If r.Offset(0, 1).Value <> TextBox2.Value Then 'condition 2 : si la cellule adjacente ne correspond pas au mot de passe
            'message
            MsgBox "Vous n'avez pas les droits nécessaires pour utiliser cet outil. Merci de contacter le service de brancardage au poste 5879.", vbExclamation, "Utilisateur non reconnu!"
            Unload Me 'vide et ferme l'UserForm
        End If 'fin de la condition 2
    Else 'sinon (condition 1)
        'message
        MsgBox "Vous n'avez pas les droits nécessaires pour utiliser cet outil. Merci de contacter le service de brancardage au poste 5879.", vbExclamation, "Utilisateur non reconnu!"
    End If 'fin de la condition 1
End With 'fin de la prise en compte...
[COLOR="Red"][B]Unload Me 'vide et ferme l'userform[/B][/COLOR]
' à remplacer par
[COLOR="Green"][B]Connexion.Hide [/B][/COLOR]' qui ne "vide" pas les données entrées précédement
End Sub

@ JerCaz le code ci-dessus est celui de Robert ............. ne reprends celui de ton dernier message à 17h15'

bonne fin de journée
Philippe
 

JerCaz

XLDnaute Occasionnel
Re : Aide pour améliorer macro afin de rendre code plus digeste

Bonsoir le forum,
Bonsoir phlaurent55,
Bonsoir Robert,

et merci pour votre aide!

J'ai bien mmodifié le code de Robert avec "Connexion.Hide".
Le seul problème, c'est que mon 2ème bouton ne me dirige sur la bonne feuille qu'à cause du résidu de code de la première version... (fichier d'origine), c'est à dire avec ceci:
Code:
Private Sub CommandButton2_Click()
If Connexion.TextBox1.Value = "session1" And Connexion.TextBox2.Value = "mdp1" Then
Worksheets("session1").Activate
ElseIf Connexion.TextBox1.Value = "session2" And Connexion.TextBox2.Value = "mdp2" Then
Worksheets("session2").Activate
ElseIf Connexion.TextBox1.Value = "session3" And Connexion.TextBox2.Value = "mdp3" Then
Worksheets("session3").Activate

'Etc, en fonction du nombre possible d'utilisateurs différents

Else: MsgBox "Vous n'avez pas les droits nécessaires pour utiliser cet outil. Merci de contacter le service de brancardage au poste 5879.", vbExclamation, "Utilisateur non reconnu!"
End If
End Sub

C'est cette partie de code que je souahite supprimer... Et quand je supprime cette partie de code, le bouton 2 ne répond plus.
Enfin, si j'ai bien supprimé ce qu'il fallait... (ça, c'est vraiment pas sûr...)
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : Aide pour améliorer macro afin de rendre code plus digeste

Bonjour JerCaz, Philippe, bonjour le forum,

En pièce jointe une version 2. J'ai garder le Unload mais j'utilise deux variables déclarées publiques au niveau module à la place. Une Booléenne test qui permet de savoir si la correspondance session/mot_de_passe est correcte et l'autre f qui récupère le nom de l'onglet.

Mais je pense que l'on pourrait supprimer le second bouton Aller à la bonne page et activer l'onglet indiqué dans la TextBox2 au clic du bouton Accepter de l'userform Connexion... Regarde la version 3 ce que ça peut donner.
 

Pièces jointes

  • JerCaz_v02.xls
    115.5 KB · Affichages: 63
  • JerCaz_v03.xls
    114 KB · Affichages: 100

JerCaz

XLDnaute Occasionnel
Re : Aide pour améliorer macro afin de rendre code plus digeste

En fait, robert, tu m'as convaincu pour l'utilisation en un seul bouton.
Ca marche parfaitement.
Merci pour ton aide, ainsi qu'à phlaurent55.

Bonne soirée!
 

Discussions similaires

Réponses
8
Affichages
615

Statistiques des forums

Discussions
311 710
Messages
2 081 781
Membres
101 817
dernier inscrit
carvajal