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 :

Droit d'écriture VBA


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Homme Profil pro
    Géomaticien
    Inscrit en
    Février 2018
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Géomaticien
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Février 2018
    Messages : 8
    Par défaut Droit d'écriture VBA
    Bonjour à tous,

    Voici mon code :

    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
    57
    58
    59
    60
    61
    Private Sub Workbook_BeforeClose(Cancel As Boolean)
    'on affiche la feuille Vierge
        Sheets("Vierge").Visible = True
    'on planque toutes les autres feuilles sauf Vierge
        For x = 1 To ThisWorkbook.Sheets.Count
            If Sheets(x).Name <> "Vierge" Then Sheets(x).Visible = xlSheetVeryHidden
        Next
    End Sub
     
    Private Sub Workbook_Open()
    On Error Resume Next
        Application.ScreenUpdating = False
    'on defini un pointeur
        Pointeur = 0
     
    'on affiche la feuille Vierge
        Sheets("Vierge").Visible = True
    'on va dessus
        Sheets("Vierge").Activate
    'on planque toutes les autres
        For x = 1 To ThisWorkbook.Sheets.Count
            If Sheets(x).Name <> "Vierge" Then Sheets(x).Visible = xlSheetVeryHidden
        Next
     
    'on saisit le user
        User = InputBox("Veuillez saisir votre nom d'utilisateur", "Utilisateur")
    'on saisit le mot de passe
        MDP = InputBox("Veuillez saisir votre mot de passe", "Mot de passe")
     
    'Derniere ligne du tableau de la feuille DroitsUsers pour boucler dessus
        DerLigne = Sheets("DroitsUsers").Range("A65536").End(xlUp).Row
     
    'on boucle pour trouver les occurences, x=2 car je pars du principe que la premiere ligne _
    contient les entetes de colonne
        For x = 2 To DerLigne
    'si ce qu'il y a dans la colonne1 (Colonne A : user) = le user saisi _
    ET ce qu'il y a dans la colonne2 (Colonne B : mot de passe)
            If Worksheets("DroitsUsers").Cells(x, 1) = User And Worksheets("DroitsUsers").Cells(x, 2) = MDP Then
    'on affiche la feuille définié en colonne3 (Colonne C : Onglet autorisé)
    'on affiche la feuille correspondante
                FeuilleVisible = Worksheets("DroitsUsers").Cells(x, 3)
                Sheets(FeuilleVisible).Visible = True
    'on va dessus
                Sheets(FeuilleVisible).Activate
    'on se met un pointeur pour voir si on trouve quelque chose, si on trouve rien on quittera
                Pointeur = Pointeur + 1
            End If
     
        Next x
     
    'Si le pointeur est 0 on ferme le fichier.
        If Pointeur = 0 Then
            MsgBox "Utilisateur ou mot de passe non valide" & vbCrLf & vbCrLf & "Le fichier va se fermer", vbCritical + vbOKOnly, "Sécurité"
            ActiveWorkbook.Close SaveChanges:=False
        End If
     
    'on planque la feuille Vierge
        Sheets("Vierge").Visible = 2
     
        Application.ScreenUpdating = True
    End Sub
    Mon objectif est d'ouvrir l'Excel uniquement en lecture pour tout public et en écriture pour Toto et Titi. Malheureusement je n'y arrive pas...
    Mon code me permet uniquement de donner accès à un onglet ou à un autre toujours en écriture. C'est ce que j'ai choisi de faire en attendant !

    Pouvez-vous me propose une solution pour Lecture et Ecriture ?

    Merci beaucoup d'avance,

    Thibaut.

  2. #2
    Membre confirmé
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Août 2016
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information

    Informations forums :
    Inscription : Août 2016
    Messages : 27
    Par défaut
    Bonjour Thibaut

    Est ce que la solution native proposée par EXCEL qui consiste a protéger un fichier Excel en définissant un mot de passe pour autoriser la lecture ou la modification, ne suffirait-elle pas ?

    Dans le cas contraire, la seule solution que je vois, pour permettre de gérer les accès utilisateur par utilisateur, consisterait à ajouter la protection de l'intégralité des feuilles affichées pour ceux qui ne sont autorisés qu'à lire.

    Donc à insérer après avoir rendu la feuille visible

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets(FeuilleVisible).Protect Password:="motdepasse", DrawingObjects:=True, Contents:=True, Scenarios:=True
    "Motdepasse" étant connu que dans la macro, personne ne pourra enlever la protection, si le code est protégé lui aussi.

  3. #3
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    J'espère que tu fais cela pour le confort des utilisateur (mais dans ce cas pourquoi un MdP ?) et non pas pour la sécurité.
    Parce qu'il suffit que l'utilisateur ne coche pas la case "Activer les macros" à l'ouverture du fichier, et ton château de cartes s'effondre.

  4. #4
    Membre habitué
    Homme Profil pro
    Géomaticien
    Inscrit en
    Février 2018
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Géomaticien
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Février 2018
    Messages : 8
    Par défaut
    Menhir merci pour ta réponse. C'est effectivement une très bonne remarque... Je souhaitais le faire en passant par cmd mais mon service informatique ne souhaite pas le mettre en place, je passe donc par du VBA. As-tu une autre solution ? Précision, je le fais pour des collègues d'un autre service pour éviter suspicion entre collègue.

    Merci MarcClap. La solution d'Excel avec MDP n'est pas mal, mais pour contourner tu fais enregistrer-sous avec un autre nom, puis tu supprimes l'Excel initial et tu renommes avec le nom initial.... Mais si je n'ai pas mieux je vais prendre ta proposition. Peux-tu expliquer ton code STP ?

    Vraiment merci,

    Thibaut.

  5. #5
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut
    Bonjour,

    Une autre possibilité consisterait à changer le mode d'accès au classeur en fonction de son mode d'ouverture (ReadOnly) et/ou de l'identifiant machine de l'utilisateur (UserName)

  6. #6
    Membre confirmé
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Août 2016
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information

    Informations forums :
    Inscription : Août 2016
    Messages : 27
    Par défaut
    Thibaut

    La ligne de code que je te propose d'insérer, protège la feuille. On ne peut plus la modifier ni en contenu, ni en structure. De ce fait, seule la lecture reste possible.

  7. #7
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par thibaut.eugene Voir le message
    As-tu une autre solution ?
    La protection de fichier via VBA est un sujet récurent sur ce forum (fais une petite recherche sur "mot de passe").
    La conclusion est généralement qu'on ne peut pas faire une protection sérieuse via VBA.

    Merci MarcClap. La solution d'Excel avec MDP n'est pas mal, mais pour contourner tu fais enregistrer-sous avec un autre nom, puis tu supprimes l'Excel initial et tu renommes avec le nom initial....
    Demande-toi ce qui se passe si l'utilisateur enregistre le fichier en XLSX.
    Abracadabra !!! Disparues les macros de protection.

    Le plus fiable est de protéger les feuilles en écriture (en décochant la possibilité de sélectionner une cellule) avec un mot de passe différent pour chaque feuille en utilisant les commandes Excel (sans macro) : Ruban Révision > Protéger la feuille.
    Tu donnes le mot de passe aux utilisateurs qui ont le droit d'utiliser ces feuilles.
    Ca n'est pas inviolable mais c'est déjà plus costaud à contourner.

  8. #8
    Membre habitué
    Homme Profil pro
    Géomaticien
    Inscrit en
    Février 2018
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Géomaticien
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Février 2018
    Messages : 8
    Par défaut
    Bonjour à tous,

    Merci MarcClap, j'avais compris ton code mais pas l'objectif du code. Effectivement, ta proposition ne convient pas car un ou deux auteurs doivent garder la main sur la structure et les données. Mais je garde ta première solution de MDP lecture / écriture.

    Menhir je suis totalement d'accord avec toi.... Mais, si l'utilisateur en arrive à faire toutes ces manipulations c'est qu'il souhaite réellement crasher l'outil et par conséquent qu'importe la sécurité il y arrivera toujours. Donc je vais opter pour la solution de mot de passe Excel proposé par MarcClap.

    Solution : Fichier > Enregistrer sous > Outils > Options générales > enregistrement du MDP

    Merci à tous,

    Thibaut !

Discussions similaires

  1. [Système] Droit d'écriture via script php
    Par winnie82 dans le forum Langage
    Réponses: 4
    Dernier message: 10/04/2006, 11h40
  2. [Apache] donner les droits d'écriture pour PHP
    Par Torpedox dans le forum Apache
    Réponses: 4
    Dernier message: 07/01/2006, 15h01
  3. Tester les droits en écriture sur une table en VBA ?
    Par yerome60 dans le forum Access
    Réponses: 2
    Dernier message: 19/12/2005, 21h43
  4. Réponses: 5
    Dernier message: 05/07/2005, 19h05
  5. droits en écriture sur le réseau
    Par julien20vt dans le forum MFC
    Réponses: 4
    Dernier message: 25/03/2004, 11h29

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