Visibiliter d'un bouton en fonction d'un utilisateur

Bonjour à toute et tous.

Je viens vers vous car après de multiples recherches et essais infructueux sur les formes (shapes) et l'élaborations de la condition pour les gérer, je pédale dans la semoule.

Je pose le contexte. J'ai un onglet accueil où 4 formes que j'appellerais bouton m'ouvre respectivement 4 userformes. J'ai associé chaque userformes a chaque boutons respective via des macros. Jusque là, pas de soucis.

De plus, j'ai aussi un onglet admin qui me sert de stockage des identifiants et mot de passe. Chaque utilisateur, n'aura pas les mêmes droits que un autre. C'est droits sont géré par l'admin qui donne le droit à telle utilisateur d’accéder à telle bouton via la présence ou non d'une croix pressent dans la colonne possédant le même nom que le bouton.

Ma problématique, c'est que j'arrive pas à crée un code convenable. A chaque fois je me heurte à un mur. Soit je code pas de la bonne manière, sois je crée pas une bonne condition et mon manque de connaissance dans la méthode shapes m'aide pas.

Au final, j'aimerais que user1 ne vois que connection_compte et planning, que user2 voir facturation et planning, que admin vois tout, ect.

Dit moi ce que vous en penser et j’espère que je me suis bien exprimer

Merci à tous en tout cas.

11test.xlsm (32.60 Ko)

Bonjour,

J'ai fait une adaptation pour toi ...

Voir si ça convient ...

Étant donné que c'est un téléchargement,

accepte pour la sécurité ... ferme-le ... rouvre-le ... pour avoir l'effet "normal".

ric

Bonjour

le mieux faire une gestion par profil

donne moi ton profil de l'ordi pour le mettre dans ton onglet Admin

voila ton fichier avec mon profil a voir

A+

Maurice

18test.xlsm (31.78 Ko)

Bonjour à tous.

Merci de vos réponse et de votre aide.

Alors pour répondre à tous.

Bonjour,

J'ai fait une adaptation pour toi ...

Voir si ça convient ...

Étant donné que c'est un téléchargement,

accepte pour la sécurité ... ferme-le ... rouvre-le ... pour avoir l'effet "normal".

ric

S'est exactement ce que je voulais. S'est pas parfait.

Bonjour

le mieux faire une gestion par profil

donne moi ton profil de l'ordi pour le mettre dans ton onglet Admin

voila ton fichier avec mon profil a voir

A+

Maurice

Que veux tu dire par gestion par profil et profil d'ordi? Quelle est on idée? Apparemment certain fonction ne marche pas sur mon ordi vu que s'est un 64bits.

Merci en tout cas de votre aide.

re tout le monde

Dit moi ric, tu peux me dire la difference entre ton code :

Set f1 = Worksheets("Admin")
Worksheets("Accueil").Select
    If f1.Cells(LigE, 3) <> "" Then
        ActiveSheet.Shapes("Rectangle à coins arrondis 3").Visible = True
    Else: ActiveSheet.Shapes("Rectangle à coins arrondis 3").Visible = False
    End If

    If f1.Cells(LigE, 4) <> "" Then
        ActiveSheet.Shapes("Rectangle à coins arrondis 1").Visible = True
    Else: ActiveSheet.Shapes("Rectangle à coins arrondis 1").Visible = False
    End If

    If f1.Cells(LigE, 5) <> "" Then
        ActiveSheet.Shapes("Rectangle à coins arrondis 4").Visible = True
    Else: ActiveSheet.Shapes("Rectangle à coins arrondis 4").Visible = False
    End If

    If f1.Cells(LigE, 6) <> "" Then
        ActiveSheet.Shapes("Rectangle à coins arrondis 2").Visible = True
    Else: ActiveSheet.Shapes("Rectangle à coins arrondis 2").Visible = False
    End If

et le mien :

Private Sub BT_Valider_Click()
Verification_ID
Verification_MdP

Dim ws As Worksheet

Set ws = Worksheets("Gestion des acces")
Worksheets("Accueil").Select

If ws.Cells(LigE, 3) <> "" Then  'Le debuger me surligne en jaune ce bout de code.
    ActiveSheet.Shapes("Création de Compte").Visible = True
    Else
    ActiveSheet.Shapes("Création de Compte").Visible = False
End If

If ws.Cells(LigE, 4) <> "" Then
    ActiveSheet.Shapes("Connection Compte").Visible = True
Else
    ActiveSheet.Shapes("Connection Compte").Visible = False
End If

If ws.Cells(LigE, 5) <> "" Then
    ActiveSheet.Shapes("InventaireLab").Visible = True
Else
    ActiveSheet.Shapes("InventaireLab").Visible = False
End If

If ws.Cells(LigE, 6) <> "" Then
    ActiveSheet.Shapes("FacturationLab").Visible = True
Else
    ActiveSheet.Shapes("FacturationLab").Visible = False
End If

If ws.Cells(LigE, 7) <> "" Then
    ActiveSheet.Shapes("OuvertureMicroLab").Visible = True
Else
    ActiveSheet.Shapes("OuvertureMicroLab").Visible = False
End If

End Sub

Toi, tu déclare une variable public dans le module 3. Mais moi j'ai beau déclaré en public (comme toi) ou en privé, pas moyen de faire la même chose. Cela me donne " Erreur d'exécution '1004' : Erreur définie par l'application ou par l'objet ".

J'ai fait un boucle, en déclarant i comme variable integer dans un boucle For en partant de 4 to 7 (plage de mon tableau contenant les "x") pour voir si cela changer quelque chose, mais rien. J'ai changé le <> par un =, même erreur.

Merci de l'explication que tu me donnera.

Bonjour,

Il y a plusieurs différences avec mon fichier, dont la vérification des mots de passe que j'ai empruntés au fichier que je t'ai soumis au début en tant qu'exemple.

Dans la fonction "Function VerifMDP(Utilisateur As String, Mdp As String) As Boolean", il y a la recherche de "l'identifiant" et du "mot de passe". C'est dans cette fonction que la variable publique "LigE" (le numéro de la ligne où ont été trouvés l'identifiant et son mot de passe) est renseignée.

Dès lors, la macro "AfficheFeuilles" peut lire la bonne ligne "LigE" pour opérer sur les options affiche/n'affiche pas.

Quand la variable est publique, sa valeur peut être passée d'une macro à l'autre; sinon, la valeur de la variable est restreinte à la macro en cours.

Je suggère de commencer sur la macro "Sub Workbook_Open()" dans ThisWorkbook et de faire F8 (un pas-à-pas) pour suivre la progression. Ainsi, on en plaçant le curseur de souris sur une variable où la progression est rendue, on peut en voir la valeur.

J'espère que ça répond à une partie de tes interrogations.

Ric

BOnjour ric.

Alors oui j'avais vu que tu avais fait une fonction à pare entière et différent de moi pour vérifier le mdp et le nom d'utilisateur. Sur ça, je mis retrouve.

Mais si tu veux, j'ai aussi déclarer la varible LigE en public (module 1) en lui attribuant une valeur (comme toi). Mais cela resort toujours la même erreur.

Est-ce que le fait que je ne l'ai pas mis dans une fonction comme toi, me donne cette erreur?

On est bien d'accord que même si j'ai pas fait une fonction entière mais structure conditionnelle classique pour vérifie mes mdp et nom utilisateur , cela change rien?

Si je déclare LigE en entier et que je lui attribue la valeur 0, ensuite que je l'assigne dans ma condition, cela devrais marcher non?

Edit:

bon, j'ai utilisé la touche F8 pour suivre pas-à-pas la procédure. Ma variable LigE reste à 0. Je te met le code que j'utilise :

Private Sub BT_Valider_Click()
Verification_ID
Verification_MdP
Dim LigE As Integer
Dim i As Integer
Dim ws As Worksheet

i = 4
Set ws = Worksheets("Gestion des acces")
Worksheets("Accueil").Select

For i = 4 To LigE
If ws.Cells(LigE, 3) <> "" Then
    ActiveSheet.Shapes("Création de Compte").Visible = True
    Else
    ActiveSheet.Shapes("Création de Compte").Visible = False
End If

If ws.Cells(LigE, 4) <> "" Then
    ActiveSheet.Shapes("Connection Compte").Visible = True
Else
    ActiveSheet.Shapes("Connection Compte").Visible = False
End If

If ws.Cells(LigE, 5) <> "" Then
    ActiveSheet.Shapes("InventaireLab").Visible = True
Else
    ActiveSheet.Shapes("InventaireLab").Visible = False
End If

If ws.Cells(LigE, 6) <> "" Then
    ActiveSheet.Shapes("FacturationLab").Visible = True
Else
    ActiveSheet.Shapes("FacturationLab").Visible = False
End If

If ws.Cells(LigE, 7) <> "" Then
    ActiveSheet.Shapes("OuvertureMicroLab").Visible = True
Else
    ActiveSheet.Shapes("OuvertureMicroLab").Visible = False
End If

Next

End Sub

Est-ce que mon raisonnement est :

1: J'ai typé toute mes variable.

2: J'assigne à i la valeur numérique 4.

3: Je met dans un boucle For mon instruction avec comme argument (je sais pas si c'est le bon terme) que i = 4 et doit aller jusqu'a LigE.

Remarque: Dans mon code j'assigne 4 deux fois à i. Normalement cela change rien.

Est-ce que mon raisonnement est bon?

Bonjour,

À LigE, j'attribue la valeur 0 pour "vider" la variable > ce qui n'est pas nécessairement obligatoire.

Ensuite, pour valider l'utilisateur et le mot de passe, il faut les trouver dans la feuille "Admin" > dès lors, on a le numéro de ligne où sont situés l'utilisateur et le mot de passe > on donne ce numéro de ligne à la variable publique "LigE".

Ensuite, le code, vers la fin de la macro "BT_Valider_Click", connaît la ligne pour les conditions d'affichage/masquage.

Set f1 = Worksheets("Admin")
Worksheets("Accueil").Select
    If f1.Cells(LigE, 3) <> "" Then
...

ric

Bonjour,

Ensuite, pour valider l'utilisateur et le mot de passe, il faut les trouver dans la feuille "Admin" > dès lors, on a le numéro de ligne où sont situés l'utilisateur et le mot de passe > on donne ce numéro de ligne à la variable publique "LigE".

Comment je fait ça avec mon code?

Bonjour,

Fait un pas-à-pas (F8) sur ton code.

Quand tu vas arriver à l'endroit où l'utilisateur et le mot de passe sont trouvés, il y a sûrement moyen de connaître la ligne concernée.

Est-ce que tu utilises toujours ton code du fichier d'origine pour valider l'utilisateur et mot de passe ?

ric

Re,

Oui oui toujours.

J'ai réussi à paramétré la ligne avec Lig, Dlig. J 'ai fait un peu comme tu à fait mais maintenant cela me dit " Erreur d'exécution ''9: L'indice n'appartient pas à la séléction." sur With Sheets("Gestion des acces").

Bonjour,

Moi, j'écrirais > With WorkSheets("Gestion des acces") au lieu de sheets.

Ensuite, assure-toi que "Gestion des acces" est bien le nom exact de ta feuille, tu peux faire un copier/coller du nom de la feuille pour être parfaitement sûr.

Si tu es trop mal pris, tu peux me faire parvenir ton fichier en message privé.

ric

Re,

Oui c'est ce que j'ai fait. L'erreur n'est plus.

Sauf que maintenant j'ai " erreur d'execution 1004 : erreur définie par l'application ou par l'object".

Je tourne en rond. Je t’envoie ca en mp mais pourrait tu quand même m'expliquer stp

Pour répondre à ce poste et à eventuellement d'autre personne qui aurais eu la même erreur que moi.

Erreur d'exécution 1004 était du à ma variable LigE qui était vide (Nothing), cela voulais dire qu'elle ne trouver que la plage que je lui avais assigner de lire, il ne là trouver pas.

Problème Résolu et merci encore Ric.

Rechercher des sujets similaires à "visibiliter bouton fonction utilisateur"