Empêcher l'écriture dans une cellule

nougitch

XLDnaute Occasionnel
Bonjour,

J'aimerais connaître le code VBA permettant d'empêcher l'écriture dans une cellule.

Merci d'avance.
 

dixit

XLDnaute Impliqué
Re : Empêcher l'écriture dans une cellule

bonjour,
il faut protéger la feuille et verrouiller la cellule :
pour la feuille : ActiveSheet.protect (et unprotect pour déprotéger) et mot de passe éventuellement
pour la cellule :
Cells(1, 1).Locked = True
Cells(1, 1).Locked = False
bye
 

Kotov

XLDnaute Impliqué
Re : Empêcher l'écriture dans une cellule

Bonjour Nougitch,

A juste titre, Dixit t'a donné la principale manière d'empêcher une saisie dans une cellule. En protégeant ta feuille, tu es tranquille, l'accès sera refusé.
Toutefois, il est parfois embêtant d'avoir à protéger et déprotéger une feuille surtout si des macros viennent ensuite travailler dans la feuille protégée.

Donc, je te propose un petit code VBA, qui empêche la modification de la cellule C2 sans que la feuille ne soit protégée (cf. fichier joint).

Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim Immuable As Variant
Dim PasTouche As Range
Set PasTouche = Cells(2, 3)
Immuable = PasTouche.Value
If Not Application.Intersect(Target, PasTouche) Is Nothing Then: PasTouche.Value = Immuable: Cells(1, 1).Select
Set PasTouche = Nothing
End Sub
Le principe :
- la valeur de la cellule C2 (PasTouche) est mémorisée dans la variable Immuable
- à chaque fois que l'utilisateur clique dans la cellule C2, la cellule C2 conserve la valeur mémorisée et l'utilisateur se trouve renvoyé en A1 (cells(1,1))
- l'utilisateur peut écrire dans n'importe quelle autre cellule de la feuille

C'est une macro juste pour le fun, dans 99,99% des cas, il vaut mieux utiliser la protection.

Bonne soirée
Kotov
 

Pièces jointes

  • PasTouche.xls
    16 KB · Affichages: 1 058
  • PasTouche.xls
    16 KB · Affichages: 1 130
  • PasTouche.xls
    16 KB · Affichages: 1 207
Dernière édition:

Pierrot93

XLDnaute Barbatruc
Re : Empêcher l'écriture dans une cellule

bonjour Nougitch, Dixit, Kotov

@Kotok
petite erreur qui c'est glissée, utiliser l'événement "Change" plutôt que l'événement "selectionchange", :) Agacant cet événement par défaut...Bravo et merci pour cette astuce.

bonne fin de journée
 

Kotov

XLDnaute Impliqué
Re : Empêcher l'écriture dans une cellule

Bonjour Pierrot, comment vas-tu?
Je suis ravi de te croiser sur ce fil.

Je ne suis pas certain que Worksheet_SelectionChange soit une erreur par rapport à Worksheet_Change

dans le 1er cas, la macro est lancée à chaque nouvelle sélection de cellule
dans le 2nd cas, elle est lancée à chaque changement de valeur dans une cellule

Je préfère utiliser Worksheet_SelectionChange plutôt que Worksheet_Change quand j'ai des macros qui modifient de nombreuses cellules. J'évite ainsi de lancer la macro à chaque changement de valeur.

Mais ca se discute, et peut être qu'il existe des raisons que j'ignore pour préférer Worksheet_Change.
Je suis tout ouïe ! ;)

A +
Kotov
 

Kotov

XLDnaute Impliqué
Re : Empêcher l'écriture dans une cellule

Bonjour Tatiak,

Vu le nombre de macros que j'ai pris (avec ton accord) sur ton blog, c'est bien la moindre des choses que tu mettes celle-çi dans ta besace.
Si j'avais sû, je l'aurais même enveloppée et j'aurais ajouté un joli noeud au paquet-cadeau ! ;)

Quand à l'utilisation de Application.EnableEvents = False, c'est vrai que ça règle de nombreux problèmes (à condition de ne pas oublier de le remettre à True)

A +
Kotov
 

Pierrot93

XLDnaute Barbatruc
Re : Empêcher l'écriture dans une cellule

Re à tous, bonsoir Tatiak,

aarf désolé Kotov, mais comme à priori, tu empêches la selection de la cellule, donc en ne peut la modifier...

De toute facon l'événement change se déclenchant après la modification, la cellule garde la valeur modifiée....

allez, une version toujours pour le fun :

Code:
Private Sub Worksheet_selectionChange(ByVal Target As Range)
If Target.Address(0, 0) = "C2" Then Range("A1").Select
End Sub

Sinon je vais bien, j'espère qu'il en est de même pour toi.

Au plaisir de te croiser.

bonne soirée
@+

Edition : lire la valeur modifiée et non précédente...
 
Dernière édition:

Kotov

XLDnaute Impliqué
Re : Empêcher l'écriture dans une cellule

Re Pierrot,

Très courte ta macro, j'adore quand c'est épuré !

Toutefois, un petit moyen de la contourner :
en sélectionnant un ensemble de cellule dont l'adresse (0,0) est plus "haut" que C2 (dans l'exemple de mon fichier). On peut ainsi modifier la valeur C2.

Essaies en sélectionnant B1: D5

A +
Kotov
 

Pierrot93

XLDnaute Barbatruc
Re : Empêcher l'écriture dans une cellule

Re

bien vu kotov, alors comme ceci avec une boucle sur target....:)

Code:
Private Sub Worksheet_selectionChange(ByVal Target As Range)
Dim c As Range
For Each c In Target
If c.Address(0, 0) = "C2" Then Range("A1").Select
Next c
End Sub

@+
 

Kotov

XLDnaute Impliqué
Re : Empêcher l'écriture dans une cellule

Re Pierrot,

Avec ta boucle sur Target, on élimine des éventualités pour modifier la cellule C2 mais il reste des trous dans le filet ! :
Le Drag and Drop et l'Autofill qui permettent quand même d'effacer la cellule C2 (et c'est pareil dans ma macro)

Donc il faut les désactiver (et ne pas oublier de les réactiver à la fermeture du classeur) :
Application.CellDragAndDrop = False

Bon, j'arrête la dessus, sinon je vais passer la nuit à tester les moyens de contourner.

Bonne nuit
Kotov
 

Bruce68

XLDnaute Impliqué
Re : Empêcher l'écriture dans une cellule

Bonsoir le forum
Une autre solution sans Macro pour empecher l'écriture dans 1 cellule ou une plage de cellules.
1- Sélectionner la ou les cellules
2- Données
3- Validation
4- Liste déroulante choisir : personnaliser
5- dans formule mettre: ""
OK
 

nougitch

XLDnaute Occasionnel
Re : Empêcher l'écriture dans une cellule

Hello tout le monde,

Merci pour vos réactions.
Je me rend bien compte qu'il n'existe pas UNE fonction permettant de jouer avec l'autorisation ou non d'écrire dans une cellule...
Toutes vos petites remarques sont bien pertinententes.
Aussi, comme j'ai besoin d'utiliser cela en fonction du statut d'une checkbox, je resterai sur la solution de Kotov.

Merci encore.
++
nougitch
 

bebop

XLDnaute Nouveau
Re : Empêcher l'écriture dans une cellule

Bonjour
je trouve plein de choses intéressante sur ce site .

Je ne sais pas si j 'aurais une réponse après 6 ans mais j'essaye.
J'ai utilisé les codes ci dessous en utilisant vos propositions pour empêcher les écritures dans les cellules de la ligne 2 conditionné à des dates dans la ligne 3 , (en A2 j'ai la date du jour) interdiction d'écriture une fois la date du jour passée :

Private Sub Worksheet_selectionChange(ByVal Target As Range)
Dim c As Range
For Each c In Target

If Range("c3") > Range("a2") Then Exit Sub
If c.Address(0, 0) = "C2" Then Range("A1").Select

If Range("d3") > Range("a2") Then Exit Sub
If c.Address(0, 0) = "D2" Then Range("A1").Select

If Range("e3") > Range("a2") Then Exit Sub
If c.Address(0, 0) = "E2" Then Range("A1").Select

If Range("f3") > Range("a2") Then Exit Sub
If c.Address(0, 0) = "F2" Then Range("A1").Select

'.......

Next c
End Sub



Çà fonctionne mais comment faire pour avoir un code moins ' bricolé' et plus pro !

Merci d 'avance !
 

Discussions similaires

Statistiques des forums

Discussions
312 329
Messages
2 087 334
Membres
103 519
dernier inscrit
Thomas_grc11