Accès données selon utilisateur

Bonjour.

J'ai un fichier, les feuilles sont visibles selon l'utilisateur. En ouvrant le fichier, il faut donc entrer un mot de passe.
Plusieurs utilisateurs : Admin = Admin. SERVICE1 = SER1, etc.

Jusque là, aucun souci. Une vidéo Youtube et de l'IA m'ont apporté ce qu'il me fallait.

Cependant, je souhaite savoir comment après une connexion, faire en sorteque le service ne puisse voir que les personnes qui y sont "rattachées" dans la feuille "Base_2024" sur base de la colonne E. Et ne faire en sorte pour que chaque service ne puisse voir toutes les colonnes (et donc par exemple, camoufler les adresses postales). Elles ne doivent pas être masquées/filtrées (qui pourraient être vues par simple manip).

Quelqu'un sait me dire si cela est possible ? Ci-joint, un fichier test, en espérant que cela puisse vous aider.

Merci pour votre aide précieuse.

5gestion-lr.xlsm (38.76 Ko)

Bonjour

Ci joint ma solution

1gestion-lr-v1.xlsm (37.18 Ko)

A+ François

Bonjour Fanfan

C'est un bon début, merci beaucoup ;-)

Je souhaite savoir comment on peut masquer les colonnes de K à N (reprenant les adresses postales) et faire en sorte que les autres lignes ne soit pas masquées (par exemple, pour SERVICE 1, on voit que ça passe de la ligne 2 à la ligne 4 et il est possible de les afficher).

Serait-il possible par exemple d'afficher (les lignes 3, 5 et suivantes, colonne de K à N) uniquement à l'aide d'un mot de passe ?

Merci beaucoup ;-)

Belle journée,

Est ce que ça te va?

A+ François

3gestion-lr-v1.xlsm (37.91 Ko)

Bonjour,

J'ai une erreur 1004 '_Worksheet' en téléchargeant le fichier qui me met en évidence la ligne wks.visible = xlveryhidden (thisworkbook).

De plus, que cela soit masqué ne me dérange pas. N'est-il cependant vraiment pas possible de bloquer l'affichage des lignes et colonnes masquées ? Par ex, à l'aide d'un mot de passe.

S'il n'y a pas besoin d'une macro pour ça, comment puis-je m'y prendre ?

En pensant que si l'utilisateur change, il pourra voir d'autres données.

Peut-être dois-je revoir totalement la conception de mon fichier et m'y prendre autrement ?

Sans le message d'erreur dû au fait que j'utilises la protection du classeur

4gestion-lr-v1.xlsm (38.04 Ko)

A+ François

Bonjour,

Je n'ai plus le message d'erreur mais je sais toujours faire, pour SERVICE1, SERVICE2 => afficher les colonnes et les lignes qui sont masquées.

C'est le maximum que l'on peut faire ?

En fait le but visé : Des données, pour certains utilisateurs, accès à certaines données, à d'autres toutes les données, et encore à d'autres pas d'accès à la feuille.

Encore une fois, peut-être que je m'y prends mal... :(

Bonjour

Soyons clair...

il faut masquer quoi?

pour qui?

Par service ou par utilisateur?

A+ François

Bonjour Fanfan,

Merci pour ton retour et désolé de ne te revenir que vers toi maintenant.

J'essaie de m'y prendre autrement, j'ai conçu un autre fichier.

Dans ma feuille ADMIN = de H5 à AM35 = une zone avec des symboles (changement au double-clic) pour attribuer des accès (protégé, visible + edition, invisible, selon le symbole). Selon moi, cela me semble OK.

En F5, ma liste d'utilisateur, en G5 ma liste de mots de passes (bidons pour l'instant ;-))

Ce que je tente de faire (mais je n'y arrive pas, malgré l'aide de l'intelligence artificielle), c'est qu'en appuyant sur le bouton de connexion du formulaire initial (en ouvrant le fichier), c'est d'adapter le vlookup et match : et donc d'avoir les accès appropriés pour chacune d'une feuille selon l'utilisateur en fonction des symboles.

Une idée de comment résoudre le bazar ?

Mille Mercis !!

ADMIN = admin, les autres mot de passe = test

Sub VerifUtilisateur()
    Dim UtilMatch As Variant ' Modifier le type de données pour gérer les cas où la recherche ne trouve pas de correspondance
    Dim ADMINColonnes As Long
    Dim FeuilleNom As String

    Dim Utilisateurs As Worksheet
    Dim Resultat As Variant

    Set Utilisateurs = Sheets("ADMIN")
    Resultat = Application.VLookup(cb_ID_Connexion.Value, Utilisateurs.Range("F:G"), 2, False)

    If Not IsError(Resultat) Then
        ' Trouver la dernière cellule non vide dans la colonne G
        Dim DerniereLigne As Long
        DerniereLigne = Utilisateurs.Cells(Utilisateurs.Rows.Count, "G").End(xlUp).Row

        ' Vérifier si le mot de passe correspond
        If Resultat = txt_MDP_Connexion.Value Then
            MsgBox "Connexion établie"
            ' Obtenir l'index de l'utilisateur correspondant (supposons que ce soit dans la même ligne que la recherche)
            UtilMatch = WorksheetFunction.Match(cb_ID_Connexion.Value, Utilisateurs.Range("F:F"), 0)
            ' Cacher UF_DTTS_Connexion (remplacez par le code réel pour masquer le formulaire)
        Else
            MsgBox "Mauvais mot de passe !!"
        End If
    Else
        MsgBox "Utilisateur non trouvé"
    End If

    ' Loop through ADMIN columns (8 to 39) only if the user exists
    If Not IsError(Resultat) Then
        For ADMINColonnes = 8 To 39
            FeuilleNom = Utilisateurs.Cells(4, ADMINColonnes).Value
            On Error Resume Next ' Ignorer l'erreur si la feuille n'existe pas
            If Not Sheets(FeuilleNom) Is Nothing Then
                If Not IsError(UtilMatch) Then ' Vérifier si UtilMatch est une erreur
                    If Utilisateurs.Cells(UtilMatch, ADMINColonnes).Value = "Ð" Then
                        Sheets(FeuilleNom).Unprotect "ATTFC,"
                        Sheets(FeuilleNom).Visible = xlSheetVisible
                    ElseIf Utilisateurs.Cells(UtilMatch, ADMINColonnes).Value = "Ï" Then
                        Sheets(FeuilleNom).Protect "ATTFC,"
                        Sheets(FeuilleNom).Visible = xlSheetVisible
                    ElseIf Utilisateurs.Cells(UtilMatch, ADMINColonnes).Value = "x" Then
                        Sheets(FeuilleNom).Protect "ATTFC,"
                        Sheets(FeuilleNom).Visible = xlSheetVisible
                    End If
                Else
                    MsgBox "Utilisateur non trouvé"
                End If
            Else
                MsgBox "La feuille de calcul '" & FeuilleNom & "' n'existe pas."
            End If
            On Error GoTo 0 ' Rétablir le gestionnaire d'erreurs par défaut
        Next ADMINColonnes
    End If
End Sub

Bonjour

Ton problème vient du fait que ta macro verif utilisateur est dans un module...

Donc il ne connais pas cb_ID_Connexion et txt_MDP_Connexion...

Prend l'habitude de mettre me.txt_MDP_Connexion...

A+ François

Bonjour,

Merci pour les conseils avisés pour lesquels je tenterai d'appliquer au mieux les prochaines fois. ;-) Il y a un début à tout !

Je souhait savoir comment je peux tenir compte des colonnes de H6 à ... en fonction des symboles ?

Chez moi le formulaire se cache (rajouter UF_DTTS_Connexion.hide) par contre quand je suis connecté, il devrait tenir compte uniquement des feuilles selon la valeur "Ð" (visu+édition, pas protégée) et "Ï" (visu uniquement, donc protégée par un mdp), le "x" doit être un xlsheetveryhidden.

Je pense que c'est ce que dit mon code qui ne semble pas s'appliquer :/

Else
        MsgBox "Utilisateur non trouvé"
    End If

    ' Loop through ADMIN columns (8 to 39) only if the user exists
    If Not IsError(Resultat) Then
        For ADMINColonnes = 8 To 39
            FeuilleNom = Utilisateurs.Cells(4, ADMINColonnes).Value
            On Error Resume Next ' Ignorer l'erreur si la feuille n'existe pas
            If Not Sheets(FeuilleNom) Is Nothing Then
                If Not IsError(UtilMatch) Then ' Vérifier si UtilMatch est une erreur
                    If Utilisateurs.Cells(UtilMatch, ADMINColonnes).Value = "Ð" Then
                        Sheets(FeuilleNom).Unprotect "****"
                        Sheets(FeuilleNom).Visible = xlSheetVisible
                    ElseIf Utilisateurs.Cells(UtilMatch, ADMINColonnes).Value = "Ï" Then
                        Sheets(FeuilleNom).Protect "****"
                        Sheets(FeuilleNom).Visible = xlSheetVisible
                    ElseIf Utilisateurs.Cells(UtilMatch, ADMINColonnes).Value = "x" Then
                        Sheets(FeuilleNom).Protect "****"
                        Sheets(FeuilleNom).Visible = xlSheetVisible
                    End If
                Else
                    MsgBox "Utilisateur non trouvé"
                End If
            Else
                MsgBox "La feuille de calcul '" & FeuilleNom & "' n'existe pas."
            End If
            On Error GoTo 0 ' Rétablir le gestionnaire d'erreurs par défaut
        Next ADMINColonnes
    End If
End Sub

Edit : j'ai adapté le code ;-) j'avais oublié que j'avais mis xlsheetvisible pour tout le monde pour tester les différents codes 'connexion'.

Le fichier marche bien ;-)

Rechercher des sujets similaires à "acces donnees utilisateur"