XL 2019 Interdire l'utilisation de la touche supprimer

Steph44

XLDnaute Nouveau
Bonjour à tous,

Je souhaiterai savoir s'il est possible d'empêcher l'utilisation de la touche supprimer sur deux cellules par exemple C79 et C80. J'aimerais également (si c'est possible) qu'un message apparaisse pour l'informer que cette touche supprimer n'est pas utilisable. Enfin, il faudrait malgré tout pouvoir la rendre accessible via un mot de passe.
L'utilisateur doit pouvoir saisir uniquement des valeurs numériques.

Je pense que c'est possible avec un code VBA mais je ne suis qu'un utilisateur exceptionnel du VBA et je ne sais pas en écrire. Je vois bien ou je veux en venir mais je ne sais pas le rédiger !!

Merci d'avance pour votre aide,

Cordialement,

Steph
 
Solution
Ceci dit, la solution d'@Eric C je la verrais plutôt comme ça...
VB:
Private Const RangeInterdit = "D3,G3"

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim Cellule As Range
   
    If Not Intersect(Target, ActiveSheet.Range(RangeInterdit)) Is Nothing Then
        For Each Cellule In ActiveSheet.Range(RangeInterdit)
            If Len(CStr(Cellule.Value)) = 0 Then
                Application.EnableEvents = False
                Application.Undo
                Application.EnableEvents = True
                Exit For
            End If
        Next Cellule
       
        If Not Cellule Is Nothing Then
            MsgBox "Ça va pas la tête d'effacer " & Cellule.Address(0, 0) & " ?"
        End If
    End If
End Sub

Phil69970

XLDnaute Barbatruc
Bonjour @Steph44

Tout en image

1)Tu sélectionnes toute ta feuille
1665416836159.png


2)Tu sélectionnes tes 2 cellules

1665417232288.png


3) Tu coches selon tes souhaits

1665416968256.png



Pour modifier les 2 cellules il faut le MDP
Merci de ton retour

@Phil69970
 

Pièces jointes

  • 1665416715881.png
    1665416715881.png
    21.4 KB · Affichages: 23

Steph44

XLDnaute Nouveau
Merci Phil pour ta réponse rapide.

Cela ne va pas convenir car, on doit pouvoir modifier la valeur numérique inscrite dans la cellule mais pas la supprimer avec la touche DEL du clavier. En résumé on doit pouvoir écrire 0 pas supprimer le contenu !
 

Dudu2

XLDnaute Barbatruc
Une autre méthode que je ne te recommande pas car celle de @Eric C est meilleur, mais juste pour information au cas où c'est juste la touche Suppr qui serait concernée et pas l'effacement pure et simple.
VB:
Private Const RangeInterdit = "D3,G3"

Sub Auto_open()
    Application.OnKey "{DEL}", "Supprimer"
End Sub

Sub Supprimer()
    If TypeOf Selection Is Range Then
        If Not Intersect(Selection, Range(RangeInterdit)) Is Nothing Then
            MsgBox "Interdit d'utiliser la touche supprimer sur " & RangeInterdit & " !"
        Else
            Selection.ClearContents
        End If
    End If
End Sub
 

Staple1600

XLDnaute Barbatruc
Bonjour le fil

Puisque personne parmi les vieux de la vieille ne le fait, je m'y colle ;)
Sachant qu'on peut ouvrir un classeur sans activer les macros
Sachant qu'on peut ouvrir un classeur dans LibreOffice​
et puisque @Steph44 le précise​
mais je ne suis qu'un utilisateur exceptionnel du VBA
S'évertuer à interdire des actions dans Excel par VBA n'est pas 100% secure.

Mieux vaut le savoir avant de passer du temps à rédiger du VBA "coercitif" alors que 7 secondes suffisent pour ruiner Fort Knox.
;)
 

patricktoulon

XLDnaute Barbatruc
sujet interessant et qui revient de temps en temps
la réponse est impossible
par vba toute astuce est dé jouable en désactivant vba ou en utilisant une autre touche
feuille protégé dé jouable aussi

exemple avec vba
la solution de @Dudu2 qui est la plus rependue et la plus utilisée
ben c'est simple la touche suppr est inopérante oui mais il suffit de sélectionner le texte de la cellule et taper la touche back resultat 100% effacement voir meme la touche suppr reprends ses droits et fait son job malgré la déviation de la touche
demo.gif

et même encore plus rigolo
on sélectionne une cellule vide quelque part et on l’amène a la D3 pour la remplacer
ben résultat bonnet blanc blanc bonnet
demo.gif


la protection de la feuille en pratique reste la solution la plus en prenant soins de la rendre insectable
bien quelle se dé joue très facilement
 
Dernière édition:

Dudu2

XLDnaute Barbatruc
J'ai bien précisé dans mon message:
au cas où c'est juste la touche Suppr qui serait concernée et pas l'effacement pure et simple.
Donc inutile d'enfoncer des portes ouvertes en mettant en évidence une "faille" déjà identifiée comme fonction non couverte. J'ai donné ça à titre d'exemple.

D'ailleurs la question est assez mal posée.
S'agit-il d'empêcher de supprimer ce qui est dans la cellule ?
Ou son dernier caractère comme le permet la solution d'@Eric C ?
S'agit-il tout simplement d'en empêcher la modification ?
En fait on ne sait pas...
 

Dudu2

XLDnaute Barbatruc
Si les 2 cellules sont intouchables, ce qui reste le plus logique dans cette demande, le plus simple et de déverrouiller toutes les cellules sauf les 2 concernées et et protéger la feuille sur le contenu uniquement. Ou en VBA de faire un Undo chaque fois qu'elles font partie du Target modifié.

Sinon, l'autre seule hypothèse valide est qu'elles sont sujettes à liste de validation, auquel cas, pour éviter un effacement, la solution d'@Eric C est effectivement la bonne.

Autrement la question n'a pas de sens. C'est dit ! :cool:
 

Phil69970

XLDnaute Barbatruc
Bonjour à vous tous

la protection de la feuille en pratique reste la solution la plus en prenant soins de la rendre insectable
bien quelle se dé joue très facilement
C'est ce que je proposais dans mon post # 2


S'agit-il d'empêcher de supprimer ce qui est dans la cellule ?
Ou son dernier caractère comme le permet la solution d'@Eric C ?
S'agit-il tout simplement d'en empêcher la modification ?
De ce que j'ai compris il faut empêcher de mettre une valeur "vide"

Cela ne va pas convenir car, on doit pouvoir modifier la valeur numérique inscrite dans la cellule mais pas la supprimer avec la touche DEL du clavier. En résumé on doit pouvoir écrire 0 pas supprimer le contenu !

En attendant des précisions du demandeur qui est pour l'instant aux abonnés absents

@Phil69970
 

Dudu2

XLDnaute Barbatruc
Ceci dit, la solution d'@Eric C je la verrais plutôt comme ça...
VB:
Private Const RangeInterdit = "D3,G3"

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim Cellule As Range
   
    If Not Intersect(Target, ActiveSheet.Range(RangeInterdit)) Is Nothing Then
        For Each Cellule In ActiveSheet.Range(RangeInterdit)
            If Len(CStr(Cellule.Value)) = 0 Then
                Application.EnableEvents = False
                Application.Undo
                Application.EnableEvents = True
                Exit For
            End If
        Next Cellule
       
        If Not Cellule Is Nothing Then
            MsgBox "Ça va pas la tête d'effacer " & Cellule.Address(0, 0) & " ?"
        End If
    End If
End Sub
 

Discussions similaires

Réponses
3
Affichages
472