Rechercher dans ce blog

Nombre total de pages vues (en milliers)

MOT DE PASSE

Ha ! les mots de passe.... vaste sujet.

Pour ma part un mot de passe sur un fichier excel, avec la méthode  Office sont trop facile à "cracker".
Je sais le faire mais je ne vous montrerai pas la procédure peu complexe ma foi mais tellement débattue sur le net et le sujet n'est pas d'actualités ici.

Pour ma part je vais vous montrer comment protéger un classeur efficacement, et où il sera très difficile de "cracker" le mot de passe ....
Je sais, il y a des petits malin (peu nombreux) qui arriveront toujours... Personnellement je ne l'ai jamais trouvé.

Donc voici comment il faut procéder.

1) Ouvrez un nouveau fichier sous Excel et enregristrez le sous le nom   MOT DE PASSE
2) Nommez la Feuil1  ACCEUIL

Ce fichier vous servira d'exemple pour la programmation dans d'autre fichier Excel.



CREATION DU FORMULAIRE :


Sur votre classeur accéder à Projet - VBAProject en tapant simultanément sur les Alt + F11.
Vous y êtes.
Insérez un Userform et dans cet Userform, insérer une Textbox et un CommandButton.

Vous avez ceci :


NOMMEZ  votre formulaire MOT_DE_PASSE


Veuillez mentionnez un titre à l'Userform  "MOT_DE_PASSE" en mettant le texte dans Caption
Exemple : Veuillez saisir le MOT DE PASSE




Nommez votre CommandButton1 dans Caption  :  VALIDER


PROGRAMMATION :

Nous allons maintenant effectuer la programmation de cet Userform.

Double-cliquez sur le bouton VALIDER et insérer le code suivant entre :

Private Sub CommandButton1_Click() 'Quand clic sur bouton procède à l'éxécution du code situé entre Private Sub et End Sub
 
End Sub


Code à inserer.

   If TextBox1.Text <> "MDP" Then 'Mentionnez le mot de passe souhaité (exemple ici =  MDP)
      MsgBox ("Mot de passe incorrect... ") ' si différent du mot de passe
      TextBox1 = ""  
'Vide la textbox
      TextBox1.SetFocus '
Sélectionne la Textbox (ou fait le focus sur la Textbox)
    Else
       Sheets("ACCUEIL").Select
'Sélectionne la feuille mentionnée ici ACCUEIL

       Unload Me 'Ferme l'Userform
   
End If


Dans ce code vous devez saisir votre MOT de PASSE et surtout ne l'oubliez pas !!!!!



Ce code dès lors que vous allez cliquer sur le bouton VALIDER vous donnera l'accès à la ACCUEIL  si le code est correct.



Maintenant si vous souhaitez rendre plus discrète la saisie du mot de passe en transformant le texte saisie par des astérisques (*******)  insérer le code suivant :

Private Sub UserForm_Initialize()
With Me
'............................Avec l'UserForm.....
    .TextBox1.PasswordChar = "*"
'...les caractères entrés seront convertis en "*".....
End With
'...........................Fin de avec l'UserForm.....
TextBox1.SetFocus
'...On donne le Focus à la TextBox1.....
End Sub



Cela fonctionne mais ce n'est pas suffisant, car si vous cliquez sur la croix ROUGE du formulaire celui-ci se ferme et vous avez accès à la Feuille ACCUEIL  SANS SAISIE DU MOT DE PASSE (remarquez que si vous indiquer le mot de passe cela fonctionne aussi)

Donc en l'état le formulaire est inefficace.

Sélectionnez votre formulaire et appuyez sur la touche F5.

Ajouter dès à présent  un CommandButton et nommez le QUITTER
Double-cliquez sur QUITTER  et insérer le code suivant entre :

Private Sub CommandButton2_Click() 'Quand clic sur bouton procède à l'éxécution du code situé entre Private Sub et End Sub
End Sub


Code à inserer :

Workbooks("MOT DE PASSE.xls").Close False  'Ferme le fichier sans sauvegarde (True si sauvegarde)
Unload Me 'Ferme le formulaire


Donc dans le formulaire, en cliquant sur le bouton QUITTER, cette action fermera le formulaire et le fichier Excel sans le sauvegarder.

Mais cette maudite croix est toujours là,  mais on va tout faire pour l'éradiquer mais il fallait impérativement mettre le bouton QUITTER car le dans le cas contraire impossibilité de quitter le programme mis à part CTRL + MAJ + Suppr  .... un peu radical.

Donc pour programmer l'effacement de la croix ROUGE insérer un nouveau module
et nommez le OTEZ_LA_CROIX



Et insérer le code suivant dans le module :

Option Explicit

    'pour enlever la croix rouge d'un Userform
    Declare Function GetWindowLongA Lib "user32" _
    (ByVal hwnd As Long, ByVal nIndex As Long) As Long

     Declare Function SetWindowLongA Lib "user32" _
    (ByVal hwnd As Long, ByVal nIndex As Long, _
    ByVal dwNewLong As Long) As Long

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

    Public Sub OteCroix(Caption As String)
    Dim hwnd As Long
        hwnd = FindWindowA("Thunder" & IIf(Application.Version Like "8*", "X", "D") _
        & "Frame", Caption)
        SetWindowLongA hwnd, -16, GetWindowLongA(hwnd, -16) And &HFFF7FFFF
    End Sub



Ensuite sélectionnez le formulaire, double-cliquez sur celui-ci  et changer le code suivant  :

Private Sub UserForm_Click()

End Sub


par ce code :

Private Sub UserForm_Initialize()
'Ote la croix de l'userform - Code Option Explicit dans module MOT_DE_PASSE
OteCroix Me.Caption
End Sub

Maintenant nous allons procéder à l'ouverture automatique du formulaire à l'ouverture de votre fichier.

Dans le VBAProject, double-cliquez sur ThisWorkbook et insérer le code suivant :

'Affichage automatique de l'userform à l'ouverture du fichier.
Private Sub Workbook_Open()
MOT_DE_PASSE.Show
'Nom du formulaire
End Sub


Donc maintenant à l'ouverture du fichier :
* le formulaire s'ouvre automatiquement
* sans croix ROUGE donc impossibilité de le fermer.
* obligation d'insérer le bon code
* mauvais code  = Réouverture du formulaire pour insertion bon code. Si pas de code correct seul solution pour fermer le formulaire est de cliquer  sur QUITTER
* Bouton QUITTER = Fermeture du fichier sans sauvegarde
* bon code accès à la ACCUEIL (ex Feuil1)

Vous allez me dire "Super impossible maintenant de pirater mon code"... vous avez peut-être raison mais pour moi ce n'est pas garantie à 100%  car si une personne par hasard obtient votre code il peut modifier le fichier mais aussi la programmation... et là Oups !!!

Donc maintenant nous allons encoder la programmation par un mot de passe.

Procédure :

Accéder à Projet - VBAProject en tapant simultanément sur les Alt + F11.

Sélectionnez Outils puis Propriétés de VBAProject....


à l'ouverture du formulaire VBAProject - Propriétés du projet  sélectionnez l'onglet Protection.

Insérer votre mot de passe et cochez  Verrouiller le projet pour l'affichage


Cliquez sur OK

Maintenant votre programmation est verrouillé et votre mot de passe très protégé.






GESTION DES ONGLETS

Je vais vous montrer comment rendre un onglet protégé en écriture, le rendre invisible  et ne donner l'accès que via le formulaire.

Ajoutez dans votre fichier Excel un nouvel onglet (ou feuille) que vous allez nommer  TEST.
Protégez votre onglet par un mot de passe en écriture (la méthodologie est similaire suivant les version d'Excel).
Donnez un mot de passe  - Exemple TOTO

Maintenant que votre onglet (ou feuille) est protégée retournez à Projet - VBAProject en tapant simultanément sur les Alt + F11.

Dans le projet VBA de votre fichier sélectionnnez la Feuil2 (TEST) qui correspond aux paramètres de votre onglet TEST.
A la ligne Visible choisissez 2-xlSheetVeryHidden.

Ceci implique que votre feuille ne sera plus visible dans votre fichier mais aussi inaccessible via le menu  Masquer & Afficher dans le menu d'Excel.

La notion 0-SheetHidden implique que l'onglet n'est plus visible dans le fichier mais accessible via le menu Masquer & Afficher.


Donc maintenant votre onglet TEST n'est plus accessible via le fichier mais uniquement via le VBA Project.

A ce stade ajouter à votre formulaire un CommandButton3  nommez "OUVRIR TEST"
Double-cliquez sur ce bouton et insérer le code suivant entre :

Private Sub CommandButton3_Click()

End Sub


Code à inserer :

Worksheets("TEST").Visible = True 'Rend visible l'onglet TEST
Worksheets("TEST").Activate  'Active l'onglet TEST
ActiveSheet.Unprotect ("TOTO") 'Enlève le mote de passe
Unload Me 'Ferme le formulaire actif

Maintenant sélectionnez votre formulaire et appuyez sur la touche F5.
Cliquez sur OUVRIR TEST.  Votre onglet s'ouvre et est accessible en écriture.


BLOQUER "ENREGISTER SOUS" et RENDRE INACTIF le bouton "ENREGISTREMENT"

C'est déjà bien mais on peut pousser encore plus la programmation, exemple :
a) empêcher d'enregistrer le fichier  en "Enregistrer sous"
b) bloquer le l'action du bouton "Enregistrer" ou "Ctrl+S"

1) Bloquer "Enregistrement Sous"  :

    Accéder à Projet - VBAProject en tapant simultanément sur les Alt + F11.
    Cliquez deux fois sur ThisWorkbook


 
et à droite coller le code suivant :

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
If SaveAsUI = True Then Cancel = True   'Bloque l'utilisation du bouton "Enregistrer sous" 
End Sub

AVANT de bloquer le bouton "Enregistrement

2) Dans le même environnement ThisWorkBook  ajouter le code suivant :

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim Feuille As Worksheet
With Sheets("Accueil")
.Activate
End With
SAUVEGARDE_FICHIER.Show
End Sub

Ce programme dès lors que vous allez client sur la "Croix rouge" du fichier excel ou fermer le fichier Excel va sélectionnez l'onglet ACCEUIL et ouvrir le un nouveau formulaire qui s'appellera SAUVEGARDE_FICHIER.

Créez un nouveau formulaire avec une Textbox et une CommandButton et Nommer ce formulaire SAUVEGARDE_FICHIER, soit la même procédure que votre tout premier formulaire (ci-dessus)

Insérez-y le code suivant

Private Sub CommandButton1_Click()
If TextBox1.Text <> "FERMETURE" Then '
Mentionnez le mot de passe souhaité différent du premier mot de passe ou pas suivant votre choix
      MsgBox ("Mot de passe incorrect... ")
      TextBox1 = ""
      TextBox1.SetFocus
    Else


Worksheets("TEST").Visible = False 'rend invisible l'onglet TEST s'il est ouvert
       

With Sheets("Accueil") 'Active l'onglet ACCEUIL
.Activate
End With
End If
Unload Me
'Ferme l'Userform
 
ThisWorkbook.Save
'Sauvegarde le fichier si le mot de passe est correct
End Sub




3) Bloquer  le bouton "Enregistrement"  :


Un peu plus déliquat mais réalisable.
Actuellement si vous avez pu faire fonctionner votre formulaire c'est que vos macros sont activées.

Désactivez vos macros et enregistrer votre fichier. Fermez et réouvrez le.

Accéder à Projet - VBAProject en tapant simultanément sur les Alt + F11.
Cliquez deux fois sur ThisWorkbook

Ajoutez tout simplement dans Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) le code suivant :

Cancel = True 'qui annule les demandes d'enregistrement

Réactivez vos macros, fermer en enregistrant votre fichier.

Voilà tout devrait fonctionner ..... bon courage.

Aucun commentaire :

Enregistrer un commentaire

Pour vous aider à publier votre commentaire, voici la marche à suivre :
1) Ecrivez votre texte dans le formulaire de saisie ci-dessus
2) Si vous avez un compte, vous pouvez vous identifier dans la liste déroulante Commentaire
Sinon, vous pouvez saisir votre nom ou pseudo par Nom/URL
3) Vous pouvez, en cliquant sur le lien S'abonner par e-mail, être assuré d'être avisé en cas d'une réponse
4) Cliquer sur Publier enfin.

Le message sera publié après modération.
Merci