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
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.
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 ?
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.
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.
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" ?
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
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 ?