Vous utilisez un navigateur obsolète. Il se peut que ce site ou d'autres sites Web ne s'affichent pas correctement. Vous devez le mettre à jour ou utiliser un navigateur alternatif.
Comment protéger des feuilles contre l'effacement?
Boostez vos compétences Excel avec notre communauté !
Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force.
Apprenez, échangez, progressez – et tout ça gratuitement !
👉 Inscrivez-vous maintenant !
Re : Comment protéger des feuilles contre l'effacement?
Bonjour Aloha,
Si ta feuille reste modifiable on peut également en effacer les données.
Pour faire ce que tu demandes, tu vas dans Format/Cellule, onglet Protection après avoir selectionné les cellules que tu veux modifiables et tu décoches Vérouillée (elles sont toutes vérouillées par défaut)
Pour finir Outils/Protection avec ou sans mot de passe et tu protèges.
Re : Comment protéger des feuilles contre l'effacement?
Bonjour
Essayes avec ce code ... mais bon euh 🙄
Code:
Sub Macro1()
Dim access_granted$, check_user
access_granted = "ForumXLD"
ActiveWorkbook.Protect Structure:=True, Windows:=True
check_user = _
InputBox(vbLf & vbLf & vbTab & "Identifiez-vous!", _
"LE CERBERE VEILLE SUR CE CLASSEUR", _
"Saisir votre mot de passe")
Select Case check_user
Case access_granted
ActiveWorkbook.Unprotect
Case Else
ActiveWorkbook.Protect Structure:=True, Windows:=True
End Select
End Sub
Re : Comment protéger des feuilles contre l'effacement?
Rebonjour "JM",
Formidable de ta part de répondre aussitôt, un dimanche matin, avec un nouveau code.
Merci.
Lorsque j'applique ton code il y a un conflit avec une autre macro qui ne fonctionne plus alors.
Ce code aussi s'applique au classeur entier et il faut le lancer à chaque démarrage.
N'existe-t-il pas une possibilité de protéger durablement certaines feuilles individuelles d'un classeur?
Je pensais que, techniquement parlant, une solution intégrée dans Excel (sans VBA donc) devrait être possible. Cela ne semble donc pas être le cas.
Re : Comment protéger des feuilles contre l'effacement?
Bonjour
Si on regarde les événements classeur et feuille, la suppression n'est pas un événement : il n'est donc pas facile de l'intercepter en VBA.
Mais certains on peut-être trouver un contournement... sachant que la demande de suppression passe par l'évenement deactivate.
Pour l'instant je sèche...
Edit : l'événement deactivate arrive après la suppression donc trop tard pour intercepter
Donc a priori seule solution : n'autoriser la suppression que via un bouton qui déclenche une macro qui analyse la demande et l'accepte ou la refuse selon l'onglet.
Re : Comment protéger des feuilles contre l'effacement?
Rebonjour "JM",
Bonjour Chris,
"JM", désolé de te faire travailler autant un dimanche. Merci pour la peine que tu t'es donnée.
En ce qui concerne l'exécution de ton code, j'ai compris. Seulement, j'ai un certain nombre de sub indépendantes; il faut donc que je l'appelle par chaque sub.
Malheureusement l'insertion d'une nouvelle feuille n'est plus possible.
A moins de faire exécuter, lorsqu'une nouvelle feuille doit être créée -et elle l'est exclusivement par une macro- un code qui enlève la protection à nouveau.
Cette feuille qui doit être créée, est effacée dès qu'elle est imprimée et c'est justement pour parer au risque d'effacer d'autres feuilles que je veux cette protection.
Idéalement il me faudrait donc une routine qui me servirait à effacer la feuille qui a comme nom un chiffre de 1 à 12, et qui empêcherait l'effacement de toute autre feuille.
En y réfléchissant bien je crois que ce que je veux est trop difficile à réaliser.
Chris,
Merci de t'être intéressé à mon petit problème.
Bonne soirée
Idéalement il me faudrait donc une routine qui me servirait à effacer la feuille qui a comme nom un chiffre de 1 à 12, et qui empêcherait l'effacement de toute autre feuille.
En y réfléchissant bien je crois que ce que je veux est trop difficile à réaliser.
Quand le problème est clairement posé, on trouve généralement une solution.
Mettre dans ThisWorkbook :
Code:
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Source As Range)
Dim tablo
tablo = Array("1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12")
If IsError(Application.Match(Sh.Name, tablo, 0)) [COLOR="Red"]And IsEmpty(Source.Cells(1, 1))[/COLOR] Then
Application.EnableEvents = False
Application.Undo
Application.EnableEvents = True
End If
End Sub
C'est juste l'effacement qui est rendu impossible (code en rouge), pas l'entrée de données.
J'espère que c'est bien ce que vous voulez. Sinon reformulez le problème.
Re : Comment protéger des feuilles contre l'effacement?
Re,
Relisant le fil, j'ai l'impression que ce que vous voulez éviter c'est l'effacement de toute la feuille, et non pas l'effacement de cellules individuelles.
Dans ce cas modifiez le code comme suit :
Code:
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Source As Range)
Dim tablo
tablo = Array("1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12")
If IsError(Application.Match(Sh.Name, tablo, 0)) [COLOR="Red"]And Application.CountA(Sh.Cells) = 0[/COLOR] Then
Application.EnableEvents = False
On Error Resume Next
Application.Undo
Application.EnableEvents = True
End If
End Sub
Edition : attention, la méthode Undo échoue si l'effacement est programmé par macro. Pour éviter l'apparition d'une erreur dans ce cas, j'ai ajouté On Error Resume Next.
Re : Comment protéger des feuilles contre l'effacement?
Bonjour "Job75",
Merci à vous de me proposer une solution.
Cependant, lorsque je colle le code dans VBA, je ne constate aucun effet: je peux effacer autant les feuilles portant un chiffre comme nom, que toutes les autres feuilles!
- Navigue sans publicité - Accède à Cléa, notre assistante IA experte Excel... et pas que... - Profite de fonctionnalités exclusives Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel. Je deviens Supporter XLD