Les MDP et les macro ne font pas bon ménage...

ravenolhm

XLDnaute Nouveau
Bonsoir le forum !

Je possède un fichier excel dont j’ai protégé les feuilles une par une avec le même mot de passe en ne laissant déverrouillé que les cellules de « saisies ». Le souci c’est que le classeur comporte des macros qui sont actionnées (par le biais des boutons) par l’utilisateur standard (il n’a pas accès aux zones verrouillées). Ces macros affectent des valeurs aux cellules verrouillées ! Et bien sur, la macro me jette lors de son exécution.

Avec l’enregistreur de macros, j’ai essayé d’activer/désactiver la protection a chaque débuts/fins d’exécution. Cela fonctionne mais il ne prend pas en compte le mot de passe saisie !

Avez-vous une solution !? (Même plusieurs, je ne suis pas contre !)

Ci-joint, un fichier tout bête résumant mon problème, le mot de passe : 1234

Merci d’avance pour vos réponses, Bonne soirée et bonne année à toutes et à tous !
 

Pièces jointes

  • classeur avec feuille protegé.xls
    26 KB · Affichages: 49

Excel-lent

XLDnaute Barbatruc
Re : Les MDP et les macro ne font pas bon ménage...

Bonjour Ravenolhm,

Comme tu l'as si bien dis, pour que tes macros fonctionnent, il suffit de :
-> enlever la protection au début de la macro
-> remettre la protection à la fin de la macro

Sub stock_AA12()

Sheets("Sheet1").Unprotect Password:="1234"
Range("B3").Value = Range("B3") - Range("C3")
Range("C3").ClearContents
Sheets("Sheet1").Protect Password:="1234"

End Sub

Sub stock_AA22()

Sheets("Sheet1").Unprotect Password:="1234"
Range("B4").Value = Range("B4") - Range("C4")
Range("C4").ClearContents
Sheets("Sheet1").Protect Password:="1234"

End Sub

Sub stock_AA33()

Sheets("Sheet1").Unprotect Password:="1234"
Range("B5").Value = Range("B5") - Range("C5")
Range("C5").ClearContents
Sheets("Sheet1").Protect Password:="1234"

End Sub

Evidement, pour éviter d'avoir à écrire deux fois par macro le nom de la feuille, tu peux faire ainsi :

Sub stock_AA12()

With Sheets("Sheet1")
---.Unprotect Password:="1234"
---Range("B3").Value = Range("B3") - Range("C3")
---Range("C3").ClearContents
---.Protect Password:="1234"
End With

End Sub

Faire de même pour les autres macros.

Bonne soirée et bon test.
 

Excel-lent

XLDnaute Barbatruc
Re : Les MDP et les macro ne font pas bon ménage...

Re,

Pour information, ta macro :
Sub stock_AA12()

With Sheets("Sheet1")
---.Unprotect Password:="1234"
---Range("B3").Value = Range("B3") - Range("C3")
---Range("C3").ClearContents
---.Protect Password:="1234"
End With

End Sub

Peux-être simplifié ainsi :
Sub stock_AA12()

With Sheets("Sheet1")
---.Unprotect Password:="1234"
---[B3] = [B3] - [C3]
---[C3].ClearContents
---.Protect Password:="1234"
End With

End Sub

N'hésite pas si tu as des soucis

Bonne soirée
 

david84

XLDnaute Barbatruc
Re : Les MDP et les macro ne font pas bon ménage...

Bonsoir,
il te faut déprotéger ta feuille au début et la reprotéger à la fin, du style :
Code:
Sub stock_AA12()
ActiveSheet.Unprotect
Range("B3").Value = Range("B3") - Range("C3")
Range("C3").ClearContents
ActiveSheet.Protect
End Sub
A+
 

Excel-lent

XLDnaute Barbatruc
Re : Les MDP et les macro ne font pas bon ménage...

Bonjour le fil,

Attention, le code :
ActiveSheet.Unprotect

Ainsi que :
ActiveSheet.Protect

Ne fonctionnera pas.

Pour que cela fonctionne, il faudrait écrire la macro ci-dessous (il faut préciser le mot de passe) :
Sub stock_AA12()
-----ActiveSheet.Unprotect Password:="1234"
-----Range("B3").Value = Range("B3") - Range("C3")
-----Range("C3").ClearContents
-----ActiveSheet.Protect Password:="1234"
End Sub

Le code transmis par David84 serait juste si le mot de passe était ""


Bonne soirée à tous
 
Dernière édition:

JCGL

XLDnaute Barbatruc
Re : Les MDP et les macro ne font pas bon ménage...

Bonjour à tous,
Salut David :),
Salut Excel-lent

Sans rien changer à tes codes mais en rajoutant ceci dans le ThisWorkBook :
VB:
Private Sub Workbook_Open()
Dim Sh As Object
Application.ScreenUpdating = False
For Each Sh In Worksheets
    Sh.Protect Password:="1234", UserInterfaceOnly:=True
Next
Application.ScreenUpdating = True
End Sub

A + à tous
 

david84

XLDnaute Barbatruc
Re : Les MDP et les macro ne font pas bon ménage...

Re Excel-Lent,
tu as raison mais j'avais compris que le problème n'était pas de rentrer le mot de passe mais le fait que la feuille soit protégée.
Donc si le mot de passe n'a pas à être saisi, il faut effectivement l'intégrer dans la macro.
A+
Salut Jean-Claude:)
 

ravenolhm

XLDnaute Nouveau
Re : Les MDP et les macro ne font pas bon ménage...

Merci pour toutes ces réponses !!!

Alors j'ai testé la méthode de david84/Excel-lent, ça fonctionne très bien ! l’ennuie c'est que c'est un exemple, et que mon fichier excel possède à peu près... 20-25 macros... :) bon ce n'est pas grand chose dans le fond mais la méthode de JCGL parait assez sympathique.

Mais pardonnez moi mon inculture VBA... la différence, SVP ?!

un dernier truc très bête mais... si les utilisateurs standards vont dans VBA et trouve le mot de passe dans le code... y à t'il un moyen verrouiller VBA ou la visibilité des modules ! (ainsi que des codes feuilles !)

Encore merci pour votre attention et bonne soirée !

cordialement Ravenolhm.
 

JCGL

XLDnaute Barbatruc
Re : Les MDP et les macro ne font pas bon ménage...

Bonjour à tous,

Peux-tu essayer ceci dans un module (en plus du code dans le ThisworkBook) et sur un seul bouton :

VB:
Sub Stock()
Dim X%
Application.ScreenUpdating = 0
For X = 3 To ActiveSheet.Range("A65536").End(xlUp).Row
Range("B" & X).Value = Range("B" & X) - Range("C" & X)
Range("C" & X).ClearContents
Next X
End Sub

A + à tous

Edition : Ajout Protection VBA = jcgl
 

Pièces jointes

  • JC MdP UserInterfaceOnly Stock.xls
    33.5 KB · Affichages: 38
Dernière édition:

Excel-lent

XLDnaute Barbatruc
Re : Les MDP et les macro ne font pas bon ménage...

Bonsoir le fil,

Ravenolhm à dit:
y à t'il un moyen verrouiller VBA ou la visibilité des modules ! (ainsi que des codes feuilles !)

Lorsque tu es dans l'éditeur de macro, dans la partie de droite tu as la liste de tes feuilles ainsi que "ThisWorkbook"

-> un clic gauche sur l'un d'eux pour le sélectionner
-> sans bouger le curseur, un clic droit, sélectionner "propriété VBAProject"
-> sélectionner l'onglet "Protection"
-> cocher vérouiller le projet pour l'affichage
-> mettre un mot de passe et valider en cliquant sur "Ok"

Bonne soirée
 

ravenolhm

XLDnaute Nouveau
Re : Les MDP et les macro ne font pas bon ménage...

Désolé du temps de réponse, Merci encore pour tout vos conseils !

J'ai fais un mixe de tous ça ! ça fonctionne !
Je tiens quand même a dire qu'Excel n'est pas très souple vis à vis de la sécurité :p

Bonne année (chinoise) à vous tous !
 

Statistiques des forums

Discussions
312 505
Messages
2 089 070
Membres
104 019
dernier inscrit
BenKmc