Interdire la suppression du contenu des cellules

Nyhra

XLDnaute Nouveau
Bonjour à tous !

Après plusieurs recherches avec des mots-clefs différents, je n'ai pas réussi à trouver un sujet qui réponde à la demande qu'on m'a faite, peut-être un peu compliquée, je l'avoue. Je vais essayer de l'expliquer le plus clairement possible.

Est-il possible d'interdire de façon automatique la suppression du contenu d'une cellule (et par conséquent interdire également la suppression de la ligne et de la colonne dans lesquelles se trouve la cellule) une fois qu'elle est remplie ? J'explique la situation. Le fichier que je dois créer doit pouvoir être rempli par un certain nombre de personnes chaque jour (à partir d'un même poste), mais ces mêmes personnes ne doivent pas pouvoir supprimer ce qu'elles ont écrit ou ce que d'autres ont écrit dans le fichier. La seule personne qui doit être autorisée à le faire est la personne qui me demande de lui créer le fichier (et qui accède au fichier via le réseau par son propre poste).
Auriez-vous une solution pratique pour cela ? Pour le moment, je lui ai proposé de verrouiller les lignes une par une au fur et à mesure, mais j'aimerai pouvoir lui proposer quelque chose de moins fastidieux.

Merci d'avance pour vos réponses !
Et si je n'ai pas été assez claire, n'hésitez pas à me demander de me ré-expliquer.
 

Lone-wolf

XLDnaute Barbatruc
Bonsoir Nyhra

Peut-être comme ceci, à tester. Macro de Hervé Generation-nt

VB:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address(0, 0) = "A1" Then
Application.EnableEvents = False
If Target.Value = "" Then
If Valeur <> 0 Then
Target.Value = Valeur
Else
Target.Value = 0
End If
Else
Valeur = Target.Value
End If
Application.EnableEvents = True
End If
End Sub

Sinon voir LE LIEN
 
Dernière édition:

PMO2

XLDnaute Accro
Bonjour,
Essayez la démarche suivante :
1) copiez le code suivant dans un module standard
VB:
Public MDP As Variant

2) copiez le code suivant dans la fenêtre de code de ThisWorkbook
VB:
Private Sub Workbook_open()
MDP = InputBox(prompt:="Si vous n'êtes pas l'administrateur cliquez sur annuler", Title:="Mot de passe administrateur")
End Sub

3) copiez le code suivant dans la fenêtre de code de la feuille concernée
VB:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim C As Range
'---
If MDP <> "123456" Then 'le mot de passe de l'administrateur (à adapter)
  On Error Resume Next
  If Target.Cells.Count = 1 Then
    If Target <> "" Then Target.Offset(1, 0).Select
  Else
    For Each C In Target
      If C <> "" Then
        C.Offset(1, 0).Select
        Exit For
      End If
    Next C
  End If
  If Err <> 0 Then [a1].Select
End If
End Sub
 

Pièces jointes

  • Nyhra exemple_pmo.xlsm
    14.9 KB · Affichages: 81

Nyhra

XLDnaute Nouveau
Merci à vous deux pour vos réponses rapides !

Lone-wolf, j'avais apparemment une erreur dans la macro même en faisant un copier/coller. Je ne suis pas parvenue à la faire fonctionner.

PMO2, ta solution marche parfaitement bien, je te remercie !
Est-il possible d'y ajouter un petit complément pour empêcher l'utilisation de la fonction annuler (raccourci Ctrl+Z) qui annule les dernières actions (et qui permet donc d'effacer ce qui a été écrit juste avant) ?
 

PMO2

XLDnaute Accro
pour empêcher l'utilisation de la fonction annuler (raccourci Ctrl+Z) qui annule les dernières actions (et qui permet donc d'effacer ce qui a été écrit juste avant) ?

1) Changez le code du module standard par
VB:
Public MDP As Variant

Sub AnnuleCTRLz()
'vide mais utile : annule l'effet du CTRL+Z
End Sub

2) Changez le code de la fenêtre de code de ThisWorkbook par
VB:
Private Sub Workbook_open()
MDP = InputBox(prompt:="Si vous n'êtes pas l'administrateur cliquez sur annuler", Title:="Mot de passe administrateur")
End Sub

Private Sub Workbook_Activate()
Application.OnKey "^z", "AnnuleCTRLz"
End Sub

Private Sub Workbook_Deactivate()
Application.OnKey "^z"
End Sub
 

Pièces jointes

  • Nyhra exemple_pmo 2.00.xlsm
    16.1 KB · Affichages: 56

pierre0000

XLDnaute Nouveau
Bonjour à tous,
Tout d'abord merci pour votre expertise, ça m'aide.. J'ai en revanche un problème, la solution proposée par PMO2 fonctionne à merveille mais dès que j'ouvre la feuille sur un PC autre que le mien, si les macro ne sont pas activées par défaut, l'utilisateur peut modifier la feuille à loisir. Comment faire pour verrouiller la feuille si les macro ne sont pas activées? Merci par avance pour votre aide!
 

pierre0000

XLDnaute Nouveau
J'ai l'impression que c'est possible avec l'astuce suivante:

Private Sub Workbook_BeforeClose(Cancel As Boolean)

Sheets("noMacro").Visible = xlSheetVisible

For Each sh In Sheets
If sh.Name <> "noMacro" Then sh.Visible = xlSheetVeryHidden
Next sh

ActiveWorkbook.Save
End Sub

Private Sub Workbook_Open()
For Each sh In Sheets
sh.Visible = xlSheetVisible
Next sh

Sheets("noMacro").Visible = xlSheetVeryHidden
End Sub

Cela affiche seulement la feuille "nomacro" si l'ultilisateur n'active pas les macros

Mais comment la combiner avec votre macro?

Merci par avance!
 

Discussions similaires

Réponses
13
Affichages
514