IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Restriction droit excel par utilisateur [XL-2007]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Avril 2013
    Messages
    114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2013
    Messages : 114
    Par défaut Restriction droit excel par utilisateur
    Bonjour,
    Je vous expose mon problème.
    Avec des amis on travail ensemble, et on a un fichier excel en commun mais dont chacun a sa propre colonne et ne dois pas toucher celle des autres mais il y a 2 jours par inadvertance un de nous à modifier une colonne qui n' été pas la sienne d' ou ma question.

    Est-il possible de restreindre les droit sur un fichier excel via un code et un nom d'utilisateur à l'ouverture du fichier

    Ex pour moi utilisateur: DAVID ; mot de passe: david123 accès au colonne A B D
    Et Admin possibilité de modifier tout le fichier

    Exemple:
    David peut modifier colonne A B D
    Yves peut modifier colonne A C F
    Mikael peut modifier colonne E G
    Manon peut modifier colonne H I J
    Marie peut modifier colonne K

    Donc à l'ouverture du fichier excel on aurait un message Box qui s'ouvre et demande le nom et le mdp s'il correspond par exemple à david et que le mdp est david123 alors je pourrais modifier les colonnes A B D sinon non
    Ces modifications s’appliqueraient sur toutes les feuilles crées.

    Merci pour votre futur aide.

    Cordialement

  2. #2
    Membre Expert Avatar de Gado2600
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Mai 2013
    Messages
    909
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Office VBA

    Informations forums :
    Inscription : Mai 2013
    Messages : 909
    Par défaut
    Bonjour,

    Tu as la possibilité d'utiliser un UserForm pour avoir une demande de login et de mot de passe.
    Lors de la validation, je pense que tu dois jouer sur les verrouillages des cellules.
    En effet, si tu vas dans les propriétés des cellules, tu peux cocher une case pour ne pas les verrouiller lorsque tu protèges ton onglet (Selection.locked = false)

    Cordialement,

  3. #3
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Avril 2013
    Messages
    114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2013
    Messages : 114
    Par défaut
    Oui pour le mot de passe un UserForm est obligatoire je pense, mais pour ce qui est de gérer les droits et bloquer les cellules j'en ai aucune idée..

  4. #4
    Membre Expert Avatar de Gado2600
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Mai 2013
    Messages
    909
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Office VBA

    Informations forums :
    Inscription : Mai 2013
    Messages : 909
    Par défaut
    pour ce qui est de gérer les droits et bloquer les cellules j'en ai aucune idée..
    si tu vas dans les propriétés des cellules, tu peux cocher une case pour ne pas les verrouiller lorsque tu protèges ton onglet (Selection.locked = false)
    Selon l'utilisateur qui se loggera sur ton fichier Excel (que tu identifies via ton userform de login), tu as juste à dire à Excel de verrouiller les cellules qui ne concernent pas ton utilisateur, lorsque la feuille est protégée.

    Pour cela, tu as : "Selection.locked" (Selection étant une range). C'est l'équivalent de la case à cocher "Verrouillée", qui se trouve dans :
    => Clic droit => Format de cellule => Protection

    Cordialement,

  5. #5
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Avril 2013
    Messages
    114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2013
    Messages : 114
    Par défaut
    Alors voilà mon avancé:
    J'ai réussi à faire un formulaire qui demande le mot de passe et affiche les feuilles si ont a le droit.
    Mais je n'arrive pas à adapter mon code pour que ce ne soit pas les feuilles qui soient pris en compte mais pour que ce soit les colonnes de la Feuil1

    Code pour l'affichage ou non des feuilles:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Option Explicit
     
    Private Sub Workbook_Open()
    Dim Ws As Worksheet
     
    'Masque toutes les feuilles sauf la feuille "Feuil1"
     
    For Each Ws In ThisWorkbook.Worksheets
        If Ws.Name <> "parametrage" Then Ws.Visible = xlSheetVeryHidden
    Next Ws
     
    'Affiche l'Userform
    UserForm1.Show
    End Sub
    Module 1 feuille
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    Option Explicit
     
     
    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 A, le nom d'utilisateur saisi
        Set rngTrouve = .Columns(1).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 = mdp entré
            If rngTrouve.Offset(0, 1) <> MdP Then
                VerifMDP = False 'si FAUX
            Else
                VerifMDP = True 'si VRAI
            End If
        End If
    End With
    End Function
     
    Sub AfficheFeuilles(Utilisateur As String)
    Dim Col As Byte, i As Byte, Lig As Integer
     
    With Sheets("parametrage") 'dans la feuille paramétrage
        'comme on va boucler de la colonne 4 à la dernière colonne, on stocke le n° de la dern colonne :
        Col = .Cells(1, .Cells.Columns.Count).End(xlToLeft).Column
        'on cherche colonne A le nom d'utilisateur saisi et on stocke son num de ligne
        Lig = .Columns(1).Cells.Find(Utilisateur, lookat:=xlWhole).Row
        For i = 3 To Col
            If UCase(.Cells(Lig, i)) = "X" Then 'si on trouve un "X" dans la cellule
                Sheets(.Cells(1, i).Value).Visible = True 'on affiche la feuille
            Else
                Sheets(.Cells(1, i).Value).Visible = xlSheetVeryHidden 'sinon on la masque
            End If
        Next i
    End With
    End Sub
    Code sur le bouton valider du USF
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    Option Explicit
     
    'Code se déclenchant au clic sur bouton
    Private Sub CommandButton1_Click()
    'Si TextBox1 est vide
    If TextBox1 = "" Then
        'Message à l'utilisateur
        MsgBox "Saisie du nom d'utilisateur obligatoire.", vbInformation
        'sortie de la procédure
        Exit Sub
    End If
    'Même chose avec TextBox2
    If TextBox2 = "" Then
        MsgBox "Saisie du mot de passe obligatoire.", vbInformation
        Exit Sub
    End If
     
    'Lance la fonction VerifMDP en utilisant :
        '- TextBox1 comme paramètre "utilisateur"
        '- TextBox2 comme paramètre "MdP"
     
    'Si la fonction renvoie FAUX :
    If VerifMDP(TextBox1, TextBox2) = False Then
        'c'est que le mot de passe ou l'utilisateur est faux donc
        'Message à l'utilisateur
        MsgBox "Erreur Mot de passe et/ou utilisateur. Merci de saisir à nouveau.", vbInformation
        'on vide les 2 textbox
        TextBox1 = ""
        TextBox2 = ""
        'on sort de la procédure
        Exit Sub
    End If
     
    'Si la fonction renvoie VRAI :
    AfficheFeuilles TextBox1
    'masque l'UserForm
    UserForm1.Hide
    End Sub
     
     
    'code se déclenchant à l'ouverture de Userform1
    Private Sub UserForm_Initialize()
    'vidage des textbox :
    TextBox1 = ""
    TextBox2 = ""
    'réglage des propriétés Caption
    'de l'Userform :
    Me.Caption = "Saisie du Mot de Passe"
    'des labels :
    Label1.Caption = "Utilisateur"
    Label2.Caption = "Mot de Passe"
    'du bouton
    CommandButton1.Caption = "VALIDER"
    'Remplace les caractères saisis dans le textbox2 par des astérisques
    Me.TextBox2.PasswordChar = "*"
    End Sub
    Fonction pour bloquer les colonnes qui est la seule qui change et qui ne marche pas ... et c'est la ou je bloque!!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    Sub AfficheFeuilles(Utilisateur As String)
    Dim Col As Byte, i As Byte, Lig As Integer
     
    With Sheets("parametrage") 'dans la feuille paramétrage
     
        'comme on va boucler de la colonne 3 à la dernière colonne, on stocke le n° de la dern colonne :
        Col = .Cells(1, .Cells.Columns.Count).End(xlToLeft).Column
     
        'on cherche colonne A le nom d'utilisateur saisi et on stocke son num de ligne
        Lig = .Columns(1).Cells.Find(Utilisateur, lookat:=xlWhole).Row
     
        For i = 3 To Col
            If UCase(.Cells(Lig, i)) = "X" Then 'si on trouve un "X" dans la cellule
     
                Sheets("Feuil1").Select.Columns(.Cells(1, i).Value).Locked = True 'on deverouille
            Else
                Sheets("Feuil1").Select.Columns(.Cells(1, i).Value).Locked = False 'sinon on verouille
     
            End If
        Next i
    End With
    End Sub
    Et en image ma feuille parametrage
    Nom : Sans titre.jpg
Affichages : 579
Taille : 59,2 Ko

  6. #6
    Membre Expert Avatar de Gado2600
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Mai 2013
    Messages
    909
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Office VBA

    Informations forums :
    Inscription : Mai 2013
    Messages : 909
    Par défaut
    Bonjour,

    Je ne pense pas que cette partie fonctionne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets("Feuil1").Select.Columns(.Cells(1, i).Value).Locked = True 'on deverouille
    Essaie plutôt quelque chose du genre (je ne l'ai pas testé) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets("Feuil1").range(.Cells(1, i).Value & "1").entirecolumn.Locked = True 'on deverouille
    Cordialement,

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2007] Restriction droit excel par utilisateur
    Par dvdhag123 dans le forum Excel
    Réponses: 6
    Dernier message: 07/04/2015, 09h04
  2. Gestion des droits : 1 user par utilisateur ?
    Par Bruno75 dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 07/11/2005, 14h39
  3. Enregistrement d'un fichier Excel par automation
    Par tiopan dans le forum Access
    Réponses: 2
    Dernier message: 04/12/2003, 19h57
  4. Récupérer la couleur d'une cellule excel par Delphi
    Par teamsebracing dans le forum API, COM et SDKs
    Réponses: 3
    Dernier message: 05/06/2003, 14h50
  5. Sauvegarde problématique sous excel par OLE
    Par ulysse66x dans le forum API, COM et SDKs
    Réponses: 2
    Dernier message: 16/04/2003, 21h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo