proteger/deproteger toutes les feuilles SANS mettre le password dans le code source?

mazuno

XLDnaute Nouveau
voila, je crois que tout est dans le titre :
j'ai une macro qui permet de protéger/déprotéger toutes les feuilles de mon classeur
le problème est que le password est écrit en dur dans le code, et mon boss aimerai pouvoir éviter cette contrainte ^^
j'ai cherché des codes touts faits mais ils sont tous écrits avec le pass dans le code :/

quelqu'un connais un moyen ?

MERCI d'avance ;)

je vous passe le code de ma macro au cas ou...
Code:
Dim PWd$
Dim PwAdmin$
Public PassEntre  ' déclaration en mode public car utilisée dans la boite de dialogue SaisiePWd


Public Function WsLock(Optional y)
    ' fonction appelée depuis les macros Proteger et DeProteger, ne pas lancer à la main!
    ' selon la macro qui l'a appelée, protège ou enleve la protection sur toutes les feuilles du classeur

    PWd = "aaa"    ' <--- définir le mot de passe pour la protection ici
    PwAdmin = "zzz"
    Application.ScreenUpdating = False  'on gèle l'affichage
    'protection :
    If IsMissing(y) Then            ' si WsLock a été appelée sans argument (donc depuis proteger)
        For i = 1 To Worksheets.Count
            Worksheets(i).EnableOutlining = True
            Worksheets(i).Protect PWd, userInterfaceOnly:=True ' on protège chaque feuille
        Next
        WsLock = 1
        Application.EnableEvents = True
    'déprotection :
    Else                            ' sinon on déprotège :
        SaisiePWd.Show      ' apparition de la fenetre qui demande le mot de passe
        If PassEntre = PWd Then     ' si le pass est correct on unlock toutes les feuilles
            For i = 1 To Worksheets.Count
                Worksheets(i).Unprotect PWd
            Next
            PassEntre = ""          ' on réinitialise PassEntre car sinon il est gardé en mémoire
            WsLock = 2
            
        ElseIf PassEntre = PwAdmin Then 'si on a entré le pass admin
            For i = 1 To Worksheets.Count
                Worksheets(i).Unprotect PWd
            Next
            PassEntre = ""          ' on réinitialise PassEntre car sinon il est gardé en mémoire
            WsLock = 3      'résultat pour password admin
            If y = 0 Then
                Application.EnableEvents = False
            End If
            
        Else
            WsLock = 0
            MsgBox "mot de passe incorrect"
        End If
    End If
    Application.ScreenUpdating = True  'on dégèle l'affichage
    
End Function

Sub DeProteger()
    'macro lancée depuis un bouton ou un raccourcis
    'déprotège toutes les feuilles
    WsLock (1)
End Sub

Sub Proteger()
    'macro lancée depuis un bouton ou un raccourcis
    'protège toutes les feuilles
    WsLock
End Sub
 

MJ13

XLDnaute Barbatruc
Re : proteger/deproteger toutes les feuilles SANS mettre le password dans le code sou

Bonjour Mazuno, Masterdisco

Tu trouveras ici des exemples dont 1 de Masterdisco d'ailleurs.

https://www.excel-downloads.com/threads/verouiller-un-fichier-excel-avec-un-mots-de-passe.144806/

Sahant que si tu protèges le VBA avec un MDP ce sera quand même plus difficile à cracker.

Avec mon exemple de fichier en fin de post, tu peux assez facilement empêcher de voir le MDP. En pus tu peux gérer en tant qu'administrateur ou utilisateur lambda avec gestion des utilisateurs.

Edit: Bonjour Mromain, C'est intéressant ton idéé :).
 
Dernière édition:

mromain

XLDnaute Barbatruc
Re : proteger/deproteger toutes les feuilles SANS mettre le password dans le code sou

Bonjour mazuno, masterdisco,

A partir de cette discussion, j'ai bidouillé cette petite fonction :
VB:
Private Function CoderString(chaineCaractere As String) As String
Dim iC As Long, cAsc As Long
    For iC = 1 To Len(chaineCaractere)
        cAsc = Asc(Mid(chaineCaractere, iC, 1))
        CoderString = CoderString + Format(Right$("0" & Hex$(cAsc), 2))
    Next iC
End Function
Ce n'est vraiment pas infaillible (surement contournable), mais ça fixe une première barrière. En effet, cette fonction "code" des chaines de caractères, testMdp sera "codé" en 746573744D6470.

Cela te permet de remplacer dans ton code
VB:
Sub Test()
    If Application.InputBox("Entrez le mot de passe  : ", , , , , , , 2) = "testMdp" Then
        'dévérouiller les feuilles
        
    Else
        MsgBox "Mot de passe invalide !"
    End If
End Sub
par
VB:
Sub Test()
    If CoderString(Application.InputBox("Entrez le mot de passe  : ", , , , , , , 2)) = "746573744D6470" Then
        'dévérouiller les feuilles
        
    Else
        MsgBox "Mot de passe invalide !"
    End If
End Sub
Edit: Salut MJ13

a+
 
Dernière édition:

mromain

XLDnaute Barbatruc
Re : proteger/deproteger toutes les feuilles SANS mettre le password dans le code sou

Re,

> Romain : il faut reconnaitre que c'est assez difficilement "crackable" comme code...!
C'est quand même facilement contournable avec un minimum de connaissances VBA.
En effet, pour le problème original de mazuno, à savoir déprotéger toutes les feuilles, cela donnerai un code comme ça :
VB:
Sub Test()
Dim mdpSaisi As String, curFeuille As Worksheet

    'saisi du mot de passe par l'utilisateur
    mdpSaisi = Application.InputBox("Entrez le mot de passe  : ", , , , , , , 2)
    
    'vérifier la validité du mdp
    If CoderString__(mdpSaisi) = "746573744D6470" Then
        
        'dévérouiller les feuilles
        For Each curFeuille In ThisWorkbook.Sheets
            curFeuille.Unprotect mdpSaisi
        Next curFeuille
        
    Else
        MsgBox "Mot de passe invalide !"
    End If
End Sub
Un simple MsgBox mdpSaisi bien placé permettrai de récupérer le mdp.

a+
 
Dernière édition:
C

Compte Supprimé 979

Guest
Re : proteger/deproteger toutes les feuilles SANS mettre le password dans le code sou

Bonjour le fil,

Juste pour dire que pour un simple utilisateur, le fait de protéger le projet VBA suffit amplement, en utilisant un mot de passe "fort"

0Ceci!Est12MOT@de*PASse78[FoRt]

En revanche il faut le noter quelque part :p:D

A+
 

mromain

XLDnaute Barbatruc
Re : proteger/deproteger toutes les feuilles SANS mettre le password dans le code sou

Re, bonjour Bruno

Le sujet de la protection sur Excel a tellement été évoqué sans jamais aboutir à des solutions vraiment efficaces que j'ai moi même abandonné la protection de mes codes...

C'est parce que la protection, à mon goût, ne devrai être utilisée que pour prévenir les fausses manipulations d'utilisateurs "débutants".
Si on veut vraiment protéger des données, il faut utiliser autre chose qu'Excel.

Et c'est encore plus facile maintenant que la solution est publié sur le Net :D
Pensez_vous qu'il faille l'enlever ?

a+
 
C

Compte Supprimé 979

Guest
Re : proteger/deproteger toutes les feuilles SANS mettre le password dans le code sou

Re,

T'inquiète mromain ;)
celui qui connait VBA n'aura pas de problème même sans nous donner "ton astuce"

De plus du codage/décodage de Mdp ce trouve partout sur le net

A+
 

Discussions similaires

Réponses
10
Affichages
681
Réponses
8
Affichages
682

Statistiques des forums

Discussions
312 499
Messages
2 088 999
Membres
104 001
dernier inscrit
dessinbecm