Voir aussi
Mot de passe perdu
J'ai protégé il y a longtemps mon classeur (ou mon projet VBA) et je ne parciens plus à retrouver ce mot de passe. Comment ouvrir mon classeur.
Cette réponse va vous décevoir : vous ne trouverez PAS sur excelabo d'indication permettant de cracker un mot de passe.

Nul doute que beaucoup de ceux qui posent cette question soient de bonne foi. Mais si vous avez mis un mot de passe sur votre classeur, c'est bien que vous vouliez en protéger l'accès contre des indiscrets non ? Vous ne pouvez donc pas raisonnablement souhaiter qu'on aide ces indiscrets à accéder à vos données protégées... Par ailleurs, certains vivent en écrivant du code VBA, notamment pour des entreprises.

On est souvent amené à protéger un classeur pour éviter que les utilisateurs ne modifient par maladresse certains éléments critiques, par exemple qu'ils effacent des formules, ou écrivent dans des zones interdites, ou encore suppriment des onglets. Pour éviter cela, la protection du classeur est très efficace mais il n'est pas nécessaire de mettre un mot de passe, il suffit de ne pas renseigner la case correspondante. La grande majorité des utilisateurs d'excel ne sait pas comment déprotéger un classeur et en tous cas, ceux qui le savent sont nécessairement conscients qu'ils vont au delà de l'utilisation prévue par vous-même. Vous pouvez faire une macro associée à la déprotection du classeur qui lance un message d'avertissement si vous voulez insister sur les risques.

Mettre un mot de passe est illusoire : soit vous avez affaire à des gens honnêtes et il ne sert à rien de mettre un mot de passe, soit vous avez affaire à quelqu'un qui est décidé à accéder à tous les éléments de votre classeur et vos macros et il parviendra nécessairement à ses fins, la protection des classeurs ou des projets VBA n'étant hélas pas très solide.

Comment alors protéger un classeur que vous vendez à vos clients ? Si vous pensez qu'ils vons le cracker, alors faites un prix qui tienne compte de cela... Mais la meilleure stratégie est de vous rendre indispensable, de proposer de nouvelles fonctions, des mises à jour, et d'utiliser des fonctions et macros qui soient difficiles à décortiquer et à reproduire. Face à une formule de 3 lignes avec 70 parenthèses, peu de clients oseront toucher quoi que ce soit !

Si vraiment vous voulez mettre un mot de passe, alors faites le long, avec une alternance de nombres et de lettres, aucun mot contenu dans un dictionnaire et... ne l'oubliez pas !
Flo Cabon,
Ajouté ou modifié le 05/04/2008 (N°1999)
Efficacité de la protection par mot de passe
Comment Excel protège-t-il les données quand on met un mot de passe ? Cette protection est-elle solide ?
La solidité est quelque chose de relatif : tel blindage très solide ne résistera pas à une roquette anti-char... :-P. La protection informatique c'est pareil : tout peut être percé !

Disons que la protection dans Office, si elle répond à plus de 90% des besoins de confidentialité des utilisateurs, est très facile à percer sans être spécialiste : on trouve facilement les ouvre-boites aux quatre coins du Web...

Certaines protections sont plus des garde-fous comme la protection d'un formulaire pour éviter que celui qui le renseigne n'abîme le joli formulaire. Faire sauter cette protection est un jeu d'enfant.

Excel 2007 utilise un algo d'encodage AES. Sur un PC moyen, on ne peut du coup tester que 20 à 100 mots de passe par seconde contre plusieurs millions par minute sur les versions antérieures qui utilisent le standard d'encodage RC4.
la méthode utilisée est un HashCode qui réduit la taille des mots de passe utilisés. Ce qui veut dire qu'un même hashCode peut correspondre à des mots de passe différents.

S'il est vrai que le mot de passe est crackable, il faut savoir néanmoins qu'il existe plusieurs niveaux de protection, et qu'il est conseillé de choisir une clé de 128 bits. Pour choisir le niveau, il faut cliquer sur le bouton Avancé. La protection la plus forte est la dernière de la liste.
Une règle de base c'est de ne pas choisir un mot qui soit présent dans un dictionnaire quelconque.
C'est la première chose que testent beaucoup de crackeurs de mots de passe... Ces crackeurs utilisant souvent des dictionnaires anglais, l'utilisation d'accents ou de caractères spéciaux est aussi une micro protection additionnelle. Plus le mot est long, plus il est difficile à cracker. Mais il n'est jamais incrackable...

Voici un lien Microsoft qui t'en dit un peu plus :
http://support.microsoft.com/kb/290112/fr . Sinon il y a de nombreux sites qui expliquent ce que sont les algoritmes AES et RC4 et leurs limites.

Les spécialistes de la sécurité disent à juste titre qu'il vaut mieux une absence de protection qu'une protection qui donne une illusion de sécurité... Il est absolument illusoire de penser que la protection excel empêchera un employé par exemple de récupérer les macros (ou les données...) d'un document office, tout étant une question de moyens. . Si le document contient des données confidentielles, il est plus efficace de le protéger en utilisant les mots de passe de winzip que ceux d'office. Et si les données sont réellement sensibles, il y a des solutions professionnelles dédiées à cela.

En conclusion : n' utiliser la protection dans office QUE pour empêcher les erreurs de saisie. Dans ce cas, pour ne jamais se trouver en face de l'éternelle question : "j'ai protégé mon document par un mot de passe que j'ai oublié, comment récupérer mon travail" le plus sage est de laisser le mot de passe vide.
Circé, Anacoluthe, Flo Cabon, AnonymousA, GeeDee,
Ajouté ou modifié le 05/01/2008 (N°1958)
Certifier ses macros
Je distribue un classeur avec des macros. Comment éviter le message d'alerte macro à l'ouverture pour les utilisateurs ?
Tu peux utiliser un certificat que tu signes. Ceci est possible à partir d'Excel 2000
uniquement.
Recherche dans le répertoire d'office un fichier nommé selfcert.exe et lance le.
Renseigne le nom du certificat et valide.
Dans Excel :
Ouvre le classeur contenant les macros à "certifier", va dans l'éditeur
Visual basic puis dans Outils, Signature Electronique choisis le certificat
créé.
Enregistre le classeur.
A la prochaine ouverture un message demandera de faire confiance aux macros
signées, il suffira de cocher la case pour ne plus avoir ensuite de message
lors d'ouverture de classeurs contenant des macros signées avec ce même
certificat.
Attention, dès que tu toucheras au projet visual Basic, il te faudra recommencer
l'opération à la première ouverture après modification. Mais justement tes utilisateurs
n'ont eux aucune raison de modifier tes macros !

Pour supprimer un certificat :
Dans Internet Explorer, Outils, Options Internet, onglet Contenu, bouton
Cetificats, sélectionner le certificat puis Supprimer.
Papou,
Ajouté ou modifié le 05/03/2005 (N°1586)
Protéger par macro le code d'un autre classeur
Comment par macro protéger le code VBA d'un autre classeur (ouvert) et choisir le mot de passe qui me permettra de le déprotéger ?
Testé sous Excel 2000 :

Private Declare Function FindWindowA Lib "User32" _
(ByVal lpClassName As String, _
ByVal lpWindowName As String) As Long

Private Declare Function GetForegroundWindow Lib "User32" () As Long

Private Declare Function SetForegroundWindow Lib "User32" _
(ByVal hWnd As Long) As Long

Sub Protéger(Classeur As String, MDP As String)
Dim CurhWnd As Long, VBP As Object
Set VBP = Workbooks(Classeur).VBProject
If VBP.Protection Then Exit Sub
CurhWnd = GetForegroundWindow
With Application.VBE
SetForegroundWindow FindWindowA("wndclass_desked_gsk", _
.MainWindow.Caption)
VBP.VBComponents(1).CodeModule.CodePane.Show
.CommandBars.FindControl(ID:=2578).Execute
End With
SendKeys "^{TAB} {TAB}" & MDP & "{TAB}" & MDP & "~", True
SetForegroundWindow CurhWnd
Workbooks(Classeur).Close True ' Si tu veux sauver et fermer le
classeur
End Sub

Sub Test()
' Protège le code VBA du classeur ouvert "Test.xls" avec le
' mot de passe "MonMotDePasse"
Protéger "Test.xls", "MonMotDePasse"
End Sub
Laurent Longre, (N°1230)
Protection et outil plan
Je voudrais protéger une feuille tout en laissant la possibilité d'utiliser les niveaux de plan.
Mets ce code dans le module VBA "ThisWorkbook" de ton classeur :

Private Sub Workbook_Open()
Sheets("Feuil1").Protect UserInterfaceOnly = True
Sheets("Feuil1").EnableOutlining = True
End Sub

Remplace "Feuil1" par le nom de la feuille de calcul concernée. Exécute
une fois cette procédure si tu veux tester, après c'est automatique à
l'ouverture du classeur.
Laurent Longre, (N°1229)
Protection des objets sur une feuille
Comment protéger d'un coup tous les objets d'une feuille ?
pour activer la protection des cellules et des objets
Worksheets(""Feuil1"").Protect UserInterfaceOnly:=True,
DrawingObjects:=True

pour verrouiller un objet
Worksheets(""Feuil1"").Shapes(""Oval 1"").Locked = True
ChrisV, (N°1228)
protéger/déprotéger plusieurs feuilles en une fois
Je voudrais protéger/déprotéger par macro d'un coup toutes les feuilles de mon classeur
Sub Protéger()
' Protection automatique de toutes les feuilles d'un classeur
Dim nombre As Integer
nombre = ActiveWorkbook.Sheets.Count
Application.ScreenUpdating = False
For i = 1 To nombre
Worksheets(i).Protect password:="blabla"
Next i
End Sub

Sub Déprotéger()
' Déprotection automatique de toutes les feuilles d'un classeur
Dim nombre As Integer
nombre = ActiveWorkbook.Sheets.Count
Application.ScreenUpdating = False
For i = 1 To nombre
Worksheets(i).Unprotect password:="blabla"
Next i
End Sub
Fabian Bertrand, (N°1227)
Interdire la protection par un mot de passe
Est-il possible sous excel97/2000 d'interdire l'utilisation d'un mot de passe pour protéger le document ?
Pour rendre la commande Protection du menu Outils inaccessible :
Application.CommandBars.FindControl(ID:=30029).Enabled = False
Pour la réactiver :
Application.CommandBars.FindControl(ID:=30029).Enabled = True
Frédéric Sigonneau, (N°1226)
Protection des macros
Comment protéger les macro d'une feuille XL sans pour autant proteger l'accès à la feuille en elle même ?
Dans l'éditeur VBA, menu Outils -> Propriétés de VBAProject -> onglet "Protection".

La protection sera effective après enregistrement du classeur, à sa prochaine réouverture.
Laurent Longre, (N°1225)
Protéger les cellules contenant des formules
Comment faire pour protéger des cellules contenant des formules, sachant que l'on doit pouvoir saisir des données ailleurs sur cette feuille ?
Plusieurs solutions :
A) Tu sélectionnes tes cellules contenant les formules à protéger, puis Données ->
Validation -> Autoriser Personnalisé
Dans la zone Formule, tu écris >1.

B) 1- Déverrouille toutes les cellules de la feuille :
Ctrl+A puis clic-droit sur la zone en surbrillance, Format de cellule, onglet Protection,
décoche la case Verrouillée, puis OK,
2- ensuite verrouille uniquement les plages à protéger Ctrl+T, Cellules... coche la case
d'option Formules, valide par OK, puis sur une des cellules en surbrillance (ou par le menu
Format) clic-droit Format de cellule, onglet protection, coche la case Verrouillée, puis OK
3- remet la protection de la feuille.
Outils, Protection, Protéger la feuille

C) par VBA
Sub Protéger_formules()
' Installe un contrôle par Données validation
' dans toutes les cellules contenant des formules de la feuille active

Range("A1").Select
On Error Resume Next
Selection.SpecialCells(xlCellTypeFormulas, 23).Select
With Selection.Validation
.Delete
.Add Type:=xlValidateCustom, AlertStyle:=xlValidAlertStop,
Operator:= _
xlBetween, Formula1:=">1"
.IgnoreBlank = True
.InCellDropdown = True
.InputTitle = ""
.ErrorTitle = "Formule verrouillée"
.InputMessage = ""
.ErrorMessage = _
"Pour déverouiller cette formule, Données -> Validation -> Autoriser
Tout"
.ShowInput = True
.ShowError = True
End With

End Sub
Si tu as souvent besoin de protéger tes cellules pour éviter d'effacer par erreur des formules
par exemple, relie cette macro à un bouton sur ta barre d'outils..
Bernard Mazas, Laurent Longre, ChrisV, (N°1224)
Protéger-déprotéger un classeur par VBA
J'ai livré à plusieurs de mes correspondants une appli Excel dont le projet VBA est protégé par un mot de passe (toto). Je souhaite leur envoyer un "patch" qui corrige cette appli. Pour cela j'ai réalisé un nouveau classeur danslequel une macro corrige la macro défectueuse du premier classeur, et ça marche mais je n'arrive pas par VBA à faire sauter la protection du premier projet.
Sub TestProtect()
ProtectVBProject
Workbooks("Proteger_deproteger.xls"), "toto"
End Sub

Sub TestUnprotect()

UnprotectVBProject Workbooks("Proteger_deproteger.xls"), "toto"
End Sub

Sub
UnprotectVBProject(WB As Workbook, ByVal Password As String)
Dim vbProj As Object

Set vbProj = WB.VBProject

'Teste si le classeur est déjà déprotégé
If vbProj.Protection <> 1 Then Exit Sub
Set
Application.VBE.ActiveVBProject = vbProj

'uilise les sendkeys pourmasquer le mot de passe du projet
SendKeys Password & "~~"

Application.VBE.CommandBars(1).FindControl(ID:=2578, recursive:=True).Execute

End Sub

Sub ProtectVBProject(WB As Workbook, ByVal Password As String)
Dim vbProj As Object
Set vbProj = WB.VBProject

'teste si le projet est déjà verrouillé
If vbProj.Protection = 1 Then Exit Sub
Set Application.VBE.ActiveVBProject = vbProj

'utilise les sendKeys pour mettre le mot de passe
SendKeys "+{TAB}{RIGHT}%V{+}{TAB}" & Password & "{TAB}" &
Password & "~"
Application.VBE.CommandBars(1).FindControl(ID:=2578, recursive:=True).Execute

WB.Save
End Sub
Bill Manville, (N°1223)
Protéger une feuille par VBA avec un mot de passe
Comment protéger par macro les objets de la feuille 1 en entrant un mot de passe ?
Essaie ceci : Le mot de passe est "toto" et cela va protéger seulement les objets situés dans
la feuille "Feuil1"

Worksheets("Feuil1").Protect Password:="toto", DrawingObjects:=True

Attention, si tu ne veux pas protéger les cellules, tu ne peux pas utiliser :
userinterfaceOnly:=True, regarde la définition qu'en donne l'aide :
UserInterfaceOnly Argument de type Variant facultatif. Cet argument a la valeur True pour
protéger l'interface utilisateur, mais pas les macros. Si cet argument n'est pas spécifié, la
protection s'applique à la fois aux macros et à l'interface utilisateur.
Denis Michon,
Ajouté ou modifié le 25/10/2003 (N°1222)
Niveaux de protection
Je sais masquer une feuille qui ne sert qu'a des calculs, mais est-il possible d'empêcher simplement l'accès à cette même feuille par un mot de passe ?
La question de fond est : quel niveau de protection veux-tu et contre qui ou quoi ?

La solution xlveryhidden est entièrement adaptée à la protection contre l'erreur et résiste
bien à des "curieux" qui n'ont pas l'idée ou les connaissances pour démasquer des
feuilles par VBA. Dans une entreprise ou la culture Excel s'arrête à l'utilisation de la
fonction tableur, c'est amplement satisfaisant.
Le mot de passe sur une feuille ne tient que quelques secondes (c'est bien écrit
"secondes" !) face à un programme VBA qui a été publié sur ce forum il y a quelque
temps.
Perso j'ai donc choisi la première solution et j'ai fait une macro qui fait apparaître les
feuilles masquées par veryhidden. Pour que cette macro ne soit pas visible dans la liste des
macros (la feuille de macro est masquée - je suis en Excel95- ah j'ai vu LL qui riait !) je
lui ai mis un paramètre dont on peut contrôler la valeur Il suffit que les personnes autorisées
(commissaire au comptes par exemple) connaissent le nom de la macro et la façon de la lancer
pour visualiser les calculs intermédiaires. les utilisateurs eux sont contents de ne pas être
encombrés avec des trucs qui ne les intéressent pas.
Geo, (N°1221)
Protéger mon menu personnalisé
Lorsque je créée un menu personnalisé et que je protège ma feuille de calcul, mon menu peut malgré tout être effacé en allant dans personnaliser-barre d'outils -(cocher barre de menu)-reset. Comment Protéger ou sceller mon menu ?
Application.CommandBars("MaBarre").Protection= ...
msoBarNoProtection, msoBarNoCustomize, msoBarNoResize, msoBarNoMove,
msoBarNoChangeVisible, msoBarNoChangeDock, msoBarNoVerticalDock ou
msoBarNoHorizontalDock.
Iznogood, (N°1220)
Masquer les barres d'outils les feuilles et le logo excel
J'ai créé une macro qui se déclenche à l'ouverture du fichier excel et affiche une boîte de dialogue. J'aimerais n'avoir que cette boîte de dialogue affichée c'est à dire sans feuilles excel derrière, sans barre de défilement, sans barre d'outil, sans logo excel du haut ...
Dans le module ThisWorkbook de ton projet :

Private Sub Workbook_Open()
Application.WindowState = xlMinimized
AppActivate "Microsoft Excel"
UserForm1.Show
End Sub

Dans l'événement Click d'un bouton sur ton UserForm :

Private Sub CommandButton1_Click()
Application.WindowState = xlMaximized
AppActivate "Microsoft Excel"
Unload Me
End Sub
Frédéric Sigonneau, (N°1219)
Filtre auto sur une feuille protégée
Lorsque ma feuille est protégée, le filtrage automatique avec menus déroulants est bloqué. Peut-on débloquer ce mode de filtrage sur une feuille protégée ?
Pour utiliser le filtre sur une feuille protégée :

Dans le module ThisWorkbook :

Private Sub Workbook_Open()
Feuil1.EnableAutoFilter = True

Feuil1.Protect Contents:=True, UserInterfaceOnly:=True
End Sub
ChrisV, (N°1218)
Etrange comportement de cellules protégées
J'ai un comportement étrange sur des cellules protégées : Par VBA certaines cellules sont déprotégées, modifiées puis reprotégées. Cependant, il arrive parfois que des cellules qui devraient être protégées ne le soient pas et inversement...
Si ton code est dans l'événement workbook_open, essaie d'activer la feuille sur
laquelle se trouvent tes cellules à protéger/déprotéger avant de lancer ton
code. Il se passe parfois des comportements étranges quand ce n'est pas le cas.
(traduction Flo)
Tom Ogilvy, (N°1217)
EnableSelection
J'ai protégé certaines cellules d'une feuille et mis sur la feuille la propriété "enable selection" à 1 (unlockedCells), ce qui permet de se ballader uniquement sur les cellules non protégées mais cette propriété se perd en sauvant et fermant le fichier.
Sheets("Feuil1").EnableSelection = xlUnlockedCells
Sheets("Feuil1").Protect Contents:=True, UserInterfaceOnly:=True

Pour enable selection, on doit utiliser une de ces constantes :
xlNoRestrictions, xlNoSelection ou xlUnlockedCells (true ou false ne marche pas)
Denis Michon, (N°1216)
Désactiver les raccourcis clavier
Est-il possible de désactiver tous les raccourcis clavier ?
Sub Désactive()
Dim K, I As Integer
On Error Resume Next
For Each K In
Array("^", "%", "+^", "+%", "^%", "+^%")
For I = 32 To 255

Application.OnKey K & Chr$(I), ""
Next I
Next K
End Sub

Sub
Réactive()
Dim K, I As Integer
On Error Resume Next
For Each K In
Array("^", "%", "+^", "+%", "^%", "+^%")
For I = 32 To 255

Application.OnKey K & Chr$(I)
Next I
Next K
End Sub

Ça ne désactive "que" les raccourcis utilisant une touche alphanumérique.
Laurent Longre, (N°1215)
Commentaire sur des cellules verrouillées
J'utilise une feuille de classeur ou une partie des cellules est verrouillé pour protéger les formules et ou une autre partie est déverroulliée pour entrer les données. Dans cette configuration, je ne peux pas entrer de commentaire même dans les cellules non vérrouillées.
Si dans la boîte de dialogue Protéger la feuille, tu décoches Objets dans les éléments à
protéger, tu pourras ajouter des commentaires à toutes les cellules, verrouillées ou pas.
Monique Brunel, (N°1214)