XL 2016 Modification de droits d'accès par UF

ReneDav14000

XLDnaute Occasionnel
Bonjour à toutes et à tous,
J'ai créé un formulaire pour gérer les droits d'accès des utilisateurs.
Certains agents existent déjà et peuvent voir leurs droits être modifiés et d'autres nouveaux utilisateurs se voir attribuer des droits d'accès.
Dans la feuille "Accès" du fichier ci-joint il y a un tableau nommé "List_User" dans lequel sont entrés des noms avec un mot de passe et des croix indiquant leur(s) droit(s).
Donc si un agent existe déjà et qu'on lui modifie ses droits, des croix doivent être ajoutées ou supprimées.
Pour un nouvel arrivant il ne peut y avoir que des ajouts de croix et l'attribution d'un mot de passe limité à 7 caractères.

Pourriez-vous m'aider à réaliser ce projets s'il vous plait car je n'y arrive pas ?
En vous en remerciant par avance

PS : J'ai oublié une donnée importante, certains utilisateurs peuvent avoir accès à certaine feuille en lecture seulement. Désolé pour cet oubli
 

Pièces jointes

  • Utilisateur.xlsm
    16.3 KB · Affichages: 18
Dernière édition:
Solution
désolé!
VB:
Private Sub ComboUtil_Change()
If Me.ComboUtil.Value = "" Or Me.TextPrenom.Value = "" Or Me.TextMdP.Value = "" Then Exit Sub

With ThisWorkbook.Sheets("Accès")
    Dim I As Integer: I = NomPnom(ComboUtil.Value, TextPrenom.Value, TextMdP.Value, .Range("A:A"))
    If I = 0 Then MsgBox "Pas trouvé": Exit Sub
    With .Cells(I, "A")
        Me.TextPrenom.Value = .Cells.Offset(, 1)
        Me.TextMdP = .Cells.Offset(, 2)
        Me.CheckBoutAgent = .Cells.Offset(, 3) = "X" 'True/False
        Me.CheckBouEntSort = .Cells.Offset(, 4) = "X"
        Me.CheckBoutHor = .Cells.Offset(, 5) = "X"
        Me.CheckBoutEtiq = .Cells.Offset(, 6) = "X"
        Me.CheckFeuilCalcul = .Cells.Offset(, 7) = "X"
        Me.CheckFeuilData =...

ReneDav14000

XLDnaute Occasionnel
Bonsoir,
Ça va sans dire ma ça va mieux en le disant,il faut ajouter le TextMdP dans l'appel de la fonction !

Code:
Function NomPnom(Nom As String, Prenom As String,MPass as string, Plage As Range) As Integer
Dim r As Range, Pos As Integer
pose = 1
Do While pose <> 0
Set r = Plage.Find(Nom, After:=Plage(pose, 1), LookIn:=xlValues)
If Not r Is Nothing Then
    If pose => r.Row Then NomPnom = 0: Exit Function
   If UCase(r.Offset(, 1)) = UCase(Prenom) AND
MPass =r.Offset(, 2) Then NomPnom = r.Row: Exit Function
   pose = r.Row
Else
    NomPnom = 0
    pose = 0
End If
Loop
End Function
Bonsoir dysorthographie,
J'étais parti dans cette direction mais j'avais oublié le AND.
Si je peux me permettre, je pense qu'il manque un E à Pos As Integer, puisqu'ailleurs tu as noté pose.
Merci beaucoup pour ton code. Je teste et je reviens
 

ReneDav14000

XLDnaute Occasionnel
Me voilà déjà de retour. Le test se fait bien au niveau du code également.
Par contre j'ai toujours ce soucis au niveau de ma combo. Il n'y a pas de changement lorsque je clique sur LEGROS, c'est toujours le 1er cliqué qui garde le focus (sur ce nom) car si je change de nom, ça fonctionne bien.
voici le code lié au Combo_Change
VB:
Private Sub ComboUtil_Change()
With ThisWorkbook.Sheets("Accès")
    With .Range("A:A").Find(CStr(Me.ComboUtil.Value), LookIn:=xlValues)
        Me.TextPrenom.Value = .Cells.Offset(, 1)
        Me.TextMdP = .Cells.Offset(, 2)
        Me.CheckBoutAgent = .Cells.Offset(, 3) = "X" 'True/False
        Me.CheckBouEntSort = .Cells.Offset(, 4) = "X"
        Me.CheckBoutHor = .Cells.Offset(, 5) = "X"
        Me.CheckBoutEtiq = .Cells.Offset(, 6) = "X"
        Me.CheckFeuilCalcul = .Cells.Offset(, 7) = "X"
        Me.CheckFeuilData = .Cells.Offset(, 8) = "X"
        Me.CheckBoutReserv = .Cells.Offset(, 9) = "X"
        Me.CheckBoutPlan = .Cells.Offset(, 10) = "X"
        Me.CheckFeuildroits = .Cells.Offset(, 11) = "X"
    End With
End With
End Sub
et celui-ci à l'Initialize de l'UF
Code:
Private Sub UserForm_Initialize()
Me.ComboUtil.Visible = False
Me.TextNOM.Visible = False
Set f = Sheets("Accès")
a = Application.Transpose(f.Range("A2:A" & f.[A65000].End(xlUp).Row))
    Call Tri(a, LBound(a), UBound(a))
    Me.ComboUtil.List = a
End Sub

Sub Tri(a, gauc, droi)
ref = a((gauc + droi) \ 2)
g = gauc: d = droi
Do
    Do While a(g) < ref: g = g + 1: Loop
    Do While ref < a(d): d = d - 1: Loop
    If g <= d Then
    temp = a(g): a(g) = a(d): a(d) = temp
    g = g + 1: d = d - 1
    End If

Loop While g <= d

    If g < droi Then Call Tri(a, g, droi)
    If gauc < d Then Call Tri(a, gauc, d)
End Sub
 

dysorthographie

XLDnaute Accro
VB:
Private Sub ComboUtil_Change()
if Me.ComboUtil.Value="" then MsgBox "" :Exit sub
if Me.TextPrenom.Value="" then MsgBox "" :Exit sub
if Me.TextMdP.Value="" then MsgBox "" :Exit sub

With ThisWorkbook.Sheets("Accès")
    dim I as integer:I=NomPnom(ComboUtil.Value,TextPrenom.Value,TextMdP.Value,.Range("A:A"))
    if i=0 then  MsgBox "Pas trouvé":Exit sub
    With .cells(i,"A")
        Me.TextPrenom.Value = .Cells.Offset(, 1)
        Me.TextMdP = .Cells.Offset(, 2)
        Me.CheckBoutAgent = .Cells.Offset(, 3) = "X" 'True/False
        Me.CheckBouEntSort = .Cells.Offset(, 4) = "X"
        Me.CheckBoutHor = .Cells.Offset(, 5) = "X"
        Me.CheckBoutEtiq = .Cells.Offset(, 6) = "X"
        Me.CheckFeuilCalcul = .Cells.Offset(, 7) = "X"
        Me.CheckFeuilData = .Cells.Offset(, 8) = "X"
        Me.CheckBoutReserv = .Cells.Offset(, 9) = "X"
        Me.CheckBoutPlan = .Cells.Offset(, 10) = "X"
        Me.CheckFeuildroits = .Cells.Offset(, 11) = "X"
    End With
End With
End Sub
 

patricktoulon

XLDnaute Barbatruc
re
c'est normal que le find simple te renverra toujours la première occurence
c'est pas le value qu'il faut utiliser
mais
l'index si la combo est dans le meme ordre que la plage
soit ajouter une colonne invisible dans la combo pour y mettre les index avant tri
si tant est que dans ce contexte un tri soit nécessaire (a mon avis non)
et ce servir des index inscrit dans la colonne supplémentaire de la combo

c'est de l'élémentaire comme raisonnement et tu trouvera moult exemples ici dans le forum

mais pour en revenir a ce que je t'ai dis plus haut dans cette discussion
un login + mdp + recherche dans un tableau(range) doit se faire sur 2 données
alors je ne vois pas ce que viens faire la fonction "find" la dedans
c'est pas du tout une fonction adaptée

c'est de l'ordre du défaut conceptuel là ;)

j'ai eu l'occasion plusieurs fois de participer à tes discussions

je constate 1 chose qui se reproduit a chaque fois

tu ne donne pas tout les éléments d'un coup ou tu ajoute des paramètres en cours de route

ce qui fait que tout le monde y va de sa pseudo science, si bien que tu n'arrive plus a te dépêtrer de détails insignifiant tel que le besoins qui fait l'object de ce post

un projet ça se pense entièrement avant d’écrire la moindre ligne de code

si tu n'es pas capable d'écrire sur une feuille blanche un (schéma l'lorganigramme / les étapes) de l'app que tu désire développer du début à la fin , tu n'arrive a rien de bon

et là il n'est pas question d’être pro ou pas mais simplement de raisonnement

et je dirais même qu'en raisonnant correctement , tu pourrais même te permettre de laisser des blancs dans le raisonnement afin d'y ajouter des eventuelles mises a jour supplémentaire ou nécessaires et à venir

je dis tout ça en toute amitié
 

ReneDav14000

XLDnaute Occasionnel
VB:
Private Sub ComboUtil_Change()
if Me.ComboUtil.Value="" then MsgBox "" :Exit sub
if Me.TextPrenom.Value="" then MsgBox "" :Exit sub
if Me.TextMdP.Value="" then MsgBox "" :Exit sub

With ThisWorkbook.Sheets("Accès")
    dim I as integer:I=NomPnom(ComboUtil.Value,TextPrenom.Value,TextMdP.Value,.Range("A:A"))
    if i=0 then  MsgBox "Pas trouvé":Exit sub
    With .cells(i,"A")
        Me.TextPrenom.Value = .Cells.Offset(, 1)
        Me.TextMdP = .Cells.Offset(, 2)
        Me.CheckBoutAgent = .Cells.Offset(, 3) = "X" 'True/False
        Me.CheckBouEntSort = .Cells.Offset(, 4) = "X"
        Me.CheckBoutHor = .Cells.Offset(, 5) = "X"
        Me.CheckBoutEtiq = .Cells.Offset(, 6) = "X"
        Me.CheckFeuilCalcul = .Cells.Offset(, 7) = "X"
        Me.CheckFeuilData = .Cells.Offset(, 8) = "X"
        Me.CheckBoutReserv = .Cells.Offset(, 9) = "X"
        Me.CheckBoutPlan = .Cells.Offset(, 10) = "X"
        Me.CheckFeuildroits = .Cells.Offset(, 11) = "X"
    End With
End With
End Sub
Merci dysorthographie, mais à chaque changement de NOM j'ai le message "pas trouvé"
 

ReneDav14000

XLDnaute Occasionnel
re
c'est normal que le find simple te renverra toujours la première occurence
c'est pas le value qu'il faut utiliser
mais
l'index si la combo est dans le meme ordre que la plage
soit ajouter une colonne invisible dans la combo pour y mettre les index avant tri
si tant est que dans ce contexte un tri soit nécessaire (a mon avis non)
et ce servir des index inscrit dans la colonne supplémentaire de la combo

c'est de l'élémentaire comme raisonnement et tu trouvera moult exemples ici dans le forum

mais pour en revenir a ce que je t'ai dis plus haut dans cette discussion
un login + mdp + recherche dans un tableau(range) doit se faire sur 2 données
alors je ne vois pas ce que viens faire la fonction "find" la dedans
c'est pas du tout une fonction adaptée

c'est de l'ordre du défaut conceptuel là ;)

j'ai eu l'occasion plusieurs fois de participer à tes discussions

je constate 1 chose qui se reproduit a chaque fois

tu ne donne pas tout les éléments d'un coup ou tu ajoute des paramètres en cours de route

ce qui fait que tout le monde y va de sa pseudo science, si bien que tu n'arrive plus a te dépêtrer de détails insignifiant tel que le besoins qui fait l'object de ce post

un projet ça se pense entièrement avant d’écrire la moindre ligne de code

si tu n'es pas capable d'écrire sur une feuille blanche un (schéma l'lorganigramme / les étapes) de l'app que tu désire développer du début à la fin , tu n'arrive a rien de bon

et là il n'est pas question d’être pro ou pas mais simplement de raisonnement

et je dirais même qu'en raisonnant correctement , tu pourrais même te permettre de laisser des blancs dans le raisonnement afin d'y ajouter des eventuelles mises a jour supplémentaire ou nécessaires et à venir

je dis tout ça en toute amitié
Re,
merci pour ton commentaire. Je vais en tenir compte pour mes prochains projets.
Il n'est pas toujours facile de prévoir toutes les subtilités d'un projet, j'écris les grandes lignes, mais souvent en cours de route le donneur d'ordres les modifie et je fais avec.
Toutefois, tu n'as pas tort...
Je vais devoir m'absenter pendant un bon moment (raison médicale), alors permet moi de te souhaiter de très bonnes fêtes de fin d'année.
A bientôt
Bien amicalement
 

patricktoulon

XLDnaute Barbatruc
re
une dernière chose que je n'est pas dis ou plutôt une question
a tu déjà vu un interface login+ mdp avec une combobox ?
je peux te le dire c'est non !!
et pour cause
le login fait partie de l'identification et pas seulement le mdp
en mettant à dispos un combo des users, tu réduis de moitié la difficulté a un petit malin de se loguer
voir même à un de ts utilisateur de se loguer sous le pseudo d'un autre

là encore je dis ça moi je dis rien
j'essaie juste de te faire voir les failles que tu créée dans ton raisonnement
 

ReneDav14000

XLDnaute Occasionnel
re
une dernière chose que je n'est pas dis ou plutôt une question
a tu déjà vu un interface login+ mdp avec une combobox ?
je peux te le dire c'est non !!
et pour cause
le login fait partie de l'identification et pas seulement le mdp
en mettant à dispos un combo des users, tu réduis de moitié la difficulté a un petit malin de se loguer
voir même à un de ts utilisateur de se loguer sous le pseudo d'un autre

là encore je dis ça moi je dis rien
j'essaie juste de te faire voir les failles que tu créée dans ton raisonnement
L'UF avec la Combo ne sera accessible que par l'administrateur, c'est là que le mot de passe jouera son rôle.
Les autres utilisateurs ne le verront même pas.
 

patricktoulon

XLDnaute Barbatruc
re
L'UF avec la Combo ne sera accessible que par l'administrateur, c'est là que le mot de passe jouera son rôle.
Les autres utilisateurs ne le verront même pas.
ça change pas d'un iota ce que j'ai dis précédemment
je peux te montrer demain si tu veux avec un autre classeur que je peux utiliser toutes tes macros de celui ci sans mot de passe et même faire le contraire de ce qu'il ferait avec un mot de passe ou login invalid

il te suffit d'activer l’accès au projet approuvé par vba (astuce difficile à trouver mais quand meme est apparue ici 2 fois dans ce forum ) ces deux dernières années
lister les macros
et les exécuter a son bon souhait voir même les modifier
 

patricktoulon

XLDnaute Barbatruc
re
entre nous @ReneDav14000
si tu tiens a mettre certaines restrictions a des utilisateur oubli ce userform login/mdp
sert toi de la feuille tout court elle seule avec un mot de passe bien costaud( bien qu’illusoire)sur cette feuille xlveryidden
tu te crée un tableau login | msp | restriction
avec les filtres sélectionner un item pour le modifier ne sera pas trop difficile
et basta
facile a maintenir
et certainement plus perenne que des pseudo popup de login avec des codes abracadabrantesques
qui même pour toi "le concepteur" seront compliqués a maintenir
 

Discussions similaires

Réponses
2
Affichages
114