Protection supplémentaire

Bonjour,

1/ J'ai protégé l'accès aux macros sur VBA par mot de passe mais par contre l'execution des macros via Alt + F8 reste possible, j'ai 2 macros Protect/Unprotect qui me servent en cas de modifcation, je voudrais pas que n'importe qui puisse y toucher, est-ce possible de mettre une protection en plus dessus ? ou une fois mes modifications terminées, je passe ces macro en commentaire avant de verrouiller le VBA ?

2/ J'ai ma feuille qui est protégé à l'exception d'une colonne (pour mettre un commentaire ou autre), comment faire pour rajouter une protection à part de la protection de la feuille sur cette colonne ?

Bonjour,

Pour masquer une procédure du [Alt]+F8, il faut qu'elle soit en "Private Sub".
Le fait qu'elle soit en Private Sub fait qu'elle doit être appelée par un autre code VBA.

L'idée : une procédure "visible" qui ne sert qu'à demander un code, en fonction du code, cette procédure lancera alors la "Private Sub" pour une action ou l'autre.
Le fichier :

9cache-macro.xlsm (21.82 Ko)

@ bientôt

LouReeD

D'accord merci pour l'info ! Du coup votre bouton on doit saisir un mot de passe pour déverrouiller l'accès vba c'est ça ?

Et pour le deuxieme point ?

Ha oui j'ai oublié de le dire : 1 on protège, 0 on déprotège, mais je n'ai mis que des MSGBOX, je n'ai pas codé le reste !
Le code pour aller voir le VBA est : LRD

Pour le deuxième point je n'ai pas regardé...

@ bientôt

LouReeD

Bonjour à tous,

Pour le deuxième point, que voulez-vous protéger ?

S'il s'agit d'une formule, vous pouvez essayer avec 2 évènements, en attendant meilleure solution :

'AU TOUT DEBUT D'UN MODULE NORMAL
Public formules(), r as range

'MODULE DE LA FEUILLE EN QUESTION
Private Sub worksheet_selectionchange(ByVal target As Range)

Set r = Intersect(target, Columns(1)) '<<< ADAPTER COLONNE EN QUESTION

If Not r Is Nothing Then
    If Application.CutCopyMode Then Application.CutCopyMode = False
    ReDim formules(1 To r.Cells.Count)
    For Each cell In r.Cells
        i = i + 1
        formules(i) = cell.Formula
    Next cell
End If

End Sub

'MODULE DE LA FEUILLE EN QUESTION
Private Sub worksheet_change(ByVal target As Range)

If Not r Is Nothing Then
    For Each cell In r.Cells
        i = i + 1
        Application.EnableEvents = False
        cell.Formula = formules(i)
        Application.EnableEvents = True
    Next cell
End If

End Sub

Ca ne marche malheureusement pas contre la méthode autofill et la seule alternative que j'imagine serait trop lourde...

Cdlt,

Bonjour à tous,

annule toute modif impactant la colonne :

Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Columns("E")) Is Nothing Then
        MsgBox "Pas touche à la colonne E !!!"
        Application.EnableEvents = False
        Application.Undo
        Application.EnableEvents = True
    End If
End Sub

eric

Salut eriiic,

Court et efficace !

Bonjour, concernant votre code Eriiic, j'ai du mal a comprendre comment il fonctionne ^^'

@3GB : Je voudrais mettre un mot de passe sur la colonne E pour autoriser la modifcation. Actuellement toute la feuille est protégé sauf la colonne E, je voudrais pouvoir portéger/déportéger que la colonne E

Bonjour Samolo,

Le code d'eriiic est en fait un ctrl + Z à chaque modification. Si vous voulez garder la protection et vous laisser la possibilité de modifier la colonne E, je propose un premier essai avec ce code dans le module de la feuille concernée :

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

If target.column = 5 Then
    if columns(5).locked = true then
        mdp = inputbox("Entrez un mot de passe pour modifier")
        if mdp = "lemotdepasse" then columns(5).locked = false else columns(5).locked = true '<<< ADAPTER MOT DE PASSE
    end if
Else
    columns(5).locked = true
end if

End Sub

La colonne est donc protégée (verrouillée) d'office et il faut saisir un mot de passe pour faire une modification. Mais à chaque nouvelle sélection en dehors de cette colonne, elle est reverrouillée...

Cdlt,

Quand je mets le code dans la feuille concernée, j'ai une erreur sur la ligne "Columns(5).Locked = True"

Après j'ai plusieurs feuille concernée par cette colonne E, il y a un moyen rapide d'appliqer cette protection à toutes les feuilles ?

Je pense que c'est parce que la feuille est protégée... Oui, c'est possible avec un évènement lié au classeur cette fois. Voici un essai de code à placer dans le module THISWORKBOOK :

Private Sub Workbook_SheetSelectionChange(byval sh as object, ByVal Target As Range)

with sh
    If target.column = 5 Then
        if .columns(5).locked = true then
            mdp = inputbox("Entrez un mot de passe pour modifier")
            if mdp = "lemotdepasse" then
                .unprotect "mdpfeuille" '<<< ADAPTER
                .columns(5).locked = false '<<< ADAPTER MOT DE PASSE
                .protect "mdpfeuille"
            end if
        end if
    Else
        .unprotect "mdpfeuille"
        .columns(5).locked = true
        .protect "mdpfeuille"
    end if
end with

End Sub

Cdlt,

12tableau-elec2.xlsm (47.52 Ko)

J'ai essayé en enlevant la protection mais j'ai toujours une erreur sur ".Columns(5).Locked = True"

Par contre j'ai le bug VBa uniquement sur la première feuille, sur les autres feuilles le code semble fonctionner

Bonjour,

tu n'as pas un end if de mal placé ?
Sur chaque sélection tu déverrouilles la feuille pour reprotéger E, ce qui entraîne une petite latence de 1 s

A noter qu'avec cette technique, E n'est pas protégé d'une recopie en tirant une cellule vers la gauche ou la droite, ni d'un collé de plusieurs colonnes en D par exemple.
eric

Bonjour,

Merci de joindre un fichier Samolo, je regarde dès que possible.

Oui, tu as raison eriiic, au double clic, ce serait mieux déjà mais en fait il vaudrait mieux se réserver une cellule "Verrouiller/Deverrouiller" je pense, ce serait plus simple...

Cdlt,

Dans le fichier que j'ai partagé bizarrement j'ai un erreur VBA que sur la feuille E50 tout le reste j'ai bien la VBA qui se lance pour déverrouiler la colonne E

Bonjour…

Attention aux cellules fusionnées !

Abus de protections avec ajout de procédures pour les gérer ?

On peut alors utiliser une propriété des Feuilles(ScrollArea) peu, voire jamais utilisée (méconnaissance ?) dans ThisWorbook :

Private Sub Workbook_SheetActivate(ByVal Sh As Object)
  If Sh.Name <> "Accueil" Then Sh.ScrollArea = [E4].Address ‘blocage à 1 cellule
End Sub
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal R As Range)
    If R.Address = [E4].Address Then
        If R = "Commentaire" Then Sh.ScrollArea = R.Address: Exit Sub
        If R = "1234" Then    ‘code d’accés
           Sh.ScrollArea = Sh.Range("E4:E" & Cells(Rows.Count, 1).End(xlUp).Row).Address
           Application.EnableEvents = 0: R = "Commentaire": Application.EnableEvents = 1
       End If
  End If
End Sub

Ordonc, bien vu la feuille E50 était la seule dont j'avais des cellules fusiionnées, en libérant la colonne E de la fusion cela me regle le problème

Bonsoir, Ordonc,

"On peut alors utiliser une propriété des Feuilles(ScrollArea) peu, voire jamais utilisée (méconnaissance ?) dans ThisWorbook "

Personnellement je l'utilise sur ma plus vielle (1) application en téléchargement...

@ bientôt

LouReeD

Ordonc,

je n'arrive pas à faire fonctionner votre excel ^^'

Rechercher des sujets similaires à "protection supplementaire"