Liste d'utilisateurs autoriser a sauvegarder des modifs

bonjour à tous,

je suis sûr que la question a déjà été posée mais je trouve pas sur le forum.

je souhaite établir une liste de personnes autorisés a enregistrer des modifications dans un classeur.

en gros quand on veut enregistrer, une ImputBox demande le nom de l'utilisateur, si il est dans la liste on sauvegarde sinon "utilisateur non autorisé" et on ferme le classeur.

il faut certainement aussi activer les macros automatiquement à l'ouverture.

Merci d'avance à tous pour votre aide.

Bonjour,

A mettre dans le module du classeur (ThisWorkbook) et adapter les noms des utilisateurs autorisés à enregistrer les modifications :

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)

    Dim Utilisateur As String

    Utilisateur = InputBox("Indiquez votre nom !", "Utilisateur.")

    Select Case Utilisateur

        Case "Nom1", "Nom2", "Nom3", "Nom4" '<--- les noms pour lesquels l'enregistrement est autorisé

        Case Else

            MsgBox "Vous n'êtes pas autorisé à enregistrer les modifications que vous avez apporté !"
            Cancel = True

            'ThisWorkbook.Close False

    End Select

End Sub

Bonsoir Theze,

Un grand merci à toi pour cette aide précieuse.

Si les macros ne sont pas activées ça ne marche pas.

comment fait-on pour empêcher l'ouverture du fichier si on active pas les macros.

encore merci

Bonjour,

Ce n'est pas possible mais tu peux créer une feuille avec un message pour demander l'activation des macros, tu caches et protèges toutes les autres feuilles que tu afficheras une fois les macros activées. Penses à mettre du code à la fermeture du classeur pour cacher et protéger les feuilles et afficher celle contenant le message et bien sûr, protège aussi ton code VB "Outils"--->"Propriétés de VBAProject..."--->Onglet "Protection"

Merci Theze,

je ne voudrais pas abuser de ta gentillesse. Je débute et je suis pas vraiment doué pour VBA. je pense avoir compris le principe, mais pas comment on réalise cela sauf pour la protection de la macro.

j'ai dons encore besoin de ton aide

Bonjour,

Dans ton classeur, tu rajoutes une feuille et dans un module standard, tu colles le code ci-dessous en adaptant le nom du module de cette nouvelle feuille (dans mon code c'est "Feuil1") :

Sub Limiter()

    Dim Fe As Worksheet

    For Each Fe In Worksheets

        'dans la fenêtre du projet VBA (à gauche) la feuille que tu as rajouté a entre parenthèses le nom de l'onglet et devant le nom de son module
        'il faut que tu remplaces "Feuil1" ci-dessous par le nom du module !!!
        'la valeur "xlSheetVeryHidden" empêche de voir qu'il y a des feuilles cachées dans le menu "Masquer & Afficher" du bouton "Format"
        If Fe.CodeName <> "Feuil1" Then Fe.Visible = xlSheetVeryHidden

    Next Fe

    With Feuil1

        .Range("B2").Value = "Ce classeur est inutilisable en l'état si vous n'autorisez pas l'utilisation des macro."
        .Range("B4").Value = "Pour activer les macros, cliquez sur le bouton ""Option d'Excel"", cliquez sur le bouton ""Standard"", cochez la case"
        .Range("B5").Value = """Afficher l'onglet Développeur dans le ruban""  ensuite, dans la zone ""Code"" de l'onglet ""Développeur"" "
        .Range("B6").Value = "cliquez sur le bouton ""Sécurité des macros"" puis sur le bouton ""Paramètres des macros"" et cochez"
        .Range("B7").Value = """Activer toutes les macros (non recommandé ; risque d'exécution de code potentiellement dangeureux"""
        .Range("B8").Value = "Fermez le classeur et réouvrez-le pour pouvoir l'utiliser."

        'restreint la zone d'affichage de la ligne 1 à 10 et de la colonne A à N
        .Range("11:" & Rows.Count).EntireRow.Hidden = True
        .Range("O:XFD").EntireColumn.Hidden = True

        'protège la feuille en interdisant la sélection de cellule
        .Protect "pskyl", True, True, True
        .EnableSelection = xlNoSelection

    End With

End Sub

une fois exécuté (la feuille est alors paramétrée), tu peux supprimer ce code du classeur si le résultat te convient ou alors apporter les modifs que tu souhaites.

Dans le module du classeur (ThisWorkbook), tu colles le code ci-dessous :

Private Sub Workbook_Open()

    Parametrer

End Sub

et dans le module standard, tu colles celui-ci :

Sub Parametrer()

    Dim Fe As Worksheet

    For Each Fe In Worksheets

        Fe.Visible = xlSheetVisible

    Next Fe

    Feuil1.Visible = xlSheetVeryHidden

End Sub

Si les macros sont activées, la procédure événementielle "Workbook_Open()" va appeler la proc "Parametrer" qui va afficher les feuilles cachées et masquer la feuille d'accueil servant à informer si les macros sont désactivées

c'est super compliquer. j'ai peut-être voulu aller trop loin. j'ai mis mon fichier, épuré, car je n'y arrive même pas avec tes explications, qui me semble pourtant claires.

Theze c'est vraiment sympa de me consacré du temps pour m'aider.

11enquete-test.xlsm (139.93 Ko)

Re,

Voici ton classeur.

Pour le test, tu ouvres Excel (mais pas avec ton classeur Enquête) et tu désactives les macros puis tu ouvres ton classeur Enquête pour voir le résultat ! Il te faut savoir qu'en l'état, une fois les feuilles affichées l'utilisateur peut à nouveau désactiver les macros et les feuilles resteront visibles

9enquete-test.xlsm (133.38 Ko)

Re,

J'ai un peu amélioré le classeur en faisant en sorte que les feuilles soient automatiquement cachées à la fermeture afin que, si les macros sont désactivées par la suite, il ne soit pas possible de les voir !

C'est vraiment génial

ça marche super, je vais mettre ça en application et je pense que je vais souvent utiliser cette méthode.

un grand merci à THEZE pour cette aide vraiment efficace.

Bonne journée

Bonjour,

Heureux d'avoir pu t'aider !

merci beaucoup Theze pour ton aide.

Rechercher des sujets similaires à "liste utilisateurs autoriser sauvegarder modifs"