Mettre un mot de passe macro et empécherl'exécution des macros via une macro

sshikamaru

XLDnaute Nouveau
Voilà tout est dans le titre.

Pour mon travail, dans l'usinage de pièce, je créé un fichier de saisie de données dans lesquelles des valeurs quotidiennes de pièces contrôlées vont être saisies. Un fichier par type de pièce va exister.

Selon le type de pièce, quelques variables vont changer, mais ça, ça fonctionne via des macros.
Donc je me fais un fichier de base, sur lequel en ayant auparavant sélectionner mes options, je lance une macro qui masque les feuilles inutiles, qui verrouille intégralement le classeur, et qui enregistre sous.

Pour éviter que des enfants de cœur viennent bidouiller les formules, les mises en formes conditionnelles, ou même des jours de relevés à cause d'un "oubli" pour faire disparaitre certaines "erreurs" et éviter de faire du travail supplémentaire, chose qui se produit actuellement et qui est inadmissible, je souhaiterais que lors de ma macro de sauvegarde, un mot de passe soit mis sur les macros, ainsi que d'empêcher les gens de pouvoir exécuter des macros pour que personne n'y touche..

Existe t'il une syntaxe en vba me permettant d'ajouter un mot de passe sur une macro ?
Et une autre pour verrouiller l'exécution des macros ?
merci.

Voici ma macro d'enregistrement :
Code:
Sub enregistrer()
Dim pass As String
pass = "pass"
    
    data.Visible = False
    ThisWorkbook.Protect pass
    For i = 1 To Sheets.Count
        Sheets(i).Protect Password:=pass
    Next
    Dim fichier As String
    On Error Resume Next
    'ChDir "\\bdx00901\ToutGFT\QO\GEAR LAB"
    ChDir "C:\Users\gpicard2\Desktop\Nouveau dossier"
    fichier = Application.GetSaveAsFilename( _
    fileFilter:="Fichier excel (.xls) (*.xls), *.xls")
    
    If fichier <> False Then
        ThisWorkbook.SaveAs fichier
    Else
        Application.ScreenUpdating = False
        ThisWorkbook.Unprotect pass
        For i = 1 To Sheets.Count
            Sheets(i).Unprotect Password:=pass
        Next
        data.Visible = True
        data.Select
        Range("a1").Select

        Application.ScreenUpdating = True
    End If
End Sub
 

sigismond

XLDnaute Occasionnel
Re : Mettre un mot de passe macro et empécherl'exécution des macros via une macro

Bonjour,

Tout dépend de la technicité de tes enfants de cœur.
S'il ne savent pas craquer une protection VBA, tu peux mettre dans ton code une MsgBox qui demande un mot de passe et décider ce que tu fais en fonction de la réponse.
La faiblesse de la solution est que le Pass est écrit en clair dans ton code.

Sigismond
 

sshikamaru

XLDnaute Nouveau
Re : Mettre un mot de passe macro et empécherl'exécution des macros via une macro

Pour le moment, les enfants de cœur sont plutôt pas doués avec excel, voilà pourquoi j'ai opté pour le mot de passe.
En fait à l'origine, j'avais pensé à supprimer entièrement les macros, vu qu'elle ne servent qu'à la préparation du fichier, et j'avais trouver ce code :
Code:
Sub Supprimer_toutes_macros()
Dim VBC As Object
  
MsgBox "1"
With ActiveWorkbook.VBProject
    MsgBox "a"
    For Each VBC In .VBComponents
        If VBC.Type = 100 Then
            With VBC.CodeModule
                .DeleteLines 1, .CountOfLines
                .CodePane.Window.Close
            End With
        Else
            .VBComponents.Remove VBC
        End If
    Next VBC
End With

ActiveWorkbook.Save
 
End Sub
Mais d'une il ne marche pas et de deux, il ne sauvegardera pas automatiquement après cette commande car elle sera supprimée elle aussi.
ou alors existe t'il un moyen de tout supprimer sans supprimer telle ou telle macro ?
 

sigismond

XLDnaute Occasionnel
Re : Mettre un mot de passe macro et empécherl'exécution des macros via une macro

Je propose de faire simple et je ne mettrai du code qu'en dernier recours.

Tes enfants de cœur parviendront ils à déplomber cet exemple ?
 

Pièces jointes

  • Calcul_de_Production.xlsm
    17.2 KB · Affichages: 46

sshikamaru

XLDnaute Nouveau
Re : Mettre un mot de passe macro et empécherl'exécution des macros via une macro

non sans le code c'est impossible, et tu as verrouiller le code vba.
Je sais parfaitement qu'au niveau déverrouillage de fichier excel, pour mon chef comme mes collègues, si ils n'ont pas le code, il n'y toucheront pas.

Par contre, si ils ouvrent le code vba qui n'est pas verrouillé, je sais qu'ils se donneront à cœur joie de faire certaines choses si il trouvent le code de la feuille excel dedans.

C'est pour ça que je voulais tout verrouiller avec un code, histoire qu'ils ne modifient rien du tout.

Mais dans mon modèle de base, comme il n'y a que moi qui l'aura, je voudrais le laisser ouvert, pour éviter de perdre le code (ce qui peut arriver).

Mais je veux qu'au moment ou je lance ma commande d'enregistrement que le code vba se verrouille, et ça je ne sais pas comment faire.
 

eriiic

XLDnaute Barbatruc
Re : Mettre un mot de passe macro et empécherl'exécution des macros via une macro

Bonjour,

Il vous reste des excel 2003 ?
Si tu peux mettre le pack de compatibilité, tu enregistres la version en .xlsx et les macros sont supprimées.
eric
 

sshikamaru

XLDnaute Nouveau
Re : Mettre un mot de passe macro et empécherl'exécution des macros via une macro

j'ai essayé le coup du xlsx, mais via la macro, il ne me l'enregistre pas, même si tout marche avec un xls de base.
et j'ai réussi à supprimer les macros contenues dans une feuille en attendant.

je mettrais dans la journée un exemple sans infos dans le tableau, juste la mise en forme (secret pro désolé...) pour voir ce qui sera réalisable.


edit voici le fichier sans texte et sans formule.
juste les macros.
 

Pièces jointes

  • Essais de macro.xlsm
    64.8 KB · Affichages: 43
Dernière édition:

eriiic

XLDnaute Barbatruc
Re : Mettre un mot de passe macro et empécherl'exécution des macros via une macro

Pour enregistrer la copie en xlsx (sans macro) :
Code:
    Application.DisplayAlerts = False
    ThisWorkbook.SaveAsFilename:=ThisWorkbook.Path & "\Essais de macro.xlsx",FileFormat:=xlOpenXMLWorkbook
    Application.DisplayAlerts = True
eric
 

sshikamaru

XLDnaute Nouveau
Re : Mettre un mot de passe macro et empécherl'exécution des macros via une macro

Merci j'ai rajouter votre code au mien, mais j'ai toujours un soucis. lorsque je l'ouvre après l'avoir fermé, il me demande de le ré-enregistrer.

n'existe t'il pas un moyen d'enregistrer une copie de mon fichier "Essais de macro.xlsm"‎ en "copie1.xlsx" sans fermer le fichier "Essais de macro.xlsm"‎ ?
 

eriiic

XLDnaute Barbatruc
Re : Mettre un mot de passe macro et empécherl'exécution des macros via une macro

A ma connaissance non. Le seul moyen de faire une copie est de l'enregistrer sous un nouveau nom.
Tu peux ajouter :
Code:
ThisWorkbook.Saved = True
pour qu'il le considère comme enregistré.
Mais tu pourrais avoir ta macro dans un classeur, et qu'elle ouvre et travaille sur un classeur modèle annexe que tu enregistres sous son nouveau nom à la fin.
eric
 

sshikamaru

XLDnaute Nouveau
Re : Mettre un mot de passe macro et empécherl'exécution des macros via une macro

Ouais j'ai essayé mais ça ne règle pas mon soucis.
il faudrait qu'une fois enregistré, il se ferme, se ré-ouvre et s'enregistre, car quand je l'enregistre sous, les macros restent jusqu'à la fermeture du classeur, et disparaissent à la ré-ouverture du fichier, car il me demande de sauvegarder à la ré-ouverture.

Suite au demande de mon chef, je vais avoir besoin de garder mes macros intactes, et donc il faut absolument que je les verrouille.
Il n'existe pas une syntaxe qui permette d'appliquer la protection du code vba ?
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
315 093
Messages
2 116 136
Membres
112 667
dernier inscrit
foyoman